ZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvQW5kcm9pZFZlcnNpb24udHh0IGIvY2xhbmctMzM2MjQzNy9BbmRyb2lkVmVyc2lvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5MDFlOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvQW5kcm9pZFZlcnNpb24udHh0CkBAIC0wLDAgKzEgQEAKKzMuOC4yNzU0ODAKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvTU9EVUxFX0xJQ0VOU0VfQlNEX0xJS0UgYi9jbGFuZy0zMzYyNDM3L01PRFVMRV9MSUNFTlNFX0JTRF9MSUtFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L01PRFVMRV9MSUNFTlNFX0JTRF9MSUtFCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L01PRFVMRV9MSUNFTlNFX01JVCBiL2NsYW5nLTMzNjI0MzcvTU9EVUxFX0xJQ0VOU0VfTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L01PRFVMRV9MSUNFTlNFX01JVApkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9OT1RJQ0UgYi9jbGFuZy0zMzYyNDM3L05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzczZmJmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9OT1RJQ0UKQEAgLTAsMCArMSw2OTYgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTExWTSBSZWxlYXNlIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDE0IFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbi4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKworICAgIExMVk0gVGVhbQorCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCisKKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBMTFZNIHNvZnR3YXJlIGNvbnRhaW5zIGNvZGUgd3JpdHRlbiBieSB0aGlyZCBwYXJ0aWVzLiAgU3VjaCBzb2Z0d2FyZSB3aWxsCitoYXZlIGl0cyBvd24gaW5kaXZpZHVhbCBMSUNFTlNFLlRYVCBmaWxlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgYXBwZWFycy4KK1RoaXMgZmlsZSB3aWxsIGRlc2NyaWJlIHRoZSBjb3B5cmlnaHRzLCBsaWNlbnNlLCBhbmQgcmVzdHJpY3Rpb25zIHdoaWNoIGFwcGx5Cit0byB0aGF0IGNvZGUuCisKK1RoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGluIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlIExpY2Vuc2UKK2FwcGxpZXMgdG8gYWxsIGNvZGUgaW4gdGhlIExMVk0gRGlzdHJpYnV0aW9uLCBhbmQgbm90aGluZyBpbiBhbnkgb2YgdGhlCitvdGhlciBsaWNlbnNlcyBnaXZlcyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSBvciB0aGUKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCitTb2Z0d2FyZS4KKworVGhlIGZvbGxvd2luZyBwaWVjZXMgb2Ygc29mdHdhcmUgaGF2ZSBhZGRpdGlvbmFsIG9yIGFsdGVybmF0ZSBjb3B5cmlnaHRzLAorbGljZW5zZXMsIGFuZC9vciByZXN0cmljdGlvbnM6CisKK1Byb2dyYW0gICAgICAgICAgICAgRGlyZWN0b3J5CistLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLQorPG5vbmUgeWV0PgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTExWTSBSZWxlYXNlIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDE0IFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbi4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKworICAgIExMVk0gVGVhbQorCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCisKKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBMTFZNIHNvZnR3YXJlIGNvbnRhaW5zIGNvZGUgd3JpdHRlbiBieSB0aGlyZCBwYXJ0aWVzLiAgU3VjaCBzb2Z0d2FyZSB3aWxsCitoYXZlIGl0cyBvd24gaW5kaXZpZHVhbCBMSUNFTlNFLlRYVCBmaWxlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgYXBwZWFycy4KK1RoaXMgZmlsZSB3aWxsIGRlc2NyaWJlIHRoZSBjb3B5cmlnaHRzLCBsaWNlbnNlLCBhbmQgcmVzdHJpY3Rpb25zIHdoaWNoIGFwcGx5Cit0byB0aGF0IGNvZGUuCisKK1RoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGluIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlIExpY2Vuc2UKK2FwcGxpZXMgdG8gYWxsIGNvZGUgaW4gdGhlIExMVk0gRGlzdHJpYnV0aW9uLCBhbmQgbm90aGluZyBpbiBhbnkgb2YgdGhlCitvdGhlciBsaWNlbnNlcyBnaXZlcyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSBvciB0aGUKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCitTb2Z0d2FyZS4KKworVGhlIGZvbGxvd2luZyBwaWVjZXMgb2Ygc29mdHdhcmUgaGF2ZSBhZGRpdGlvbmFsIG9yIGFsdGVybmF0ZSBjb3B5cmlnaHRzLAorbGljZW5zZXMsIGFuZC9vciByZXN0cmljdGlvbnM6CisKK1Byb2dyYW0gICAgICAgICAgICAgRGlyZWN0b3J5CistLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLQorPG5vbmUgeWV0PgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorY29tcGlsZXJfcnQgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBjb21waWxlcl9ydCBsaWJyYXJ5IGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aCB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcworIkJTRC1MaWtlIiBsaWNlbnNlIGFuZCB0aGUgTUlUIGxpY2Vuc2UuICBBcyBhIHVzZXIgb2YgdGhpcyBjb2RlIHlvdSBtYXkgY2hvb3NlCit0byB1c2UgaXQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuICBBcyBhIGNvbnRyaWJ1dG9yLCB5b3UgYWdyZWUgdG8gYWxsb3cgeW91ciBjb2RlCit0byBiZSB1c2VkIHVuZGVyIGJvdGguCisKK0Z1bGwgdGV4dCBvZiB0aGUgcmVsZXZhbnQgbGljZW5zZXMgaXMgaW5jbHVkZWQgYmVsb3cuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKK09wZW4gU291cmNlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OgorCisgICAgTExWTSBUZWFtCisKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KKworICAgIGh0dHA6Ly9sbHZtLm9yZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKKyAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bworICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHRzIGFuZCBMaWNlbnNlcyBmb3IgVGhpcmQgUGFydHkgU29mdHdhcmUgRGlzdHJpYnV0ZWQgd2l0aCBMTFZNOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgTExWTSBzb2Z0d2FyZSBjb250YWlucyBjb2RlIHdyaXR0ZW4gYnkgdGhpcmQgcGFydGllcy4gIFN1Y2ggc29mdHdhcmUgd2lsbAoraGF2ZSBpdHMgb3duIGluZGl2aWR1YWwgTElDRU5TRS5UWFQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGFwcGVhcnMuCitUaGlzIGZpbGUgd2lsbCBkZXNjcmliZSB0aGUgY29weXJpZ2h0cywgbGljZW5zZSwgYW5kIHJlc3RyaWN0aW9ucyB3aGljaCBhcHBseQordG8gdGhhdCBjb2RlLgorCitUaGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpbiB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZSBMaWNlbnNlCithcHBsaWVzIHRvIGFsbCBjb2RlIGluIHRoZSBMTFZNIERpc3RyaWJ1dGlvbiwgYW5kIG5vdGhpbmcgaW4gYW55IG9mIHRoZQorb3RoZXIgbGljZW5zZXMgZ2l2ZXMgcGVybWlzc2lvbiB0byB1c2UgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0gb3IgdGhlCitVbml2ZXJzaXR5IG9mIElsbGlub2lzIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworU29mdHdhcmUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitsaWJjKysgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBsaWJjKysgbGlicmFyeSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIGJvdGggdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMKKyJCU0QtTGlrZSIgbGljZW5zZSBhbmQgdGhlIE1JVCBsaWNlbnNlLiAgQXMgYSB1c2VyIG9mIHRoaXMgY29kZSB5b3UgbWF5IGNob29zZQordG8gdXNlIGl0IHVuZGVyIGVpdGhlciBsaWNlbnNlLiAgQXMgYSBjb250cmlidXRvciwgeW91IGFncmVlIHRvIGFsbG93IHlvdXIgY29kZQordG8gYmUgdXNlZCB1bmRlciBib3RoLgorCitGdWxsIHRleHQgb2YgdGhlIHJlbGV2YW50IGxpY2Vuc2VzIGlzIGluY2x1ZGVkIGJlbG93LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKworICAgIExMVk0gVGVhbQorCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCisKKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorbGliYysrYWJpIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgbGliYysrYWJpIGxpYnJhcnkgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzCisiQlNELUxpa2UiIGxpY2Vuc2UgYW5kIHRoZSBNSVQgbGljZW5zZS4gIEFzIGEgdXNlciBvZiB0aGlzIGNvZGUgeW91IG1heSBjaG9vc2UKK3RvIHVzZSBpdCB1bmRlciBlaXRoZXIgbGljZW5zZS4gIEFzIGEgY29udHJpYnV0b3IsIHlvdSBhZ3JlZSB0byBhbGxvdyB5b3VyIGNvZGUKK3RvIGJlIHVzZWQgdW5kZXIgYm90aC4KKworRnVsbCB0ZXh0IG9mIHRoZSByZWxldmFudCBsaWNlbnNlcyBpcyBpbmNsdWRlZCBiZWxvdy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQQorT3BlbiBTb3VyY2UgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitEZXZlbG9wZWQgYnk6CisKKyAgICBMTFZNIFRlYW0KKworICAgIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbgorCisgICAgaHR0cDovL2xsdm0ub3JnCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGgKK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSwgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdAorICAgICAgVXJiYW5hLUNoYW1wYWlnbiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvCisgICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT05UUklCVVRPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFCitTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2xpYmMrK2FiaSBMaWNlbnNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGxpYmMrK2FiaSBsaWJyYXJ5IGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aCB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcworIkJTRC1MaWtlIiBsaWNlbnNlIGFuZCB0aGUgTUlUIGxpY2Vuc2UuICBBcyBhIHVzZXIgb2YgdGhpcyBjb2RlIHlvdSBtYXkgY2hvb3NlCit0byB1c2UgaXQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuICBBcyBhIGNvbnRyaWJ1dG9yLCB5b3UgYWdyZWUgdG8gYWxsb3cgeW91ciBjb2RlCit0byBiZSB1c2VkIHVuZGVyIGJvdGguCisKK0Z1bGwgdGV4dCBvZiB0aGUgcmVsZXZhbnQgbGljZW5zZXMgaXMgaW5jbHVkZWQgYmVsb3cuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKK09wZW4gU291cmNlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDA5LTIwMTUgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OgorCisgICAgTExWTSBUZWFtCisKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KKworICAgIGh0dHA6Ly9sbHZtLm9yZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKKyAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bworICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMTFZNIFJlbGVhc2UgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKK09wZW4gU291cmNlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDAzLTIwMTQgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OgorCisgICAgTExWTSBUZWFtCisKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KKworICAgIGh0dHA6Ly9sbHZtLm9yZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKKyAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bworICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0cyBhbmQgTGljZW5zZXMgZm9yIFRoaXJkIFBhcnR5IFNvZnR3YXJlIERpc3RyaWJ1dGVkIHdpdGggTExWTToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIExMVk0gc29mdHdhcmUgY29udGFpbnMgY29kZSB3cml0dGVuIGJ5IHRoaXJkIHBhcnRpZXMuICBTdWNoIHNvZnR3YXJlIHdpbGwKK2hhdmUgaXRzIG93biBpbmRpdmlkdWFsIExJQ0VOU0UuVFhUIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBhcHBlYXJzLgorVGhpcyBmaWxlIHdpbGwgZGVzY3JpYmUgdGhlIGNvcHlyaWdodHMsIGxpY2Vuc2UsIGFuZCByZXN0cmljdGlvbnMgd2hpY2ggYXBwbHkKK3RvIHRoYXQgY29kZS4KKworVGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaW4gdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UgTGljZW5zZQorYXBwbGllcyB0byBhbGwgY29kZSBpbiB0aGUgTExWTSBEaXN0cmlidXRpb24sIGFuZCBub3RoaW5nIGluIGFueSBvZiB0aGUKK290aGVyIGxpY2Vuc2VzIGdpdmVzIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtIG9yIHRoZQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKK1NvZnR3YXJlLgorCitUaGUgZm9sbG93aW5nIHBpZWNlcyBvZiBzb2Z0d2FyZSBoYXZlIGFkZGl0aW9uYWwgb3IgYWx0ZXJuYXRlIGNvcHlyaWdodHMsCitsaWNlbnNlcywgYW5kL29yIHJlc3RyaWN0aW9uczoKKworUHJvZ3JhbSAgICAgICAgICAgICBEaXJlY3RvcnkKKy0tLS0tLS0gICAgICAgICAgICAgLS0tLS0tLS0tCitBdXRvY29uZiAgICAgICAgICAgIGxsdm0vYXV0b2NvbmYKKyAgICAgICAgICAgICAgICAgICAgbGx2bS9wcm9qZWN0cy9Nb2R1bGVNYWtlci9hdXRvY29uZgorR29vZ2xlIFRlc3QgICAgICAgICBsbHZtL3V0aWxzL3VuaXR0ZXN0L2dvb2dsZXRlc3QKK09wZW5CU0QgcmVnZXggICAgICAgbGx2bS9saWIvU3VwcG9ydC97cmVnKiwgQ09QWVJJR0hULnJlZ2V4fQorcHl5YW1sIHRlc3RzICAgICAgICBsbHZtL3Rlc3QvWUFNTFBhcnNlci97Ki5kYXRhLCBMSUNFTlNFLlRYVH0KK0FSTSBjb250cmlidXRpb25zICAgbGx2bS9saWIvVGFyZ2V0L0FSTS9MSUNFTlNFLlRYVAorbWQ1IGNvbnRyaWJ1dGlvbnMgICBsbHZtL2xpYi9TdXBwb3J0L01ENS5jcHAgbGx2bS9pbmNsdWRlL2xsdm0vU3VwcG9ydC9NRDUuaAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHNvZnR3YXJlIGNvbnRhaW5lZCBpbiB0aGlzIGRpcmVjdG9yeSB0cmVlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aCB0aGUKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMgIkJTRC1MaWtlIiBsaWNlbnNlIGFuZCB0aGUgTUlUIGxpY2Vuc2UuICBBcyBhIHVzZXIgb2YKK3RoaXMgY29kZSB5b3UgbWF5IGNob29zZSB0byB1c2UgaXQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuICBBcyBhIGNvbnRyaWJ1dG9yLAoreW91IGFncmVlIHRvIGFsbG93IHlvdXIgY29kZSB0byBiZSB1c2VkIHVuZGVyIGJvdGguICBUaGUgZnVsbCB0ZXh0IG9mIHRoZQorcmVsZXZhbnQgbGljZW5zZXMgaXMgaW5jbHVkZWQgYmVsb3cuCisKK0luIGFkZGl0aW9uLCBhIGxpY2Vuc2UgYWdyZWVtZW50IGZyb20gdGhlIGNvcHlyaWdodC9wYXRlbnQgaG9sZGVycyBvZiB0aGUKK3NvZnR3YXJlIGNvbnRhaW5lZCBpbiB0aGlzIGRpcmVjdG9yeSB0cmVlIGlzIGluY2x1ZGVkIGJlbG93LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE1IEludGVsIENvcnBvcmF0aW9uCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKyAgICBPcGVuTVAgUnVudGltZSBUZWFtCisgICAgSW50ZWwgQ29ycG9yYXRpb24KKyAgICBodHRwOi8vd3d3Lm9wZW5tcHJ0bC5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBPcGVuTVAgUnVudGltZSBUZWFtIG5vciB0aGUKKyAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDE5OTctMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ludGVsIENvcnBvcmF0aW9uCisKK1NvZnR3YXJlIEdyYW50IExpY2Vuc2UgQWdyZWVtZW50ICgiQWdyZWVtZW50IikKKworRXhjZXB0IGZvciB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiB0byB5b3UsIEludGVsIENvcnBvcmF0aW9uICgiSW50ZWwiKSByZXNlcnZlcworYWxsIHJpZ2h0LCB0aXRsZSwgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgU29mdHdhcmUgKGRlZmluZWQgYmVsb3cpLgorCitEZWZpbml0aW9uCisKKyJTb2Z0d2FyZSIgbWVhbnMgdGhlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gYXMgd2VsbCBhcyBhbnkgb3JpZ2luYWwgd29yayBvZgorYXV0aG9yc2hpcCwgaW5jbHVkaW5nIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucyB0byBhbiBleGlzdGluZyB3b3JrLCB0aGF0CitpcyBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBieSBJbnRlbCB0byBsbHZtLm9yZyAoaHR0cDovL2xsdm0ub3JnKSAoIkxMVk0iKSBmb3IKK2luY2x1c2lvbiBpbiwgb3IgZG9jdW1lbnRhdGlvbiBvZiwgYW55IG9mIHRoZSBwcm9kdWN0cyBvd25lZCBvciBtYW5hZ2VkIGJ5IExMVk0KKyh0aGUgIldvcmsiKS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiIG1lYW5zIGFueSBmb3JtIG9mCitlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50IHRvIExMVk0gb3IgaXRzCityZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljCittYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlCittYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIExMVk0gZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZwordGhlIFdvcmssIGJ1dCBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG90aGVyd2lzZS4KKworMS4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMKKyAgIEFncmVlbWVudCwgSW50ZWwgaGVyZWJ5IGdyYW50cyB0byB5b3UgYW5kIHRvIHJlY2lwaWVudHMgb2YgdGhlIFNvZnR3YXJlCisgICBkaXN0cmlidXRlZCBieSBMTFZNIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAgIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUKKyAgIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgIFNvZnR3YXJlIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MuCisKKzIuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzCisgICBBZ3JlZW1lbnQsIEludGVsIGhlcmVieSBncmFudHMgeW91IGFuZCB0byByZWNpcGllbnRzIG9mIHRoZSBTb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgYnkgTExWTSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsCisgICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UKKyAgIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIKKyAgIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgYnkgSW50ZWwgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IEludGVsJ3MgU29mdHdhcmUgYWxvbmUgb3IgYnkKKyAgIGNvbWJpbmF0aW9uIG9mIHRoZSBTb2Z0d2FyZSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggU29mdHdhcmUgd2FzCisgICBzdWJtaXR0ZWQuIElmIGFueSBlbnRpdHkgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IEludGVsIG9yIGFueQorICAgb3RoZXIgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZworICAgdGhhdCBJbnRlbCdzIFNvZnR3YXJlLCBvciB0aGUgV29yayB0byB3aGljaCBJbnRlbCBoYXMgY29udHJpYnV0ZWQgY29uc3RpdHV0ZXMKKyAgIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQKKyAgIHRvIHRoYXQgZW50aXR5IHVuZGVyIHRoaXMgQWdyZWVtZW50IGZvciB0aGUgU29mdHdhcmUgb3IgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCB0aGUgc29mdHdhcmUgaXMKK3Byb3ZpZGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yCitjb25kaXRpb25zIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FSTSBMaW1pdGVkCisKK1NvZnR3YXJlIEdyYW50IExpY2Vuc2UgQWdyZWVtZW50ICgiQWdyZWVtZW50IikKKworRXhjZXB0IGZvciB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiB0byB5b3UsIEFSTSBMaW1pdGVkICgiQVJNIikgcmVzZXJ2ZXMgYWxsCityaWdodCwgdGl0bGUsIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFNvZnR3YXJlIChkZWZpbmVkIGJlbG93KS4KKworRGVmaW5pdGlvbgorCisiU29mdHdhcmUiIG1lYW5zIHRoZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGFzIHdlbGwgYXMgYW55IG9yaWdpbmFsIHdvcmsgb2YKK2F1dGhvcnNoaXAsIGluY2x1ZGluZyBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMgdG8gYW4gZXhpc3Rpbmcgd29yaywgdGhhdAoraXMgaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgYnkgQVJNIHRvIGxsdm0ub3JnIChodHRwOi8vbGx2bS5vcmcpICgiTExWTSIpIGZvcgoraW5jbHVzaW9uIGluLCBvciBkb2N1bWVudGF0aW9uIG9mLCBhbnkgb2YgdGhlIHByb2R1Y3RzIG93bmVkIG9yIG1hbmFnZWQgYnkgTExWTQorKHRoZSAiV29yayIpLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIgbWVhbnMgYW55IGZvcm0gb2YKK2VsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQgdG8gTExWTSBvciBpdHMKK3JlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMKK21haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUKK21hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgTExWTSBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nCit0aGUgV29yaywgYnV0IGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3RoZXJ3aXNlLgorCisxLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcworICAgQWdyZWVtZW50LCBBUk0gaGVyZWJ5IGdyYW50cyB0byB5b3UgYW5kIHRvIHJlY2lwaWVudHMgb2YgdGhlIFNvZnR3YXJlCisgICBkaXN0cmlidXRlZCBieSBMTFZNIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAgIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUKKyAgIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgIFNvZnR3YXJlIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MuCisKKzIuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzCisgICBBZ3JlZW1lbnQsIEFSTSBoZXJlYnkgZ3JhbnRzIHlvdSBhbmQgdG8gcmVjaXBpZW50cyBvZiB0aGUgU29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIGJ5IExMVk0gYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLAorICAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlCisgICB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyCisgICB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgIGJ5IEFSTSB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgQVJNJ3MgU29mdHdhcmUgYWxvbmUgb3IgYnkKKyAgIGNvbWJpbmF0aW9uIG9mIHRoZSBTb2Z0d2FyZSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggU29mdHdhcmUgd2FzCisgICBzdWJtaXR0ZWQuIElmIGFueSBlbnRpdHkgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IEFSTSBvciBhbnkKKyAgIG90aGVyIGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcKKyAgIHRoYXQgQVJNJ3MgU29mdHdhcmUsIG9yIHRoZSBXb3JrIHRvIHdoaWNoIEFSTSBoYXMgY29udHJpYnV0ZWQgY29uc3RpdHV0ZXMKKyAgIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQKKyAgIHRvIHRoYXQgZW50aXR5IHVuZGVyIHRoaXMgQWdyZWVtZW50IGZvciB0aGUgU29mdHdhcmUgb3IgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCB0aGUgc29mdHdhcmUgaXMKK3Byb3ZpZGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yCitjb25kaXRpb25zIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIgYi9jbGFuZy0zMzYyNDM3L2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzMyMGU2YgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvYmluL2FybTY0LXY4YS9hbmFseXplcgpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgLXRhcmdldCBhYXJjaDY0LW5vbmUtbGludXgtYW5kcm9pZCAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIrKyBiL2NsYW5nLTMzNjI0MzcvYmluL2FybTY0LXY4YS9hbmFseXplcisrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4YTJlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIrKwpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAtdGFyZ2V0IGFhcmNoNjQtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9iaW4vYXJtZWFiaS12N2EtaGFyZC9hbmFseXplciBiL2NsYW5nLTMzNjI0MzcvYmluL2FybWVhYmktdjdhLWhhcmQvYW5hbHl6ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWE3MDhhNwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvYmluL2FybWVhYmktdjdhLWhhcmQvYW5hbHl6ZXIKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgYXJtdjctbm9uZS1saW51eC1hbmRyb2lkZWFiaSAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2Jpbi9hcm1lYWJpLXY3YS1oYXJkL2FuYWx5emVyKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9hcm1lYWJpLXY3YS1oYXJkL2FuYWx5emVyKysKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzU0MTY3OQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvYmluL2FybWVhYmktdjdhLWhhcmQvYW5hbHl6ZXIrKwpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAtdGFyZ2V0IGFybXY3LW5vbmUtbGludXgtYW5kcm9pZGVhYmkgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplciBiL2NsYW5nLTMzNjI0MzcvYmluL2FybWVhYmktdjdhL2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhNzA4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplcgpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgLXRhcmdldCBhcm12Ny1ub25lLWxpbnV4LWFuZHJvaWRlYWJpICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL2FybWVhYmktdjdhL2FuYWx5emVyKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplcisrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM1NDE2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplcisrCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrIC10YXJnZXQgYXJtdjctbm9uZS1saW51eC1hbmRyb2lkZWFiaSAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL2FybWVhYmkvYW5hbHl6ZXIgYi9jbGFuZy0zMzYyNDM3L2Jpbi9hcm1lYWJpL2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1MGFhODMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9hcm1lYWJpL2FuYWx5emVyCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAtdGFyZ2V0IGFybXY1dGUtbm9uZS1saW51eC1hbmRyb2lkZWFiaSAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2Jpbi9hcm1lYWJpL2FuYWx5emVyKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9hcm1lYWJpL2FuYWx5emVyKysKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTNmMzdiZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvYmluL2FybWVhYmkvYW5hbHl6ZXIrKwpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAtdGFyZ2V0IGFybXY1dGUtbm9uZS1saW51eC1hbmRyb2lkZWFiaSAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL2FzYW5fZGV2aWNlX3NldHVwIGIvY2xhbmctMzM2MjQzNy9iaW4vYXNhbl9kZXZpY2Vfc2V0dXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjkwNmM4NgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvYmluL2FzYW5fZGV2aWNlX3NldHVwCkBAIC0wLDAgKzEsNDM5IEBACisjIS9iaW4vYmFzaAorIz09PS0gbGliL2FzYW4vc2NyaXB0cy9hc2FuX2RldmljZV9zZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMKKyMKKyMgICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKyMgTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorIworIyBQcmVwYXJlIEFuZHJvaWQgZGV2aWNlIHRvIHJ1biBBU2FuIGFwcGxpY2F0aW9ucy4KKyMKKyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jCisKK3NldCAtZQorCitIRVJFPSIkKGNkICIkKGRpcm5hbWUgIiQwIikiICYmIHB3ZCkiCisKK3JldmVydD1ubworZXh0cmFfb3B0aW9ucz0KK2RldmljZT0KK2xpYj0KK3VzZV9zdT0wCisKK2Z1bmN0aW9uIHVzYWdlIHsKKyAgICBlY2hvICJ1c2FnZTogJDAgWy0tcmV2ZXJ0XSBbLS1kZXZpY2UgZGV2aWNlLWlkXSBbLS1saWIgcGF0aF0gWy0tZXh0cmEtb3B0aW9ucyBvcHRpb25zXSIKKyAgICBlY2hvICIgIC0tcmV2ZXJ0OiBVbmluc3RhbGwgQVNhbiBmcm9tIHRoZSBkZXZpY2UuIgorICAgIGVjaG8gIiAgLS1saWI6IFBhdGggdG8gQVNhbiBydW50aW1lIGxpYnJhcnkuIgorICAgIGVjaG8gIiAgLS1leHRyYS1vcHRpb25zOiBFeHRyYSBBU0FOX09QVElPTlMuIgorICAgIGVjaG8gIiAgLS1kZXZpY2U6IEluc3RhbGwgdG8gdGhlIGdpdmVuIGRldmljZS4gVXNlICdhZGIgZGV2aWNlcycgdG8gZmluZCIKKyAgICBlY2hvICIgICAgICAgICAgICBkZXZpY2UtaWQuIgorICAgIGVjaG8gIiAgLS11c2Utc3U6IFVzZSAnc3UgLWMnIHByZWZpeCBmb3IgZXZlcnkgYWRiIGNvbW1hbmQgaW5zdGVhZCBvZiB1c2luZyIKKyAgICBlY2hvICIgICAgICAgICAgICAnYWRiIHJvb3QnIG9uY2UuIgorICAgIGVjaG8KKyAgICBleGl0IDEKK30KKworZnVuY3Rpb24gYWRiX3B1c2ggeworICBpZiBbICR1c2Vfc3UgLWVxIDAgXTsgdGhlbgorICAgICRBREIgcHVzaCAiJDEiICIkMiIKKyAgZWxzZQorICAgIGxvY2FsIEZJTEVOQU1FPSQoYmFzZW5hbWUgJDEpCisgICAgJEFEQiBwdXNoICIkMSIgIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUUiCisgICAgJEFEQiBzaGVsbCBzdSAtYyAicm0gXFxcIiQyLyRGSUxFTkFNRVxcXCIiID4mL2Rldi9udWxsCisgICAgJEFEQiBzaGVsbCBzdSAtYyAiY2F0IFxcXCIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FXFxcIiA+IFxcXCIkMi8kRklMRU5BTUVcXFwiIgorICAgICRBREIgc2hlbGwgc3UgLWMgInJtIFxcXCIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FXFxcIiIKKyAgZmkKK30KKworZnVuY3Rpb24gYWRiX3JlbW91bnQgeworICBpZiBbICR1c2Vfc3UgLWVxIDAgXTsgdGhlbgorICAgICRBREIgcmVtb3VudAorICBlbHNlCisgICAgbG9jYWwgU1RPUkFHRT1gJEFEQiBzaGVsbCBtb3VudCB8IGdyZXAgL3N5c3RlbSB8IGN1dCAtZCAnICcgLWYxYAorICAgIGlmIFsgIiRTVE9SQUdFIiAhPSAiIiBdOyB0aGVuCisgICAgICBlY2hvIFJlbW91bnRpbmcgJFNUT1JBR0UgYXQgL3N5c3RlbQorICAgICAgJEFEQiBzaGVsbCBzdSAtYyAibW91bnQgLW8gcmVtb3VudCxydyAkU1RPUkFHRSAvc3lzdGVtIgorICAgIGVsc2UKKyAgICAgIGVjaG8gRmFpbGVkIHRvIGdldCBzdG9yYWdlIGRldmljZSBuYW1lIGZvciAiL3N5c3RlbSIgbW91bnQgcG9pbnQKKyAgICBmaQorICBmaQorfQorCitmdW5jdGlvbiBhZGJfc2hlbGwgeworICBpZiBbICR1c2Vfc3UgLWVxIDAgXTsgdGhlbgorICAgICRBREIgc2hlbGwgJEAKKyAgZWxzZQorICAgICRBREIgc2hlbGwgc3UgLWMgIiQqIgorICBmaQorfQorCitmdW5jdGlvbiBhZGJfcm9vdCB7CisgIGlmIFsgJHVzZV9zdSAtZXEgMCBdOyB0aGVuCisgICAgJEFEQiByb290CisgIGZpCit9CisKK2Z1bmN0aW9uIGFkYl93YWl0X2Zvcl9kZXZpY2UgeworICAkQURCIHdhaXQtZm9yLWRldmljZQorfQorCitmdW5jdGlvbiBhZGJfcHVsbCB7CisgIGlmIFsgJHVzZV9zdSAtZXEgMCBdOyB0aGVuCisgICAgJEFEQiBwdWxsICIkMSIgIiQyIgorICBlbHNlCisgICAgbG9jYWwgRklMRU5BTUU9JChiYXNlbmFtZSAkMSkKKyAgICAkQURCIHNoZWxsIHJtICIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FIiA+Ji9kZXYvbnVsbAorICAgICRBREIgc2hlbGwgc3UgLWMgIlsgLWYgXFxcIiQxXFxcIiBdICYmIGNhdCBcXFwiJDFcXFwiID4gXFxcIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUVcXFwiICYmIGNob3duIHJvb3Quc2hlbGwgXFxcIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUVcXFwiICYmIGNobW9kIDc1NSBcXFwiL2RhdGEvbG9jYWwvdG1wLyRGSUxFTkFNRVxcXCIiICYmCisgICAgJEFEQiBwdWxsICIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FIiAiJDIiID4mL2Rldi9udWxsICYmICRBREIgc2hlbGwgInJtIFwiL2RhdGEvbG9jYWwvdG1wLyRGSUxFTkFNRVwiIgorICBmaQorfQorCitmdW5jdGlvbiBnZXRfZGV2aWNlX2FyY2ggeyAjIE9VVCBPVVQ2NAorICAgIGxvY2FsIF9vdXR2YXI9JDEKKyAgICBsb2NhbCBfb3V0dmFyNjQ9JDIKKyAgICBsb2NhbCBfQUJJPSQoYWRiX3NoZWxsIGdldHByb3Agcm8ucHJvZHVjdC5jcHUuYWJpKQorICAgIGxvY2FsIF9BUkNIPQorICAgIGxvY2FsIF9BUkNINjQ9CisgICAgaWYgW1sgJF9BQkkgPT0geDg2KiBdXTsgdGhlbgorICAgICAgICBfQVJDSD1pNjg2CisgICAgZWxpZiBbWyAkX0FCSSA9PSBhcm1lYWJpKiBdXTsgdGhlbgorICAgICAgICBfQVJDSD1hcm0KKyAgICBlbGlmIFtbICRfQUJJID09IGFybTY0LXY4YSogXV07IHRoZW4KKyAgICAgICAgX0FSQ0g9YXJtCisgICAgICAgIF9BUkNINjQ9YWFyY2g2NAorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVW5yZWNvZ25pemVkIGRldmljZSBBQkk6ICRfQUJJIgorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGV2YWwgJF9vdXR2YXI9XCRfQVJDSAorICAgIGV2YWwgJF9vdXR2YXI2ND1cJF9BUkNINjQKK30KKword2hpbGUgW1sgJCMgPiAwIF1dOyBkbworICBjYXNlICQxIGluCisgICAgLS1yZXZlcnQpCisgICAgICByZXZlcnQ9eWVzCisgICAgICA7OworICAgIC0tZXh0cmEtb3B0aW9ucykKKyAgICAgIHNoaWZ0CisgICAgICBpZiBbWyAkIyA9PSAwIF1dOyB0aGVuCisgICAgICAgIGVjaG8gIi0tZXh0cmEtb3B0aW9ucyByZXF1aXJlcyBhbiBhcmd1bWVudC4iCisgICAgICAgIGV4aXQgMQorICAgICAgZmkKKyAgICAgIGV4dHJhX29wdGlvbnM9IiQxIgorICAgICAgOzsKKyAgICAtLWxpYikKKyAgICAgIHNoaWZ0CisgICAgICBpZiBbWyAkIyA9PSAwIF1dOyB0aGVuCisgICAgICAgIGVjaG8gIi0tbGliIHJlcXVpcmVzIGFuIGFyZ3VtZW50LiIKKyAgICAgICAgZXhpdCAxCisgICAgICBmaQorICAgICAgbGliPSIkMSIKKyAgICAgIDs7CisgICAgLS1kZXZpY2UpCisgICAgICBzaGlmdAorICAgICAgaWYgW1sgJCMgPT0gMCBdXTsgdGhlbgorICAgICAgICBlY2hvICItLWRldmljZSByZXF1aXJlcyBhbiBhcmd1bWVudC4iCisgICAgICAgIGV4aXQgMQorICAgICAgZmkKKyAgICAgIGRldmljZT0iJDEiCisgICAgICA7OworICAgIC0tdXNlLXN1KQorICAgICAgdXNlX3N1PTEKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHVzYWdlCisgICAgICA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK0FEQj0ke0FEQjotYWRifQoraWYgW1sgeCRkZXZpY2UgIT0geCBdXTsgdGhlbgorICAgIEFEQj0iJEFEQiAtcyAkZGV2aWNlIgorZmkKKworaWYgWyAkdXNlX3N1IC1lcSAxIF07IHRoZW4KKyAgIyBUZXN0IGlmICdzdScgaXMgcHJlc2VudCBvbiB0aGUgZGV2aWNlCisgIFNVX1RFU1RfT1VUPWAkQURCIHNoZWxsIHN1IC1jICJlY2hvIGZvbyIgMj4mMSB8IHNlZCAncy9cciQvLydgCisgIGlmIFsgJD8gIT0gMCAtbyAiJFNVX1RFU1RfT1VUIiAhPSAiZm9vIiBdOyB0aGVuCisgICAgZWNobyAiRVJST1I6IENhbm5vdCB1c2UgJ3N1IC1jJzoiCisgICAgZWNobyAiJCBhZGIgc2hlbGwgc3UgLWMgXCJlY2hvIGZvb1wiIgorICAgIGVjaG8gJFNVX1RFU1RfT1VUCisgICAgZWNobyAiQ2hlY2sgdGhhdCAnc3UnIGJpbmFyeSBpcyBjb3JyZWN0bHkgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2Ugb3Igb21pdCIKKyAgICBlY2hvICIgICAgICAgICAgICAtLXVzZS1zdSBmbGFnIgorICAgIGV4aXQgMQorICBmaQorZmkKKworZWNobyAnPj4gUmVtb3VudGluZyAvc3lzdGVtIHJ3JworYWRiX3dhaXRfZm9yX2RldmljZQorYWRiX3Jvb3QKK2FkYl93YWl0X2Zvcl9kZXZpY2UKK2FkYl9yZW1vdW50CithZGJfd2FpdF9mb3JfZGV2aWNlCisKK2dldF9kZXZpY2VfYXJjaCBBUkNIIEFSQ0g2NAorZWNobyAiVGFyZ2V0IGFyY2hpdGVjdHVyZTogJEFSQ0giCitBU0FOX1JUPSJsaWJjbGFuZ19ydC5hc2FuLSRBUkNILWFuZHJvaWQuc28iCitpZiBbWyAtbiAkQVJDSDY0IF1dOyB0aGVuCisgIGVjaG8gIlRhcmdldCBhcmNoaXRlY3R1cmU6ICRBUkNINjQiCisgIEFTQU5fUlQ2ND0ibGliY2xhbmdfcnQuYXNhbi0kQVJDSDY0LWFuZHJvaWQuc28iCitmaQorCitpZiBbWyB4JHJldmVydCA9PSB4eWVzIF1dOyB0aGVuCisgICAgZWNobyAnPj4gVW5pbnN0YWxsaW5nIEFTYW4nCisKKyAgICBpZiAhIGFkYl9zaGVsbCBscyAtbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcyB8IGdyZXAgLW8gJ1wtPi4qYXBwX3Byb2Nlc3MnID4mL2Rldi9udWxsOyB0aGVuCisgICAgICBlY2hvICc+PiBQcmUtTCBkZXZpY2UgZGV0ZWN0ZWQuJworICAgICAgYWRiX3NoZWxsIG12IC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzLnJlYWwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MKKyAgICAgIGFkYl9zaGVsbCBybSAvc3lzdGVtL2Jpbi9hc2Fud3JhcHBlcgorICAgIGVsaWYgISBhZGJfc2hlbGwgbHMgLWwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3M2NC5yZWFsIHwgZ3JlcCAtbyAnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScgPiYvZGV2L251bGw7IHRoZW4KKyAgICAgICMgNjQtYml0IGluc3RhbGxhdGlvbi4KKyAgICAgIGFkYl9zaGVsbCBtdiAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczMyLnJlYWwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMgorICAgICAgYWRiX3NoZWxsIG12IC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzNjQucmVhbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczY0CisgICAgICBhZGJfc2hlbGwgcm0gL3N5c3RlbS9iaW4vYXNhbndyYXBwZXIKKyAgICAgIGFkYl9zaGVsbCBybSAvc3lzdGVtL2Jpbi9hc2Fud3JhcHBlcjY0CisgICAgZWxzZQorICAgICAgIyAzMi1iaXQgaW5zdGFsbGF0aW9uLgorICAgICAgYWRiX3NoZWxsIHJtIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzLndyYXAKKyAgICAgIGFkYl9zaGVsbCBybSAvc3lzdGVtL2Jpbi9hc2Fud3JhcHBlcgorICAgICAgYWRiX3NoZWxsIHJtIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCisgICAgICBhZGJfc2hlbGwgbG4gLXMgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMiAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcworICAgIGZpCisKKyAgICBlY2hvICc+PiBSZXN0YXJ0aW5nIHNoZWxsJworICAgIGFkYl9zaGVsbCBzdG9wCisgICAgYWRiX3NoZWxsIHN0YXJ0CisKKyAgICAjIFJlbW92ZSB0aGUgbGlicmFyeSBvbiB0aGUgbGFzdCBzdGVwIHRvIGdpdmUgYSBjaGFuY2UgdG8gdGhlICdzdScgYmluYXJ5IHRvCisgICAgIyBiZSBleGVjdXRlZCB3aXRob3V0IHByb2JsZW0uCisgICAgYWRiX3NoZWxsIHJtIC9zeXN0ZW0vbGliLyRBU0FOX1JUCisKKyAgICBlY2hvICc+PiBEb25lJworICAgIGV4aXQgMAorZmkKKworaWYgW1sgLWQgIiRsaWIiIF1dOyB0aGVuCisgICAgQVNBTl9SVF9QQVRIPSIkbGliIgorZWxpZiBbWyAtZiAiJGxpYiIgJiYgIiRsaWIiID09ICoiJEFTQU5fUlQiIF1dOyB0aGVuCisgICAgQVNBTl9SVF9QQVRIPSQoZGlybmFtZSAiJGxpYiIpCitlbGlmIFtbIC1mICIkSEVSRS8kQVNBTl9SVCIgXV07IHRoZW4KKyAgICBBU0FOX1JUX1BBVEg9IiRIRVJFIgorZWxpZiBbWyAkKGJhc2VuYW1lICIkSEVSRSIpID09ICJiaW4iIF1dOyB0aGVuCisgICAgIyBXZSBjb3VsZCBiZSBpbiB0aGUgdG9vbGNoYWluJ3MgYmFzZSBkaXJlY3RvcnkuCisgICAgIyBDb25zaWRlciAuLi9saWIsIC4uL2xpYi9hc2FuLCAuLi9saWIvbGludXgsCisgICAgIyAuLi9saWIvY2xhbmcvJFZFUlNJT04vbGliL2xpbnV4LCBhbmQgLi4vbGliNjQvY2xhbmcvJFZFUlNJT04vbGliL2xpbnV4LgorICAgIFA9JChscyAiJEhFUkUiLy4uL2xpYi8iJEFTQU5fUlQiIFwKKyAgICAgICAgICAgIiRIRVJFIi8uLi9saWIvYXNhbi8iJEFTQU5fUlQiIFwKKyAgICAgICAgICAgIiRIRVJFIi8uLi9saWIvbGludXgvIiRBU0FOX1JUIiBcCisgICAgICAgICAgICIkSEVSRSIvLi4vbGliL2NsYW5nLyovbGliL2xpbnV4LyIkQVNBTl9SVCIgXAorICAgICAgICAgICAiJEhFUkUiLy4uL2xpYjY0L2NsYW5nLyovbGliL2xpbnV4LyIkQVNBTl9SVCIgMj4vZGV2L251bGwgfCBzb3J0IHwgdGFpbCAtMSkKKyAgICBpZiBbWyAtbiAiJFAiIF1dOyB0aGVuCisgICAgICAgIEFTQU5fUlRfUEFUSD0iJChkaXJuYW1lICIkUCIpIgorICAgIGZpCitmaQorCitpZiBbWyAteiAiJEFTQU5fUlRfUEFUSCIgfHwgISAtZiAiJEFTQU5fUlRfUEFUSC8kQVNBTl9SVCIgXV07IHRoZW4KKyAgICBlY2hvICI+PiBBU2FuIHJ1bnRpbWUgbGlicmFyeSBub3QgZm91bmQiCisgICAgZXhpdCAxCitmaQorCitpZiBbWyAtbiAiJEFTQU5fUlQ2NCIgXV07IHRoZW4KKyAgaWYgW1sgLXogIiRBU0FOX1JUX1BBVEgiIHx8ICEgLWYgIiRBU0FOX1JUX1BBVEgvJEFTQU5fUlQ2NCIgXV07IHRoZW4KKyAgICBlY2hvICI+PiBBU2FuIHJ1bnRpbWUgbGlicmFyeSBub3QgZm91bmQiCisgICAgZXhpdCAxCisgIGZpCitmaQorCitUTVBESVJCQVNFPSQobWt0ZW1wIC1kKQorVE1QRElST0xEPSIkVE1QRElSQkFTRS9vbGQiCitUTVBESVI9IiRUTVBESVJCQVNFL25ldyIKK21rZGlyICIkVE1QRElST0xEIgorCitSRUxFQVNFPSQoYWRiX3NoZWxsIGdldHByb3Agcm8uYnVpbGQudmVyc2lvbi5yZWxlYXNlKQorUFJFX0w9MAoraWYgZWNobyAiJFJFTEVBU0UiIHwgZ3JlcCAnXjRcLicgPiYvZGV2L251bGw7IHRoZW4KKyAgICBQUkVfTD0xCitmaQorCitpZiAhIGFkYl9zaGVsbCBscyAtbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcyB8IGdyZXAgLW8gJ1wtPi4qYXBwX3Byb2Nlc3MnID4mL2Rldi9udWxsOyB0aGVuCisKKyAgICBpZiBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2Vzcy5yZWFsIC9kZXYvbnVsbCA+Ji9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICc+PiBPbGQtc3R5bGUgQVNhbiBpbnN0YWxsYXRpb24gZGV0ZWN0ZWQuIFJldmVydGluZy4nCisgICAgICAgIGFkYl9zaGVsbCBtdiAvc3lzdGVtL2Jpbi9hcHBfcHJvY2Vzcy5yZWFsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCisgICAgZmkKKworICAgIGVjaG8gJz4+IFByZS1MIGRldmljZSBkZXRlY3RlZC4gU2V0dGluZyB1cCBhcHBfcHJvY2VzcyBzeW1saW5rLicKKyAgICBhZGJfc2hlbGwgbXYgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMgorICAgIGFkYl9zaGVsbCBsbiAtcyAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczMyIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCitmaQorCitlY2hvICc+PiBDb3B5aW5nIGZpbGVzIGZyb20gdGhlIGRldmljZScKK2lmIFtbIC1uICIkQVNBTl9SVDY0IiBdXTsgdGhlbgorICBhZGJfcHVsbCAvc3lzdGVtL2xpYi8iJEFTQU5fUlQiICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vbGliNjQvIiRBU0FOX1JUNjQiICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzMzIgIiRUTVBESVJPTEQiIHx8IHRydWUKKyAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMi5yZWFsICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzNjQgIiRUTVBESVJPTEQiIHx8IHRydWUKKyAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3M2NC5yZWFsICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FzYW53cmFwcGVyICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FzYW53cmFwcGVyNjQgIiRUTVBESVJPTEQiIHx8IHRydWUKK2Vsc2UKKyAgYWRiX3B1bGwgL3N5c3RlbS9saWIvIiRBU0FOX1JUIiAiJFRNUERJUk9MRCIgfHwgdHJ1ZQorICBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczMyICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzLndyYXAgIiRUTVBESVJPTEQiIHx8IHRydWUKKyAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXNhbndyYXBwZXIgIiRUTVBESVJPTEQiIHx8IHRydWUKK2ZpCitjcCAtciAiJFRNUERJUk9MRCIgIiRUTVBESVIiCisKK2lmIFtbIC1mICIkVE1QRElSL2FwcF9wcm9jZXNzLndyYXAiIHx8IC1mICIkVE1QRElSL2FwcF9wcm9jZXNzNjQucmVhbCIgXV07IHRoZW4KKyAgICBlY2hvICI+PiBQcmV2aW91cyBpbnN0YWxsYXRpb24gZGV0ZWN0ZWQiCitlbHNlCisgICAgZWNobyAiPj4gTmV3IGluc3RhbGxhdGlvbiIKK2ZpCisKK2VjaG8gJz4+IEdlbmVyYXRpbmcgd3JhcHBlcnMnCisKK2NwICIkQVNBTl9SVF9QQVRILyRBU0FOX1JUIiAiJFRNUERJUi8iCitpZiBbWyAtbiAiJEFTQU5fUlQ2NCIgXV07IHRoZW4KKyAgY3AgIiRBU0FOX1JUX1BBVEgvJEFTQU5fUlQ2NCIgIiRUTVBESVIvIgorZmkKKworQVNBTl9PUFRJT05TPXN0YXJ0X2RlYWN0aXZhdGVkPTEsbWFsbG9jX2NvbnRleHRfc2l6ZT0wCisKK2Z1bmN0aW9uIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyIHsgIyBmcm9tLCB0bywgYXNhbl9ydAorICBsb2NhbCBfZnJvbT0kMQorICBsb2NhbCBfdG89JDIKKyAgbG9jYWwgX2FzYW5fcnQ9JDMKKyAgaWYgW1sgUFJFX0wgLWVxIDAgXV07IHRoZW4KKyAgICAjIExEX1BSRUxPQUQgcGFyc2luZyBpcyBicm9rZW4gaW4gTiBpZiBpdCBzdGFydHMgd2l0aCAiOiIuIEx1Y2tpbHksIGl0IGlzCisgICAgIyB1bnNldCBpbiB0aGUgc3lzdGVtIGVudmlyb25tZW50IHNpbmNlIEwuCisgICAgbG9jYWwgX2xkX3ByZWxvYWQ9JF9hc2FuX3J0CisgIGVsc2UKKyAgICBsb2NhbCBfbGRfcHJlbG9hZD1cJExEX1BSRUxPQUQ6JF9hc2FuX3J0CisgIGZpCisgIGNhdCA8PEVPRiA+IiRUTVBESVIvJF9mcm9tIgorIyEvc3lzdGVtL2Jpbi9zaC1mcm9tLXp5Z290ZQorQVNBTl9PUFRJT05TPSRBU0FOX09QVElPTlMgXFwKK0FTQU5fQUNUSVZBVElPTl9PUFRJT05TPWluY2x1ZGVfaWZfZXhpc3RzPS9kYXRhL2xvY2FsL3RtcC9hc2FuLm9wdGlvbnMuJWIgXFwKK0xEX1BSRUxPQUQ9JF9sZF9wcmVsb2FkIFxcCitleGVjICRfdG8gXCRACisKK0VPRgorfQorCisjIE9uIEFuZHJvaWQtTCBub3QgYWxsb3dpbmcgdXNlciBzZWd2IGhhbmRsZXIgYnJlYWtzIHNvbWUgYXBwbGljYXRpb25zLgoraWYgW1sgUFJFX0wgLWVxIDAgXV07IHRoZW4KKyAgICBBU0FOX09QVElPTlM9IiRBU0FOX09QVElPTlMsYWxsb3dfdXNlcl9zZWd2X2hhbmRsZXI9MSIKK2ZpCisKK2lmIFtbIHgkZXh0cmFfb3B0aW9ucyAhPSB4IF1dIDsgdGhlbgorICAgIEFTQU5fT1BUSU9OUz0iJEFTQU5fT1BUSU9OUywkZXh0cmFfb3B0aW9ucyIKK2ZpCisKKyMgWnlnb3RlIHdyYXBwZXIuCitpZiBbWyAtZiAiJFRNUERJUi9hcHBfcHJvY2VzczY0IiBdXTsgdGhlbgorICAjIEEgNjQtYml0IGRldmljZS4KKyAgaWYgW1sgISAtZiAiJFRNUERJUi9hcHBfcHJvY2VzczY0LnJlYWwiIF1dOyB0aGVuCisgICAgIyBOZXcgaW5zdGFsbGF0aW9uLgorICAgIG12ICIkVE1QRElSL2FwcF9wcm9jZXNzMzIiICIkVE1QRElSL2FwcF9wcm9jZXNzMzIucmVhbCIKKyAgICBtdiAiJFRNUERJUi9hcHBfcHJvY2VzczY0IiAiJFRNUERJUi9hcHBfcHJvY2VzczY0LnJlYWwiCisgIGZpCisgIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyICJhcHBfcHJvY2VzczMyIiAiL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMi5yZWFsIiAiJEFTQU5fUlQiCisgIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyICJhcHBfcHJvY2VzczY0IiAiL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3M2NC5yZWFsIiAiJEFTQU5fUlQ2NCIKK2Vsc2UKKyAgIyBBIDMyLWJpdCBkZXZpY2UuCisgIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyICJhcHBfcHJvY2Vzcy53cmFwIiAiL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMiIgIiRBU0FOX1JUIgorZmkKKworIyBHZW5lcmFsIGNvbW1hbmQtbGluZSB0b29sIHdyYXBwZXIgKHVzZSBmb3IgYW55dGhpbmcgdGhhdCdzIG5vdCBzdGFydGVkIGFzCisjIHp5Z290ZSkuCitjYXQgPDxFT0YgPiIkVE1QRElSL2FzYW53cmFwcGVyIgorIyEvc3lzdGVtL2Jpbi9zaAorTERfUFJFTE9BRD0kQVNBTl9SVCBcXAorZXhlYyBcJEAKKworRU9GCisKK2lmIFtbIC1uICIkQVNBTl9SVDY0IiBdXTsgdGhlbgorICBjYXQgPDxFT0YgPiIkVE1QRElSL2FzYW53cmFwcGVyNjQiCisjIS9zeXN0ZW0vYmluL3NoCitMRF9QUkVMT0FEPSRBU0FOX1JUNjQgXFwKK2V4ZWMgXCRACisKK0VPRgorZmkKKworZnVuY3Rpb24gaW5zdGFsbCB7ICMgZnJvbSwgdG8sIGNobW9kLCBjaGNvbgorICBsb2NhbCBfZnJvbT0kMQorICBsb2NhbCBfdG89JDIKKyAgbG9jYWwgX21vZGU9JDMKKyAgbG9jYWwgX2NvbnRleHQ9JDQKKyAgbG9jYWwgX2Jhc2VuYW1lPSIkKGJhc2VuYW1lICIkX2Zyb20iKSIKKyAgZWNobyAiSW5zdGFsbGluZyAkX3RvLyRfYmFzZW5hbWUgJF9tb2RlICRfY29udGV4dCIKKyAgYWRiX3B1c2ggIiRfZnJvbSIgIiRfdG8vJF9iYXNlbmFtZSIKKyAgYWRiX3NoZWxsIGNob3duIHJvb3Quc2hlbGwgIiRfdG8vJF9iYXNlbmFtZSIKKyAgaWYgW1sgLW4gIiRfbW9kZSIgXV07IHRoZW4KKyAgICBhZGJfc2hlbGwgY2htb2QgIiRfbW9kZSIgIiRfdG8vJF9iYXNlbmFtZSIKKyAgZmkKKyAgaWYgW1sgLW4gIiRfY29udGV4dCIgXV07IHRoZW4KKyAgICBhZGJfc2hlbGwgY2hjb24gIiRfY29udGV4dCIgIiRfdG8vJF9iYXNlbmFtZSIKKyAgZmkKK30KKworaWYgISAoIGNkICIkVE1QRElSQkFTRSIgJiYgZGlmZiAtcXIgb2xkLyBuZXcvICkgOyB0aGVuCisgICAgIyBNYWtlIFNFTGludXggaGFwcHkgYnkga2VlcGluZyBhcHBfcHJvY2VzcyB3cmFwcGVyIGFuZCB0aGUgc2hlbGwKKyAgICAjIGl0IHJ1bnMgb24gaW4genlnb3RlIGRvbWFpbi4KKyAgICBFTkZPUkNJTkc9MAorICAgIGlmIGFkYl9zaGVsbCBnZXRlbmZvcmNlIHwgZ3JlcCBFbmZvcmNpbmcgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIFNvbWV0aW1lcyBzaGVsbCBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UgZmlsZSBjb250ZXh0cy4KKyAgICAgICAgIyBUZW1wb3JhcmlseSBzd2l0Y2ggdG8gcGVybWlzc2l2ZS4KKyAgICAgICAgRU5GT1JDSU5HPTEKKyAgICAgICAgYWRiX3NoZWxsIHNldGVuZm9yY2UgMAorICAgIGZpCisKKyAgICBpZiBbWyBQUkVfTCAtZXEgMSBdXTsgdGhlbgorICAgICAgICBDVFg9dTpvYmplY3RfcjpzeXN0ZW1fZmlsZTpzMAorICAgIGVsc2UKKyAgICAgICAgQ1RYPXU6b2JqZWN0X3I6enlnb3RlX2V4ZWM6czAKKyAgICBmaQorCisgICAgZWNobyAnPj4gUHVzaGluZyBmaWxlcyB0byB0aGUgZGV2aWNlJworCisgICAgaWYgW1sgLW4gIiRBU0FOX1JUNjQiIF1dOyB0aGVuCisgICAgICBpbnN0YWxsICIkVE1QRElSLyRBU0FOX1JUIiAvc3lzdGVtL2xpYiA2NDQKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvJEFTQU5fUlQ2NCIgL3N5c3RlbS9saWI2NCA2NDQKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvYXBwX3Byb2Nlc3MzMiIgL3N5c3RlbS9iaW4gNzU1ICRDVFgKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvYXBwX3Byb2Nlc3MzMi5yZWFsIiAvc3lzdGVtL2JpbiA3NTUgJENUWAorICAgICAgaW5zdGFsbCAiJFRNUERJUi9hcHBfcHJvY2VzczY0IiAvc3lzdGVtL2JpbiA3NTUgJENUWAorICAgICAgaW5zdGFsbCAiJFRNUERJUi9hcHBfcHJvY2VzczY0LnJlYWwiIC9zeXN0ZW0vYmluIDc1NSAkQ1RYCisgICAgICBpbnN0YWxsICIkVE1QRElSL2FzYW53cmFwcGVyIiAvc3lzdGVtL2JpbiA3NTUKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvYXNhbndyYXBwZXI2NCIgL3N5c3RlbS9iaW4gNzU1CisgICAgZWxzZQorICAgICAgaW5zdGFsbCAiJFRNUERJUi8kQVNBTl9SVCIgL3N5c3RlbS9saWIgNjQ0CisgICAgICBpbnN0YWxsICIkVE1QRElSL2FwcF9wcm9jZXNzMzIiIC9zeXN0ZW0vYmluIDc1NSAkQ1RYCisgICAgICBpbnN0YWxsICIkVE1QRElSL2FwcF9wcm9jZXNzLndyYXAiIC9zeXN0ZW0vYmluIDc1NSAkQ1RYCisgICAgICBpbnN0YWxsICIkVE1QRElSL2FzYW53cmFwcGVyIiAvc3lzdGVtL2JpbiA3NTUgJENUWAorCisgICAgICBhZGJfc2hlbGwgcm0gL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MKKyAgICAgIGFkYl9zaGVsbCBsbiAtcyAvc3lzdGVtL2Jpbi9hcHBfcHJvY2Vzcy53cmFwIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCisgICAgZmkKKworICAgIGFkYl9zaGVsbCBjcCAvc3lzdGVtL2Jpbi9zaCAvc3lzdGVtL2Jpbi9zaC1mcm9tLXp5Z290ZQorICAgIGFkYl9zaGVsbCBjaGNvbiAkQ1RYIC9zeXN0ZW0vYmluL3NoLWZyb20tenlnb3RlCisKKyAgICBpZiBbICRFTkZPUkNJTkcgPT0gMSBdOyB0aGVuCisgICAgICAgIGFkYl9zaGVsbCBzZXRlbmZvcmNlIDEKKyAgICBmaQorCisgICAgZWNobyAnPj4gUmVzdGFydGluZyBzaGVsbCAoYXN5bmNocm9ub3VzKScKKyAgICBhZGJfc2hlbGwgc3RvcAorICAgIGFkYl9zaGVsbCBzdGFydAorCisgICAgZWNobyAnPj4gUGxlYXNlIHdhaXQgdW50aWwgdGhlIGRldmljZSByZXN0YXJ0cycKK2Vsc2UKKyAgICBlY2hvICc+PiBEZXZpY2UgaXMgdXAgdG8gZGF0ZScKK2ZpCisKK3JtIC1yICIkVE1QRElSQkFTRSIKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL2NsYW5nKysuZXhlIGIvY2xhbmctMzM2MjQzNy9iaW4vY2xhbmcrKy5leGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWRiOTdlMgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvYmluL2NsYW5nKysuZXhlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL2NsYW5nLWZvcm1hdC5leGUgYi9jbGFuZy0zMzYyNDM3L2Jpbi9jbGFuZy1mb3JtYXQuZXhlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiYjAzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9jbGFuZy1mb3JtYXQuZXhlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL2NsYW5nLXRpZHkuZXhlIGIvY2xhbmctMzM2MjQzNy9iaW4vY2xhbmctdGlkeS5leGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjJmMjFlYQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvYmluL2NsYW5nLXRpZHkuZXhlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL2NsYW5nLmV4ZSBiL2NsYW5nLTMzNjI0MzcvYmluL2NsYW5nLmV4ZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZGI5N2UyCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9iaW4vY2xhbmcuZXhlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL2NsYW5nXzMyLmV4ZSBiL2NsYW5nLTMzNjI0MzcvYmluL2NsYW5nXzMyLmV4ZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNTA4ZjFkCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9iaW4vY2xhbmdfMzIuZXhlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL2xpYndpbnB0aHJlYWQtMS5kbGwgYi9jbGFuZy0zMzYyNDM3L2Jpbi9saWJ3aW5wdGhyZWFkLTEuZGxsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4NGJkZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9saWJ3aW5wdGhyZWFkLTEuZGxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL2xpYndpbnB0aHJlYWQtMS5kbGwuMzIgYi9jbGFuZy0zMzYyNDM3L2Jpbi9saWJ3aW5wdGhyZWFkLTEuZGxsLjMyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0ZTM0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9saWJ3aW5wdGhyZWFkLTEuZGxsLjMyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL21pcHMvYW5hbHl6ZXIgYi9jbGFuZy0zMzYyNDM3L2Jpbi9taXBzL2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxM2RiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9taXBzL2FuYWx5emVyCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAtdGFyZ2V0IG1pcHNlbC1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9iaW4vbWlwcy9hbmFseXplcisrIGIvY2xhbmctMzM2MjQzNy9iaW4vbWlwcy9hbmFseXplcisrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxYTU5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9taXBzL2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBtaXBzZWwtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9iaW4vbWlwczY0L2FuYWx5emVyIGIvY2xhbmctMzM2MjQzNy9iaW4vbWlwczY0L2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlMjc2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi9taXBzNjQvYW5hbHl6ZXIKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgbWlwczY0ZWwtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL21pcHM2NC9hbmFseXplcisrIGIvY2xhbmctMzM2MjQzNy9iaW4vbWlwczY0L2FuYWx5emVyKysKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjA4ZGVlYgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvYmluL21pcHM2NC9hbmFseXplcisrCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrIC10YXJnZXQgbWlwczY0ZWwtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9iaW4veDg2L2FuYWx5emVyIGIvY2xhbmctMzM2MjQzNy9iaW4veDg2L2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmY2JmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi94ODYvYW5hbHl6ZXIKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgaTY4Ni1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9iaW4veDg2L2FuYWx5emVyKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi94ODYvYW5hbHl6ZXIrKwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mY2E2MmRmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9iaW4veDg2L2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBpNjg2LW5vbmUtbGludXgtYW5kcm9pZCAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvYmluL3g4Nl82NC9hbmFseXplciBiL2NsYW5nLTMzNjI0MzcvYmluL3g4Nl82NC9hbmFseXplcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lN2RiNDQzCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9iaW4veDg2XzY0L2FuYWx5emVyCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAtdGFyZ2V0IHg4Nl82NC1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9iaW4veDg2XzY0L2FuYWx5emVyKysgYi9jbGFuZy0zMzYyNDM3L2Jpbi94ODZfNjQvYW5hbHl6ZXIrKwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZDhkMTViCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9iaW4veDg2XzY0L2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCB4ODZfNjQtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjguMjc1NDgwIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjguMjc1NDgwCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjk4ZmNjZDYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC4yNzU0ODAKQEAgLTAsMCArMSBAQAorMy44ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfY21hdGguaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19jbGFuZ19jdWRhX2NtYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3ZmYyZgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19jbGFuZ19jdWRhX2NtYXRoLmgKQEAgLTAsMCArMSwxNDggQEAKKy8qPT09LS0tLSBfX2NsYW5nX2N1ZGFfY21hdGguaCAtIERldmljZS1zaWRlIENVREEgY21hdGggc3VwcG9ydCAtLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisjaWZuZGVmIF9fQ0xBTkdfQ1VEQV9DTUFUSF9IX18KKyNkZWZpbmUgX19DTEFOR19DVURBX0NNQVRIX0hfXworI2lmbmRlZiBfX0NVREFfXworI2Vycm9yICJUaGlzIGZpbGUgaXMgZm9yIENVREEgY29tcGlsYXRpb24gb25seS4iCisjZW5kaWYKKworLy8gQ1VEQSBsZXRzIHVzIHVzZSB2YXJpb3VzIHN0ZCBtYXRoIGZ1bmN0aW9ucyBvbiB0aGUgZGV2aWNlIHNpZGUuICBUaGlzIGZpbGUKKy8vIHdvcmtzIGluIGNvbmNlcnQgd2l0aCBfX2NsYW5nX2N1ZGFfbWF0aF9mb3J3YXJkX2RlY2xhcmVzLmggdG8gbWFrZSB0aGlzIHdvcmsuCisvLworLy8gU3BlY2lmaWNhbGx5LCB0aGUgZm9yd2FyZC1kZWNsYXJlcyBoZWFkZXIgZGVjbGFyZXMgX19kZXZpY2VfXyBvdmVybG9hZHMgZm9yCisvLyB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UsIHRoZW4gcHVsbHMgdGhlbSBpbnRvIG5hbWVzcGFjZSBzdGQKKy8vIHdpdGggJ3VzaW5nJyBzdGF0ZW1lbnRzLiAgVGhlbiB0aGlzIGZpbGUgaW1wbGVtZW50cyB0aG9zZSBmdW5jdGlvbnMsIGFmdGVyCisvLyB0aGUgaW1wbGVtZW50YXRpb25zIGhhdmUgYmVlbiBwdWxsZWQgaW4uCisvLworLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBkZWNsYXJlIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UgYW5kIHB1bGwKKy8vIHRoZW0gaW50byBuYW1lc3BhY2Ugc3RkIHdpdGggdXNpbmcgc3RhdGVtZW50cywgYXMgb3Bwb3NlZCB0byBzaW1wbHkgZGVjbGFyaW5nCisvLyB0aGVzZSBmdW5jdGlvbnMgaW4gbmFtZXNwYWNlIHN0ZCwgYmVjYXVzZSBvdXIgZGV2aWNlIGZ1bmN0aW9ucyBuZWVkIHRvCisvLyBvdmVybG9hZCB0aGUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMsIHdoaWNoIG1heSBiZSBkZWNsYXJlZCBpbiB0aGUgZ2xvYmFsCisvLyBuYW1lc3BhY2Ugb3IgaW4gc3RkLCBkZXBlbmRpbmcgb24gdGhlIGRlZ3JlZSBvZiBjb25mb3JtYW5jZSBvZiB0aGUgc3RkbGliCisvLyBpbXBsZW1lbnRhdGlvbi4gIERlY2xhcmluZyBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZSBhbmQgcHVsbGluZyBpbnRvIG5hbWVzcGFjZQorLy8gc3RkIGNvdmVycyBhbGwgb2YgdGhlIGtub3duIGtub3ducy4KKworI2RlZmluZSBfX0RFVklDRV9fIHN0YXRpYyBfX2RldmljZV9fIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisKK19fREVWSUNFX18gbG9uZyBsb25nIGFicyhsb25nIGxvbmcgX19uKSB7IHJldHVybiA6OmxsYWJzKF9fbik7IH0KK19fREVWSUNFX18gbG9uZyBhYnMobG9uZyBfX24pIHsgcmV0dXJuIDo6bGFicyhfX24pOyB9CitfX0RFVklDRV9fIGZsb2F0IGFicyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZmFic2YoX194KTsgfQorX19ERVZJQ0VfXyBkb3VibGUgYWJzKGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZmFicyhfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KK19fREVWSUNFX18gZmxvYXQgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194KTsgfQorX19ERVZJQ0VfXyBmbG9hdCBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuZihfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IGF0YW4yKGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJldHVybiA6OmF0YW4yZihfX3gsIF9feSk7IH0KK19fREVWSUNFX18gZmxvYXQgY2VpbChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y2VpbGYoX194KTsgfQorX19ERVZJQ0VfXyBmbG9hdCBjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmNvc2YoX194KTsgfQorX19ERVZJQ0VfXyBmbG9hdCBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjb3NoZihfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IGZhYnMoZmxvYXQgX194KSB7IHJldHVybiA6OmZhYnNmKF9feCk7IH0KK19fREVWSUNFX18gZmxvYXQgZmxvb3IoZmxvYXQgX194KSB7IHJldHVybiA6OmZsb29yZihfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CitfX0RFVklDRV9fIGludCBmcGNsYXNzaWZ5KGZsb2F0IF9feCkgeworICByZXR1cm4gX19idWlsdGluX2ZwY2xhc3NpZnkoRlBfTkFOLCBGUF9JTkZJTklURSwgRlBfTk9STUFMLCBGUF9TVUJOT1JNQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUF9aRVJPLCBfX3gpOworfQorX19ERVZJQ0VfXyBpbnQgZnBjbGFzc2lmeShkb3VibGUgX194KSB7CisgIHJldHVybiBfX2J1aWx0aW5fZnBjbGFzc2lmeShGUF9OQU4sIEZQX0lORklOSVRFLCBGUF9OT1JNQUwsIEZQX1NVQk5PUk1BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZQX1pFUk8sIF9feCk7Cit9CitfX0RFVklDRV9fIGZsb2F0IGZyZXhwKGZsb2F0IF9fYXJnLCBpbnQgKl9fZXhwKSB7CisgIHJldHVybiA6OmZyZXhwZihfX2FyZywgX19leHApOworfQorX19ERVZJQ0VfXyBib29sIGlzaW5mKGZsb2F0IF9feCkgeyByZXR1cm4gOjpfX2lzaW5mZihfX3gpOyB9CitfX0RFVklDRV9fIGJvb2wgaXNpbmYoZG91YmxlIF9feCkgeyByZXR1cm4gOjpfX2lzaW5mKF9feCk7IH0KK19fREVWSUNFX18gYm9vbCBpc2Zpbml0ZShmbG9hdCBfX3gpIHsgcmV0dXJuIDo6X19maW5pdGVmKF9feCk7IH0KK19fREVWSUNFX18gYm9vbCBpc2Zpbml0ZShkb3VibGUgX194KSB7IHJldHVybiA6Ol9fZmluaXRlKF9feCk7IH0KK19fREVWSUNFX18gYm9vbCBpc2dyZWF0ZXIoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pc2dyZWF0ZXIoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzZ3JlYXRlcihkb3VibGUgX194LCBkb3VibGUgX195KSB7CisgIHJldHVybiBfX2J1aWx0aW5faXNncmVhdGVyKF9feCwgX195KTsKK30KK19fREVWSUNFX18gYm9vbCBpc2dyZWF0ZXJlcXVhbChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeworICByZXR1cm4gX19idWlsdGluX2lzZ3JlYXRlcmVxdWFsKF9feCwgX195KTsKK30KK19fREVWSUNFX18gYm9vbCBpc2dyZWF0ZXJlcXVhbChkb3VibGUgX194LCBkb3VibGUgX195KSB7CisgIHJldHVybiBfX2J1aWx0aW5faXNncmVhdGVyZXF1YWwoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzbGVzcyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeworICByZXR1cm4gX19idWlsdGluX2lzbGVzcyhfX3gsIF9feSk7Cit9CitfX0RFVklDRV9fIGJvb2wgaXNsZXNzKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3MoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzbGVzc2VxdWFsKGZsb2F0IF9feCwgZmxvYXQgX195KSB7CisgIHJldHVybiBfX2J1aWx0aW5faXNsZXNzZXF1YWwoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzbGVzc2VxdWFsKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3NlcXVhbChfX3gsIF9feSk7Cit9CitfX0RFVklDRV9fIGJvb2wgaXNsZXNzZ3JlYXRlcihmbG9hdCBfX3gsIGZsb2F0IF9feSkgeworICByZXR1cm4gX19idWlsdGluX2lzbGVzc2dyZWF0ZXIoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzbGVzc2dyZWF0ZXIoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeworICByZXR1cm4gX19idWlsdGluX2lzbGVzc2dyZWF0ZXIoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzbmFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjpfX2lzbmFuZihfX3gpOyB9CitfX0RFVklDRV9fIGJvb2wgaXNuYW4oZG91YmxlIF9feCkgeyByZXR1cm4gOjpfX2lzbmFuKF9feCk7IH0KK19fREVWSUNFX18gYm9vbCBpc25vcm1hbChmbG9hdCBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9pc25vcm1hbChfX3gpOyB9CitfX0RFVklDRV9fIGJvb2wgaXNub3JtYWwoZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2lzbm9ybWFsKF9feCk7IH0KK19fREVWSUNFX18gYm9vbCBpc3Vub3JkZXJlZChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeworICByZXR1cm4gX19idWlsdGluX2lzdW5vcmRlcmVkKF9feCwgX195KTsKK30KK19fREVWSUNFX18gYm9vbCBpc3Vub3JkZXJlZChkb3VibGUgX194LCBkb3VibGUgX195KSB7CisgIHJldHVybiBfX2J1aWx0aW5faXN1bm9yZGVyZWQoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBmbG9hdCBsZGV4cChmbG9hdCBfX2FyZywgaW50IF9fZXhwKSB7CisgIHJldHVybiA6OmxkZXhwZihfX2FyZywgX19leHApOworfQorX19ERVZJQ0VfXyBmbG9hdCBsb2coZmxvYXQgX194KSB7IHJldHVybiA6OmxvZ2YoX194KTsgfQorX19ERVZJQ0VfXyBmbG9hdCBsb2cxMChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KK19fREVWSUNFX18gZmxvYXQgbW9kZihmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CitfX0RFVklDRV9fIGZsb2F0IG5leHR0b3dhcmQoZmxvYXQgX19mcm9tLCBmbG9hdCBfX3RvKSB7CisgIHJldHVybiBfX2J1aWx0aW5fbmV4dHRvd2FyZGYoX19mcm9tLCBfX3RvKTsKK30KK19fREVWSUNFX18gZG91YmxlIG5leHR0b3dhcmQoZG91YmxlIF9fZnJvbSwgZG91YmxlIF9fdG8pIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9uZXh0dG93YXJkKF9fZnJvbSwgX190byk7Cit9CitfX0RFVklDRV9fIGZsb2F0IHBvdyhmbG9hdCBfX2Jhc2UsIGZsb2F0IF9fZXhwKSB7CisgIHJldHVybiA6OnBvd2YoX19iYXNlLCBfX2V4cCk7Cit9CitfX0RFVklDRV9fIGZsb2F0IHBvdyhmbG9hdCBfX2Jhc2UsIGludCBfX2lleHApIHsKKyAgcmV0dXJuIDo6cG93aWYoX19iYXNlLCBfX2lleHApOworfQorX19ERVZJQ0VfXyBkb3VibGUgcG93KGRvdWJsZSBfX2Jhc2UsIGludCBfX2lleHApIHsKKyAgcmV0dXJuIDo6cG93aShfX2Jhc2UsIF9faWV4cCk7Cit9CitfX0RFVklDRV9fIGJvb2wgc2lnbmJpdChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6X19zaWduYml0ZihfX3gpOyB9CitfX0RFVklDRV9fIGJvb2wgc2lnbmJpdChkb3VibGUgX194KSB7IHJldHVybiA6Ol9fc2lnbmJpdChfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IHNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6c2luZihfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IHNpbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnNpbmhmKF9feCk7IH0KK19fREVWSUNFX18gZmxvYXQgc3FydChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6c3FydGYoX194KTsgfQorX19ERVZJQ0VfXyBmbG9hdCB0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmYoX194KTsgfQorX19ERVZJQ0VfXyBmbG9hdCB0YW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5oZihfX3gpOyB9CisKKyN1bmRlZiBfX0RFVklDRV9fCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfaW50cmluc2ljcy5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfaW50cmluc2ljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjQxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL19fY2xhbmdfY3VkYV9pbnRyaW5zaWNzLmgKQEAgLTAsMCArMSwzMjIgQEAKKy8qPT09LS0tIF9fY2xhbmdfY3VkYV9pbnRyaW5zaWNzLmggLSBEZXZpY2Utc2lkZSBDVURBIGludHJpbnNpYyB3cmFwcGVycyAtLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisjaWZuZGVmIF9fQ0xBTkdfQ1VEQV9JTlRSSU5TSUNTX0hfXworI2RlZmluZSBfX0NMQU5HX0NVREFfSU5UUklOU0lDU19IX18KKyNpZm5kZWYgX19DVURBX18KKyNlcnJvciAiVGhpcyBmaWxlIGlzIGZvciBDVURBIGNvbXBpbGF0aW9uIG9ubHkuIgorI2VuZGlmCisKKy8vIHNtXzMwIGludHJpbnNpY3M6IF9fc2hmbF97dXAsZG93bix4b3J9LgorCisjZGVmaW5lIF9fU01fMzBfSU5UUklOU0lDU19IX18KKyNkZWZpbmUgX19TTV8zMF9JTlRSSU5TSUNTX0hQUF9fCisKKyNpZiAhZGVmaW5lZChfX0NVREFfQVJDSF9fKSB8fCBfX0NVREFfQVJDSF9fID49IDMwMAorCisjcHJhZ21hIHB1c2hfbWFjcm8oIl9fTUFLRV9TSFVGRkxFUyIpCisjZGVmaW5lIF9fTUFLRV9TSFVGRkxFUyhfX0ZuTmFtZSwgX19JbnRJbnRyaW5zaWMsIF9fRmxvYXRJbnRyaW5zaWMsIF9fTWFzaykgICAgXAorICBpbmxpbmUgX19kZXZpY2VfXyBpbnQgX19Gbk5hbWUoaW50IF9faW4sIGludCBfX29mZnNldCwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3dpZHRoID0gd2FycFNpemUpIHsgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIF9fSW50SW50cmluc2ljKF9faW4sIF9fb2Zmc2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHdhcnBTaXplIC0gX193aWR0aCkgPDwgOCkgfCAoX19NYXNrKSk7ICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlubGluZSBfX2RldmljZV9fIGZsb2F0IF9fRm5OYW1lKGZsb2F0IF9faW4sIGludCBfX29mZnNldCwgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX193aWR0aCA9IHdhcnBTaXplKSB7ICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gX19GbG9hdEludHJpbnNpYyhfX2luLCBfX29mZnNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh3YXJwU2l6ZSAtIF9fd2lkdGgpIDw8IDgpIHwgKF9fTWFzaykpOyAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaW5saW5lIF9fZGV2aWNlX18gdW5zaWduZWQgaW50IF9fRm5OYW1lKHVuc2lnbmVkIGludCBfX2luLCBpbnQgX19vZmZzZXQsICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX193aWR0aCA9IHdhcnBTaXplKSB7ICAgICAgICAgICAgXAorICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgOjpfX0ZuTmFtZShzdGF0aWNfY2FzdDxpbnQ+KF9faW4pLCBfX29mZnNldCwgX193aWR0aCkpOyAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbmxpbmUgX19kZXZpY2VfXyBsb25nIGxvbmcgX19Gbk5hbWUobG9uZyBsb25nIF9faW4sIGludCBfX29mZnNldCwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3dpZHRoID0gd2FycFNpemUpIHsgICAgICAgICAgICAgICBcCisgICAgc3RydWN0IF9fQml0cyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaW50IF9fYSwgX19iOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX1N0YXRpY19hc3NlcnQoc2l6ZW9mKF9faW4pID09IHNpemVvZihfX0JpdHMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9TdGF0aWNfYXNzZXJ0KHNpemVvZihfX0JpdHMpID09IDIgKiBzaXplb2YoaW50KSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX0JpdHMgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWVtY3B5KCZfX2luLCAmX190bXAsIHNpemVvZihfX2luKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fdG1wLl9fYSA9IDo6X19Gbk5hbWUoX190bXAuX19hLCBfX29mZnNldCwgX193aWR0aCk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX3RtcC5fX2IgPSA6Ol9fRm5OYW1lKF9fdG1wLl9fYiwgX19vZmZzZXQsIF9fd2lkdGgpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9uZyBsb25nIF9fb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1lbWNweSgmX19vdXQsICZfX3RtcCwgc2l6ZW9mKF9fdG1wKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gX19vdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbmxpbmUgX19kZXZpY2VfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19Gbk5hbWUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2luLCBpbnQgX19vZmZzZXQsIGludCBfX3dpZHRoID0gd2FycFNpemUpIHsgICAgICAgICBcCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA6Ol9fRm5OYW1lKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX19pbiksIF9fb2Zmc2V0LCBfX3dpZHRoKSk7IFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlubGluZSBfX2RldmljZV9fIGRvdWJsZSBfX0ZuTmFtZShkb3VibGUgX19pbiwgaW50IF9fb2Zmc2V0LCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fd2lkdGggPSB3YXJwU2l6ZSkgeyAgICAgICAgICAgICAgICAgIFwKKyAgICBsb25nIGxvbmcgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX1N0YXRpY19hc3NlcnQoc2l6ZW9mKF9fdG1wKSA9PSBzaXplb2YoX19pbikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1lbWNweSgmX190bXAsICZfX2luLCBzaXplb2YoX19pbikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX3RtcCA9IDo6X19Gbk5hbWUoX190bXAsIF9fb2Zmc2V0LCBfX3dpZHRoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG91YmxlIF9fb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1lbWNweSgmX19vdXQsICZfX3RtcCwgc2l6ZW9mKF9fb3V0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gX19vdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworX19NQUtFX1NIVUZGTEVTKF9fc2hmbCwgX19udnZtX3NoZmxfaWR4X2kzMiwgX19udnZtX3NoZmxfaWR4X2YzMiwgMHgxZik7CisvLyBXZSB1c2UgMCByYXRoZXIgdGhhbiAzMSBhcyBvdXIgbWFzaywgYmVjYXVzZSBzaGZsLnVwIGFwcGxpZXMgdG8gbGFuZXMgPj0KKy8vIG1heExhbmUuCitfX01BS0VfU0hVRkZMRVMoX19zaGZsX3VwLCBfX252dm1fc2hmbF91cF9pMzIsIF9fbnZ2bV9zaGZsX3VwX2YzMiwgMCk7CitfX01BS0VfU0hVRkZMRVMoX19zaGZsX2Rvd24sIF9fbnZ2bV9zaGZsX2Rvd25faTMyLCBfX252dm1fc2hmbF9kb3duX2YzMiwgMHgxZik7CitfX01BS0VfU0hVRkZMRVMoX19zaGZsX3hvciwgX19udnZtX3NoZmxfYmZseV9pMzIsIF9fbnZ2bV9zaGZsX2JmbHlfZjMyLCAweDFmKTsKKworI3ByYWdtYSBwb3BfbWFjcm8oIl9fTUFLRV9TSFVGRkxFUyIpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChfX0NVREFfQVJDSF9fKSB8fCBfX0NVREFfQVJDSF9fID49IDMwMAorCisvLyBzbV8zMiBpbnRyaW5zaWNzOiBfX2xkZyBhbmQgX19mdW5uZWxzaGlmdF97bCxsYyxyLHJjfS4KKworLy8gUHJldmVudCB0aGUgdmFuaWxsYSBzbV8zMiBpbnRyaW5zaWNzIGhlYWRlciBmcm9tIGJlaW5nIGluY2x1ZGVkLgorI2RlZmluZSBfX1NNXzMyX0lOVFJJTlNJQ1NfSF9fCisjZGVmaW5lIF9fU01fMzJfSU5UUklOU0lDU19IUFBfXworCisjaWYgIWRlZmluZWQoX19DVURBX0FSQ0hfXykgfHwgX19DVURBX0FSQ0hfXyA+PSAzMjAKKworaW5saW5lIF9fZGV2aWNlX18gY2hhciBfX2xkZyhjb25zdCBjaGFyICpwdHIpIHsgcmV0dXJuIF9fbnZ2bV9sZGdfYyhwdHIpOyB9CitpbmxpbmUgX19kZXZpY2VfXyBzaG9ydCBfX2xkZyhjb25zdCBzaG9ydCAqcHRyKSB7IHJldHVybiBfX252dm1fbGRnX3MocHRyKTsgfQoraW5saW5lIF9fZGV2aWNlX18gaW50IF9fbGRnKGNvbnN0IGludCAqcHRyKSB7IHJldHVybiBfX252dm1fbGRnX2kocHRyKTsgfQoraW5saW5lIF9fZGV2aWNlX18gbG9uZyBfX2xkZyhjb25zdCBsb25nICpwdHIpIHsgcmV0dXJuIF9fbnZ2bV9sZGdfbChwdHIpOyB9CitpbmxpbmUgX19kZXZpY2VfXyBsb25nIGxvbmcgX19sZGcoY29uc3QgbG9uZyBsb25nICpwdHIpIHsKKyAgcmV0dXJuIF9fbnZ2bV9sZGdfbGwocHRyKTsKK30KK2lubGluZSBfX2RldmljZV9fIHVuc2lnbmVkIGNoYXIgX19sZGcoY29uc3QgdW5zaWduZWQgY2hhciAqcHRyKSB7CisgIHJldHVybiBfX252dm1fbGRnX3VjKHB0cik7Cit9CitpbmxpbmUgX19kZXZpY2VfXyB1bnNpZ25lZCBzaG9ydCBfX2xkZyhjb25zdCB1bnNpZ25lZCBzaG9ydCAqcHRyKSB7CisgIHJldHVybiBfX252dm1fbGRnX3VzKHB0cik7Cit9CitpbmxpbmUgX19kZXZpY2VfXyB1bnNpZ25lZCBpbnQgX19sZGcoY29uc3QgdW5zaWduZWQgaW50ICpwdHIpIHsKKyAgcmV0dXJuIF9fbnZ2bV9sZGdfdWkocHRyKTsKK30KK2lubGluZSBfX2RldmljZV9fIHVuc2lnbmVkIGxvbmcgX19sZGcoY29uc3QgdW5zaWduZWQgbG9uZyAqcHRyKSB7CisgIHJldHVybiBfX252dm1fbGRnX3VsKHB0cik7Cit9CitpbmxpbmUgX19kZXZpY2VfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19sZGcoY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICpwdHIpIHsKKyAgcmV0dXJuIF9fbnZ2bV9sZGdfdWxsKHB0cik7Cit9CitpbmxpbmUgX19kZXZpY2VfXyBmbG9hdCBfX2xkZyhjb25zdCBmbG9hdCAqcHRyKSB7IHJldHVybiBfX252dm1fbGRnX2YocHRyKTsgfQoraW5saW5lIF9fZGV2aWNlX18gZG91YmxlIF9fbGRnKGNvbnN0IGRvdWJsZSAqcHRyKSB7IHJldHVybiBfX252dm1fbGRnX2QocHRyKTsgfQorCitpbmxpbmUgX19kZXZpY2VfXyBjaGFyMiBfX2xkZyhjb25zdCBjaGFyMiAqcHRyKSB7CisgIHR5cGVkZWYgY2hhciBjMiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKKyAgLy8gV2UgY2FuIGFzc3VtZSB0aGF0IHB0ciBpcyBhbGlnbmVkIGF0IGxlYXN0IHRvIGNoYXIyJ3MgYWxpZ25tZW50LCBidXQgdGhlCisgIC8vIGxvYWQgd2lsbCBhc3N1bWUgdGhhdCBwdHIgaXMgYWxpZ25lZCB0byBjaGFyMidzIGFsaWdubWVudC4gIFRoaXMgaXMgb25seQorICAvLyBzYWZlIGlmIGFsaWdub2YoYzIpIDw9IGFsaWdub2YoY2hhcjIpLgorICBjMiBydiA9IF9fbnZ2bV9sZGdfYzIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjMiAqPihwdHIpKTsKKyAgY2hhcjIgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXR1cm4gcmV0OworfQoraW5saW5lIF9fZGV2aWNlX18gY2hhcjQgX19sZGcoY29uc3QgY2hhcjQgKnB0cikgeworICB0eXBlZGVmIGNoYXIgYzQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7CisgIGM0IHJ2ID0gX19udnZtX2xkZ19jNChyZWludGVycHJldF9jYXN0PGNvbnN0IGM0ICo+KHB0cikpOworICBjaGFyNCByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldC56ID0gcnZbMl07CisgIHJldC53ID0gcnZbM107CisgIHJldHVybiByZXQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyBzaG9ydDIgX19sZGcoY29uc3Qgc2hvcnQyICpwdHIpIHsKKyAgdHlwZWRlZiBzaG9ydCBzMiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKKyAgczIgcnYgPSBfX252dm1fbGRnX3MyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgczIgKj4ocHRyKSk7CisgIHNob3J0MiByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldHVybiByZXQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyBzaG9ydDQgX19sZGcoY29uc3Qgc2hvcnQ0ICpwdHIpIHsKKyAgdHlwZWRlZiBzaG9ydCBzNCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsKKyAgczQgcnYgPSBfX252dm1fbGRnX3M0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgczQgKj4ocHRyKSk7CisgIHNob3J0NCByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldC56ID0gcnZbMl07CisgIHJldC53ID0gcnZbM107CisgIHJldHVybiByZXQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyBpbnQyIF9fbGRnKGNvbnN0IGludDIgKnB0cikgeworICB0eXBlZGVmIGludCBpMiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKKyAgaTIgcnYgPSBfX252dm1fbGRnX2kyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaTIgKj4ocHRyKSk7CisgIGludDIgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXR1cm4gcmV0OworfQoraW5saW5lIF9fZGV2aWNlX18gaW50NCBfX2xkZyhjb25zdCBpbnQ0ICpwdHIpIHsKKyAgdHlwZWRlZiBpbnQgaTQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7CisgIGk0IHJ2ID0gX19udnZtX2xkZ19pNChyZWludGVycHJldF9jYXN0PGNvbnN0IGk0ICo+KHB0cikpOworICBpbnQ0IHJldDsKKyAgcmV0LnggPSBydlswXTsKKyAgcmV0LnkgPSBydlsxXTsKKyAgcmV0LnogPSBydlsyXTsKKyAgcmV0LncgPSBydlszXTsKKyAgcmV0dXJuIHJldDsKK30KK2lubGluZSBfX2RldmljZV9fIGxvbmdsb25nMiBfX2xkZyhjb25zdCBsb25nbG9uZzIgKnB0cikgeworICB0eXBlZGVmIGxvbmcgbG9uZyBsbDIgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7CisgIGxsMiBydiA9IF9fbnZ2bV9sZGdfbGwyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgbGwyICo+KHB0cikpOworICBsb25nbG9uZzIgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXR1cm4gcmV0OworfQorCitpbmxpbmUgX19kZXZpY2VfXyB1Y2hhcjIgX19sZGcoY29uc3QgdWNoYXIyICpwdHIpIHsKKyAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjMiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKKyAgdWMyIHJ2ID0gX19udnZtX2xkZ191YzIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1YzIgKj4ocHRyKSk7CisgIHVjaGFyMiByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldHVybiByZXQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyB1Y2hhcjQgX19sZGcoY29uc3QgdWNoYXI0ICpwdHIpIHsKKyAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjNCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsKKyAgdWM0IHJ2ID0gX19udnZtX2xkZ191YzQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1YzQgKj4ocHRyKSk7CisgIHVjaGFyNCByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldC56ID0gcnZbMl07CisgIHJldC53ID0gcnZbM107CisgIHJldHVybiByZXQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyB1c2hvcnQyIF9fbGRnKGNvbnN0IHVzaG9ydDIgKnB0cikgeworICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzMiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKKyAgdXMyIHJ2ID0gX19udnZtX2xkZ191czIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1czIgKj4ocHRyKSk7CisgIHVzaG9ydDIgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXR1cm4gcmV0OworfQoraW5saW5lIF9fZGV2aWNlX18gdXNob3J0NCBfX2xkZyhjb25zdCB1c2hvcnQ0ICpwdHIpIHsKKyAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1czQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7CisgIHVzNCBydiA9IF9fbnZ2bV9sZGdfdXM0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdXM0ICo+KHB0cikpOworICB1c2hvcnQ0IHJldDsKKyAgcmV0LnggPSBydlswXTsKKyAgcmV0LnkgPSBydlsxXTsKKyAgcmV0LnogPSBydlsyXTsKKyAgcmV0LncgPSBydlszXTsKKyAgcmV0dXJuIHJldDsKK30KK2lubGluZSBfX2RldmljZV9fIHVpbnQyIF9fbGRnKGNvbnN0IHVpbnQyICpwdHIpIHsKKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWkyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOworICB1aTIgcnYgPSBfX252dm1fbGRnX3VpMihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpMiAqPihwdHIpKTsKKyAgdWludDIgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXR1cm4gcmV0OworfQoraW5saW5lIF9fZGV2aWNlX18gdWludDQgX19sZGcoY29uc3QgdWludDQgKnB0cikgeworICB0eXBlZGVmIHVuc2lnbmVkIGludCB1aTQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7CisgIHVpNCBydiA9IF9fbnZ2bV9sZGdfdWk0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWk0ICo+KHB0cikpOworICB1aW50NCByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldC56ID0gcnZbMl07CisgIHJldC53ID0gcnZbM107CisgIHJldHVybiByZXQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyB1bG9uZ2xvbmcyIF9fbGRnKGNvbnN0IHVsb25nbG9uZzIgKnB0cikgeworICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGwyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOworICB1bGwyIHJ2ID0gX19udnZtX2xkZ191bGwyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWxsMiAqPihwdHIpKTsKKyAgdWxvbmdsb25nMiByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldHVybiByZXQ7Cit9CisKK2lubGluZSBfX2RldmljZV9fIGZsb2F0MiBfX2xkZyhjb25zdCBmbG9hdDIgKnB0cikgeworICB0eXBlZGVmIGZsb2F0IGYyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOworICBmMiBydiA9IF9fbnZ2bV9sZGdfZjIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmMiAqPihwdHIpKTsKKyAgZmxvYXQyIHJldDsKKyAgcmV0LnggPSBydlswXTsKKyAgcmV0LnkgPSBydlsxXTsKKyAgcmV0dXJuIHJldDsKK30KK2lubGluZSBfX2RldmljZV9fIGZsb2F0NCBfX2xkZyhjb25zdCBmbG9hdDQgKnB0cikgeworICB0eXBlZGVmIGZsb2F0IGY0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOworICBmNCBydiA9IF9fbnZ2bV9sZGdfZjQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmNCAqPihwdHIpKTsKKyAgZmxvYXQ0IHJldDsKKyAgcmV0LnggPSBydlswXTsKKyAgcmV0LnkgPSBydlsxXTsKKyAgcmV0LnogPSBydlsyXTsKKyAgcmV0LncgPSBydlszXTsKKyAgcmV0dXJuIHJldDsKK30KK2lubGluZSBfX2RldmljZV9fIGRvdWJsZTIgX19sZGcoY29uc3QgZG91YmxlMiAqcHRyKSB7CisgIHR5cGVkZWYgZG91YmxlIGQyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOworICBkMiBydiA9IF9fbnZ2bV9sZGdfZDIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBkMiAqPihwdHIpKTsKKyAgZG91YmxlMiByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldHVybiByZXQ7Cit9CisKKy8vIFRPRE86IEltcGxlbWVudCB0aGVzZSBhcyBpbnRyaW5zaWNzLCBzbyB0aGUgYmFja2VuZCBjYW4gd29yayBpdHMgbWFnaWMgb24KKy8vIHRoZXNlLiAgQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgaW1wbGVtZW50IHRoZXNlIGFzIHBsYWluIEMgYW5kIHRyeSB0byBnZXQKKy8vIGxsdm0gdG8gcmVjb2duaXplIHRoZSByZWxldmFudCBwYXR0ZXJucy4KK2lubGluZSBfX2RldmljZV9fIHVuc2lnbmVkIF9fZnVubmVsc2hpZnRfbCh1bnNpZ25lZCBsb3czMiwgdW5zaWduZWQgaGlnaDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0V2lkdGgpIHsKKyAgdW5zaWduZWQgcmVzdWx0OworICBhc20oInNoZi5sLndyYXAuYjMyICUwLCAlMSwgJTIsICUzOyIKKyAgICAgIDogIj1yIihyZXN1bHQpCisgICAgICA6ICJyIihsb3czMiksICJyIihoaWdoMzIpLCAiciIoc2hpZnRXaWR0aCkpOworICByZXR1cm4gcmVzdWx0OworfQoraW5saW5lIF9fZGV2aWNlX18gdW5zaWduZWQgX19mdW5uZWxzaGlmdF9sYyh1bnNpZ25lZCBsb3czMiwgdW5zaWduZWQgaGlnaDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdFdpZHRoKSB7CisgIHVuc2lnbmVkIHJlc3VsdDsKKyAgYXNtKCJzaGYubC5jbGFtcC5iMzIgJTAsICUxLCAlMiwgJTM7IgorICAgICAgOiAiPXIiKHJlc3VsdCkKKyAgICAgIDogInIiKGxvdzMyKSwgInIiKGhpZ2gzMiksICJyIihzaGlmdFdpZHRoKSk7CisgIHJldHVybiByZXN1bHQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyB1bnNpZ25lZCBfX2Z1bm5lbHNoaWZ0X3IodW5zaWduZWQgbG93MzIsIHVuc2lnbmVkIGhpZ2gzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdFdpZHRoKSB7CisgIHVuc2lnbmVkIHJlc3VsdDsKKyAgYXNtKCJzaGYuci53cmFwLmIzMiAlMCwgJTEsICUyLCAlMzsiCisgICAgICA6ICI9ciIocmVzdWx0KQorICAgICAgOiAiciIobG93MzIpLCAiciIoaGlnaDMyKSwgInIiKHNoaWZ0V2lkdGgpKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KK2lubGluZSBfX2RldmljZV9fIHVuc2lnbmVkIF9fZnVubmVsc2hpZnRfcmModW5zaWduZWQgbG93MzIsIHVuc2lnbmVkIGhpZ2gzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hpZnRXaWR0aCkgeworICB1bnNpZ25lZCByZXQ7CisgIGFzbSgic2hmLnIuY2xhbXAuYjMyICUwLCAlMSwgJTIsICUzOyIKKyAgICAgIDogIj1yIihyZXQpCisgICAgICA6ICJyIihsb3czMiksICJyIihoaWdoMzIpLCAiciIoc2hpZnRXaWR0aCkpOworICByZXR1cm4gcmV0OworfQorCisjZW5kaWYgLy8gIWRlZmluZWQoX19DVURBX0FSQ0hfXykgfHwgX19DVURBX0FSQ0hfXyA+PSAzMjAKKworI2VuZGlmIC8vIGRlZmluZWQoX19DTEFOR19DVURBX0lOVFJJTlNJQ1NfSF9fKQpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfbWF0aF9mb3J3YXJkX2RlY2xhcmVzLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL19fY2xhbmdfY3VkYV9tYXRoX2ZvcndhcmRfZGVjbGFyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjI4MzRkCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfbWF0aF9mb3J3YXJkX2RlY2xhcmVzLmgKQEAgLTAsMCArMSwyNjMgQEAKKy8qPT09LSBfX2NsYW5nX21hdGhfZm9yd2FyZF9kZWNsYXJlcy5oIC0gUHJvdG90eXBlcyBvZiBfX2RldmljZV9fIG1hdGggZm5zIC0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0NMQU5HX19DVURBX01BVEhfRk9SV0FSRF9ERUNMQVJFU19IX18KKyNkZWZpbmUgX19DTEFOR19fQ1VEQV9NQVRIX0ZPUldBUkRfREVDTEFSRVNfSF9fCisjaWZuZGVmIF9fQ1VEQV9fCisjZXJyb3IgIlRoaXMgZmlsZSBpcyBmb3IgQ1VEQSBjb21waWxhdGlvbiBvbmx5LiIKKyNlbmRpZgorCisvLyBUaGlzIGZpbGUgZm9yd2FyZC1kZWNsYXJlcyBvZiBzb21lIG1hdGggZnVuY3Rpb25zIHdlIChvciB0aGUgQ1VEQSBoZWFkZXJzKQorLy8gd2lsbCBkZWZpbmUgbGF0ZXIuICBXZSBuZWVkIHRvIGRvIHRoaXMsIGFuZCBkbyBpdCBiZWZvcmUgY21hdGggaXMgaW5jbHVkZWQsCisvLyBiZWNhdXNlIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG1heSBoYXZlIGNvbnN0ZXhwciBtYXRoIGZ1bmN0aW9ucy4gIEluIHRoZQorLy8gYWJzZW5jZSBvZiBhIHByaW9yIF9fZGV2aWNlX18gZGVjbCwgdGhvc2UgY29uc3RleHByIGZ1bmN0aW9ucyBtYXkgYmVjb21lCisvLyBpbXBsaWNpdGx5IGhvc3QrZGV2aWNlLiAgaG9zdCtkZXZpY2UgZnVuY3Rpb25zIGNhbid0IGJlIG92ZXJsb2FkZWQsIHNvIHRoYXQKKy8vIHdvdWxkIHByZWNsdWRlIHRoZSB1c2Ugb2Ygb3VyIG93biBfX2RldmljZV9fIG92ZXJsb2FkcyBmb3IgdGhlc2UgZnVuY3Rpb25zLgorCisjcHJhZ21hIHB1c2hfbWFjcm8oIl9fREVWSUNFX18iKQorI2RlZmluZSBfX0RFVklDRV9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fYXR0cmlidXRlX18oKGRldmljZSkpCisKK19fREVWSUNFX18gZG91YmxlIGFicyhkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBhYnMoZmxvYXQpOworX19ERVZJQ0VfXyBpbnQgYWJzKGludCk7CitfX0RFVklDRV9fIGxvbmcgYWJzKGxvbmcpOworX19ERVZJQ0VfXyBsb25nIGxvbmcgYWJzKGxvbmcgbG9uZyk7CitfX0RFVklDRV9fIGRvdWJsZSBhY29zKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGFjb3MoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgYWNvc2goZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgYWNvc2goZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgYXNpbihkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBhc2luKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGFzaW5oKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGFzaW5oKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGF0YW4yKGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgYXRhbjIoZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGF0YW4oZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgYXRhbihmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBhdGFuaChkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBhdGFuaChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBjYnJ0KGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGNicnQoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgY2VpbChkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBjZWlsKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGNvcHlzaWduKGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgY29weXNpZ24oZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGNvcyhkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBjb3MoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgY29zaChkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBjb3NoKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGVyZmMoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgZXJmYyhmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBlcmYoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgZXJmKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGV4cDIoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgZXhwMihmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBleHAoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgZXhwKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGV4cG0xKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGV4cG0xKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGZhYnMoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgZmFicyhmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBmZGltKGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgZmRpbShmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgZmxvb3IoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgZmxvb3IoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgZm1hKGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBmbWEoZmxvYXQsIGZsb2F0LCBmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBmbWF4KGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgZm1heChmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgZm1pbihkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGZtaW4oZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGZtb2QoZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBmbW9kKGZsb2F0LCBmbG9hdCk7CitfX0RFVklDRV9fIGludCBmcGNsYXNzaWZ5KGRvdWJsZSk7CitfX0RFVklDRV9fIGludCBmcGNsYXNzaWZ5KGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGZyZXhwKGRvdWJsZSwgaW50ICopOworX19ERVZJQ0VfXyBmbG9hdCBmcmV4cChmbG9hdCwgaW50ICopOworX19ERVZJQ0VfXyBkb3VibGUgaHlwb3QoZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBoeXBvdChmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBpbnQgaWxvZ2IoZG91YmxlKTsKK19fREVWSUNFX18gaW50IGlsb2diKGZsb2F0KTsKK19fREVWSUNFX18gYm9vbCBpc2Zpbml0ZShkb3VibGUpOworX19ERVZJQ0VfXyBib29sIGlzZmluaXRlKGZsb2F0KTsKK19fREVWSUNFX18gYm9vbCBpc2dyZWF0ZXIoZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBib29sIGlzZ3JlYXRlcmVxdWFsKGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gYm9vbCBpc2dyZWF0ZXJlcXVhbChmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBib29sIGlzZ3JlYXRlcihmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBib29sIGlzaW5mKGRvdWJsZSk7CitfX0RFVklDRV9fIGJvb2wgaXNpbmYoZmxvYXQpOworX19ERVZJQ0VfXyBib29sIGlzbGVzcyhkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGJvb2wgaXNsZXNzZXF1YWwoZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBib29sIGlzbGVzc2VxdWFsKGZsb2F0LCBmbG9hdCk7CitfX0RFVklDRV9fIGJvb2wgaXNsZXNzKGZsb2F0LCBmbG9hdCk7CitfX0RFVklDRV9fIGJvb2wgaXNsZXNzZ3JlYXRlcihkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGJvb2wgaXNsZXNzZ3JlYXRlcihmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBib29sIGlzbmFuKGRvdWJsZSk7CitfX0RFVklDRV9fIGJvb2wgaXNuYW4oZmxvYXQpOworX19ERVZJQ0VfXyBib29sIGlzbm9ybWFsKGRvdWJsZSk7CitfX0RFVklDRV9fIGJvb2wgaXNub3JtYWwoZmxvYXQpOworX19ERVZJQ0VfXyBib29sIGlzdW5vcmRlcmVkKGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gYm9vbCBpc3Vub3JkZXJlZChmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBsb25nIGxhYnMobG9uZyk7CitfX0RFVklDRV9fIGRvdWJsZSBsZGV4cChkb3VibGUsIGludCk7CitfX0RFVklDRV9fIGZsb2F0IGxkZXhwKGZsb2F0LCBpbnQpOworX19ERVZJQ0VfXyBkb3VibGUgbGdhbW1hKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGxnYW1tYShmbG9hdCk7CitfX0RFVklDRV9fIGxvbmcgbG9uZyBsbGFicyhsb25nIGxvbmcpOworX19ERVZJQ0VfXyBsb25nIGxvbmcgbGxyaW50KGRvdWJsZSk7CitfX0RFVklDRV9fIGxvbmcgbG9uZyBsbHJpbnQoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgbG9nMTAoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgbG9nMTAoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgbG9nMXAoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgbG9nMXAoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgbG9nMihkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBsb2cyKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGxvZ2IoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgbG9nYihmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBsb2coZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgbG9nKGZsb2F0KTsKK19fREVWSUNFX18gbG9uZyBscmludChkb3VibGUpOworX19ERVZJQ0VfXyBsb25nIGxyaW50KGZsb2F0KTsKK19fREVWSUNFX18gbG9uZyBscm91bmQoZG91YmxlKTsKK19fREVWSUNFX18gbG9uZyBscm91bmQoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgbW9kZihkb3VibGUsIGRvdWJsZSAqKTsKK19fREVWSUNFX18gZmxvYXQgbW9kZihmbG9hdCwgZmxvYXQgKik7CitfX0RFVklDRV9fIGRvdWJsZSBuYW4oY29uc3QgY2hhciAqKTsKK19fREVWSUNFX18gZmxvYXQgbmFuZihjb25zdCBjaGFyICopOworX19ERVZJQ0VfXyBkb3VibGUgbmVhcmJ5aW50KGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IG5lYXJieWludChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBuZXh0YWZ0ZXIoZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBuZXh0YWZ0ZXIoZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIG5leHR0b3dhcmQoZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBuZXh0dG93YXJkKGZsb2F0LCBmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBwb3coZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBkb3VibGUgcG93KGRvdWJsZSwgaW50KTsKK19fREVWSUNFX18gZmxvYXQgcG93KGZsb2F0LCBmbG9hdCk7CitfX0RFVklDRV9fIGZsb2F0IHBvdyhmbG9hdCwgaW50KTsKK19fREVWSUNFX18gZG91YmxlIHJlbWFpbmRlcihkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IHJlbWFpbmRlcihmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgcmVtcXVvKGRvdWJsZSwgZG91YmxlLCBpbnQgKik7CitfX0RFVklDRV9fIGZsb2F0IHJlbXF1byhmbG9hdCwgZmxvYXQsIGludCAqKTsKK19fREVWSUNFX18gZG91YmxlIHJpbnQoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgcmludChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSByb3VuZChkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCByb3VuZChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBzY2FsYmxuKGRvdWJsZSwgbG9uZyk7CitfX0RFVklDRV9fIGZsb2F0IHNjYWxibG4oZmxvYXQsIGxvbmcpOworX19ERVZJQ0VfXyBkb3VibGUgc2NhbGJuKGRvdWJsZSwgaW50KTsKK19fREVWSUNFX18gZmxvYXQgc2NhbGJuKGZsb2F0LCBpbnQpOworX19ERVZJQ0VfXyBib29sIHNpZ25iaXQoZG91YmxlKTsKK19fREVWSUNFX18gYm9vbCBzaWduYml0KGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIHNpbihkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBzaW4oZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgc2luaChkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBzaW5oKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIHNxcnQoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgc3FydChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSB0YW4oZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgdGFuKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIHRhbmgoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgdGFuaChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSB0Z2FtbWEoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgdGdhbW1hKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIHRydW5jKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IHRydW5jKGZsb2F0KTsKKworbmFtZXNwYWNlIHN0ZCB7Cit1c2luZyA6OmFiczsKK3VzaW5nIDo6YWNvczsKK3VzaW5nIDo6YWNvc2g7Cit1c2luZyA6OmFzaW47Cit1c2luZyA6OmFzaW5oOwordXNpbmcgOjphdGFuOwordXNpbmcgOjphdGFuMjsKK3VzaW5nIDo6YXRhbmg7Cit1c2luZyA6OmNicnQ7Cit1c2luZyA6OmNlaWw7Cit1c2luZyA6OmNvcHlzaWduOwordXNpbmcgOjpjb3M7Cit1c2luZyA6OmNvc2g7Cit1c2luZyA6OmVyZjsKK3VzaW5nIDo6ZXJmYzsKK3VzaW5nIDo6ZXhwOwordXNpbmcgOjpleHAyOwordXNpbmcgOjpleHBtMTsKK3VzaW5nIDo6ZmFiczsKK3VzaW5nIDo6ZmRpbTsKK3VzaW5nIDo6Zmxvb3I7Cit1c2luZyA6OmZtYTsKK3VzaW5nIDo6Zm1heDsKK3VzaW5nIDo6Zm1pbjsKK3VzaW5nIDo6Zm1vZDsKK3VzaW5nIDo6ZnBjbGFzc2lmeTsKK3VzaW5nIDo6ZnJleHA7Cit1c2luZyA6Omh5cG90OwordXNpbmcgOjppbG9nYjsKK3VzaW5nIDo6aXNmaW5pdGU7Cit1c2luZyA6OmlzZ3JlYXRlcjsKK3VzaW5nIDo6aXNncmVhdGVyZXF1YWw7Cit1c2luZyA6OmlzaW5mOwordXNpbmcgOjppc2xlc3M7Cit1c2luZyA6OmlzbGVzc2VxdWFsOwordXNpbmcgOjppc2xlc3NncmVhdGVyOwordXNpbmcgOjppc25hbjsKK3VzaW5nIDo6aXNub3JtYWw7Cit1c2luZyA6OmlzdW5vcmRlcmVkOwordXNpbmcgOjpsYWJzOwordXNpbmcgOjpsZGV4cDsKK3VzaW5nIDo6bGdhbW1hOwordXNpbmcgOjpsbGFiczsKK3VzaW5nIDo6bGxyaW50OwordXNpbmcgOjpsb2c7Cit1c2luZyA6OmxvZzEwOwordXNpbmcgOjpsb2cxcDsKK3VzaW5nIDo6bG9nMjsKK3VzaW5nIDo6bG9nYjsKK3VzaW5nIDo6bHJpbnQ7Cit1c2luZyA6Omxyb3VuZDsKK3VzaW5nIDo6bW9kZjsKK3VzaW5nIDo6bmFuOwordXNpbmcgOjpuYW5mOwordXNpbmcgOjpuZWFyYnlpbnQ7Cit1c2luZyA6Om5leHRhZnRlcjsKK3VzaW5nIDo6bmV4dHRvd2FyZDsKK3VzaW5nIDo6cG93OwordXNpbmcgOjpyZW1haW5kZXI7Cit1c2luZyA6OnJlbXF1bzsKK3VzaW5nIDo6cmludDsKK3VzaW5nIDo6cm91bmQ7Cit1c2luZyA6OnNjYWxibG47Cit1c2luZyA6OnNjYWxibjsKK3VzaW5nIDo6c2lnbmJpdDsKK3VzaW5nIDo6c2luOwordXNpbmcgOjpzaW5oOwordXNpbmcgOjpzcXJ0OwordXNpbmcgOjp0YW47Cit1c2luZyA6OnRhbmg7Cit1c2luZyA6OnRnYW1tYTsKK3VzaW5nIDo6dHJ1bmM7Cit9IC8vIG5hbWVzcGFjZSBzdGQKKworI3ByYWdtYSBwb3BfbWFjcm8oIl9fREVWSUNFX18iKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19jbGFuZ19jdWRhX3J1bnRpbWVfd3JhcHBlci5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfcnVudGltZV93cmFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ0NWY5YgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19jbGFuZ19jdWRhX3J1bnRpbWVfd3JhcHBlci5oCkBAIC0wLDAgKzEsMzE2IEBACisvKj09PS0tLS0gX19jbGFuZ19jdWRhX3J1bnRpbWVfd3JhcHBlci5oIC0gQ1VEQSBydW50aW1lIHN1cHBvcnQgLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworLyoKKyAqIFdBUk5JTkc6IFRoaXMgaGVhZGVyIGlzIGludGVuZGVkIHRvIGJlIGRpcmVjdGx5IC1pbmNsdWRlJ2QgYnkKKyAqIHRoZSBjb21waWxlciBhbmQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIGluY2x1ZGVkIGJ5IHVzZXJzLgorICoKKyAqIENVREEgaGVhZGVycyBhcmUgaW1wbGVtZW50ZWQgaW4gYSB3YXkgdGhhdCBjdXJyZW50bHkgbWFrZXMgaXQKKyAqIGltcG9zc2libGUgZm9yIHVzZXIgY29kZSB0byAjaW5jbHVkZSBkaXJlY3RseSB3aGVuIGNvbXBpbGluZyB3aXRoCisgKiBDbGFuZy4gVGhleSBwcmVzZW50IGRpZmZlcmVudCB2aWV3IG9mIENVREEtc3VwcGxpZWQgZnVuY3Rpb25zCisgKiBkZXBlbmRpbmcgb24gd2hlcmUgaW4gTlZDQydzIGNvbXBpbGF0aW9uIHBpcGVsaW5lIHRoZSBoZWFkZXJzIGFyZQorICogaW5jbHVkZWQuIE5laXRoZXIgb2YgdGhlc2UgbW9kZXMgcHJvdmlkZXMgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2l0aAorICogY29ycmVjdCBhdHRyaWJ1dGVzLCBzbyB3ZSB1c2UgcHJlcHJvY2Vzc29yIHRvIGZvcmNlIHRoZSBoZWFkZXJzCisgKiBpbnRvIGEgZm9ybSB0aGF0IENsYW5nIGNhbiB1c2UuCisgKgorICogU2ltaWxhcmx5IHRvIE5WQ0Mgd2hpY2ggLWluY2x1ZGUncyBjdWRhX3J1bnRpbWUuaCwgQ2xhbmcgLWluY2x1ZGUncworICogdGhpcyBmaWxlIGR1cmluZyBldmVyeSBDVURBIGNvbXBpbGF0aW9uLgorICovCisKKyNpZm5kZWYgX19DTEFOR19DVURBX1JVTlRJTUVfV1JBUFBFUl9IX18KKyNkZWZpbmUgX19DTEFOR19DVURBX1JVTlRJTUVfV1JBUFBFUl9IX18KKworI2lmIGRlZmluZWQoX19DVURBX18pICYmIGRlZmluZWQoX19jbGFuZ19fKQorCisvLyBJbmNsdWRlIHNvbWUgZm9yd2FyZCBkZWNsYXJlcyB0aGF0IG11c3QgY29tZSBiZWZvcmUgY21hdGguCisjaW5jbHVkZSA8X19jbGFuZ19jdWRhX21hdGhfZm9yd2FyZF9kZWNsYXJlcy5oPgorCisvLyBJbmNsdWRlIHNvbWUgc3RhbmRhcmQgaGVhZGVycyB0byBhdm9pZCBDVURBIGhlYWRlcnMgaW5jbHVkaW5nIHRoZW0KKy8vIHdoaWxlIHNvbWUgcmVxdWlyZWQgbWFjcm9zIChsaWtlIF9fVEhST1cpIGFyZSBpbiBhIHdlaXJkIHN0YXRlLgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8vIFByZXNlcnZlIGNvbW1vbiBtYWNyb3MgdGhhdCB3aWxsIGJlIGNoYW5nZWQgYmVsb3cgYnkgdXMgb3IgYnkgQ1VEQQorLy8gaGVhZGVycy4KKyNwcmFnbWEgcHVzaF9tYWNybygiX19USFJPVyIpCisjcHJhZ21hIHB1c2hfbWFjcm8oIl9fQ1VEQV9BUkNIX18iKQorCisvLyBXQVJOSU5HOiBQcmVwcm9jZXNzb3IgaGFja3MgYmVsb3cgYXJlIGJhc2VkIG9uIHNwZWNpZmljIGRldGFpbHMgb2YKKy8vIENVREEtNy54IGhlYWRlcnMgYW5kIGFyZSBub3QgZXhwZWN0ZWQgdG8gd29yayB3aXRoIGFueSBvdGhlcgorLy8gdmVyc2lvbiBvZiBDVURBIGhlYWRlcnMuCisjaW5jbHVkZSAiY3VkYS5oIgorI2lmICFkZWZpbmVkKENVREFfVkVSU0lPTikKKyNlcnJvciAiY3VkYS5oIGRpZCBub3QgZGVmaW5lIENVREFfVkVSU0lPTiIKKyNlbGlmIENVREFfVkVSU0lPTiA8IDcwMDAgfHwgQ1VEQV9WRVJTSU9OID4gNzA1MAorI2Vycm9yICJVbnN1cHBvcnRlZCBDVURBIHZlcnNpb24hIgorI2VuZGlmCisKKy8vIE1ha2UgbGFyZ2VzdCBzdWJzZXQgb2YgZGV2aWNlIGZ1bmN0aW9ucyBhdmFpbGFibGUgZHVyaW5nIGhvc3QKKy8vIGNvbXBpbGF0aW9uIC0tIFNNXzM1IGZvciB0aGUgdGltZSBiZWluZy4KKyNpZm5kZWYgX19DVURBX0FSQ0hfXworI2RlZmluZSBfX0NVREFfQVJDSF9fIDM1MAorI2VuZGlmCisKKyNpbmNsdWRlICJjdWRhX2J1aWx0aW5fdmFycy5oIgorCisvLyBObyBuZWVkIGZvciBkZXZpY2VfbGF1bmNoX3BhcmFtZXRlcnMuaCBhcyBjdWRhX2J1aWx0aW5fdmFycy5oIGFib3ZlCisvLyBoYXMgdGFrZW4gY2FyZSBvZiBidWlsdGluIHZhcmlhYmxlcyBkZWNsYXJlZCBpbiB0aGUgZmlsZS4KKyNkZWZpbmUgX19ERVZJQ0VfTEFVTkNIX1BBUkFNRVRFUlNfSF9fCisKKy8vIHttYXRoLGRldmljZX1fZnVuY3Rpb25zLmggb25seSBoYXZlIGRlY2xhcmF0aW9ucyBvZiB0aGUKKy8vIGZ1bmN0aW9ucy4gV2UgZG9uJ3QgbmVlZCB0aGVtIGFzIHdlJ3JlIGdvaW5nIHRvIHB1bGwgaW4gdGhlaXIKKy8vIGRlZmluaXRpb25zIGZyb20gLmhwcCBmaWxlcy4KKyNkZWZpbmUgX19ERVZJQ0VfRlVOQ1RJT05TX0hfXworI2RlZmluZSBfX01BVEhfRlVOQ1RJT05TX0hfXworI2RlZmluZSBfX0NPTU1PTl9GVU5DVElPTlNfSF9fCisKKyN1bmRlZiBfX0NVREFDQ19fCisjZGVmaW5lIF9fQ1VEQUJFX18KKy8vIERpc2FibGVzIGRlZmluaXRpb25zIG9mIGRldmljZS1zaWRlIHJ1bnRpbWUgc3VwcG9ydCBzdHVicyBpbgorLy8gY3VkYV9kZXZpY2VfcnVudGltZV9hcGkuaAorI2luY2x1ZGUgImRyaXZlcl90eXBlcy5oIgorI2luY2x1ZGUgImhvc3RfY29uZmlnLmgiCisjaW5jbHVkZSAiaG9zdF9kZWZpbmVzLmgiCisKKyN1bmRlZiBfX0NVREFCRV9fCisjZGVmaW5lIF9fQ1VEQUNDX18KKyNpbmNsdWRlICJjdWRhX3J1bnRpbWUuaCIKKworI3VuZGVmIF9fQ1VEQUNDX18KKyNkZWZpbmUgX19DVURBQkVfXworCisvLyBDVURBIGhlYWRlcnMgdXNlIF9fbnZ2bV9tZW1jcHkgYW5kIF9fbnZ2bV9tZW1zZXQgd2hpY2ggQ2xhbmcgZG9lcworLy8gbm90IGhhdmUgYXQgdGhlIG1vbWVudC4gRW11bGF0ZSB0aGVtIHdpdGggYSBidWlsdGluIG1lbWNweS9tZW1zZXQuCisjZGVmaW5lIF9fbnZ2bV9tZW1jcHkocywgZCwgbiwgYSkgX19idWlsdGluX21lbWNweShzLCBkLCBuKQorI2RlZmluZSBfX252dm1fbWVtc2V0KGQsIGMsIG4sIGEpIF9fYnVpbHRpbl9tZW1zZXQoZCwgYywgbikKKworI2luY2x1ZGUgImNydC9kZXZpY2VfcnVudGltZS5oIgorI2luY2x1ZGUgImNydC9ob3N0X3J1bnRpbWUuaCIKKy8vIGRldmljZV9ydW50aW1lLmggZGVmaW5lcyBfX2N4YV8qIG1hY3JvcyB0aGF0IHdpbGwgY29uZmxpY3Qgd2l0aAorLy8gY3h4YWJpLmguCisvLyBGSVhNRTogcmVkZWZpbmUgdGhlc2UgYXMgX19kZXZpY2VfXyBmdW5jdGlvbnMuCisjdW5kZWYgX19jeGFfdmVjX2N0b3IKKyN1bmRlZiBfX2N4YV92ZWNfY2N0b3IKKyN1bmRlZiBfX2N4YV92ZWNfZHRvcgorI3VuZGVmIF9fY3hhX3ZlY19uZXcyCisjdW5kZWYgX19jeGFfdmVjX25ldzMKKyN1bmRlZiBfX2N4YV92ZWNfZGVsZXRlMgorI3VuZGVmIF9fY3hhX3ZlY19kZWxldGUKKyN1bmRlZiBfX2N4YV92ZWNfZGVsZXRlMworI3VuZGVmIF9fY3hhX3B1cmVfdmlydHVhbAorCisvLyBXZSBuZWVkIGRlY2xzIGZvciBmdW5jdGlvbnMgaW4gQ1VEQSdzIGxpYmRldmljZSB3aXRoIF9fZGV2aWNlX18KKy8vIGF0dHJpYnV0ZSBvbmx5LiBBbGFzIHRoZXkgY29tZSBlaXRoZXIgYXMgX19ob3N0X18gX19kZXZpY2VfXyBvcgorLy8gd2l0aCBubyBhdHRyaWJ1dGVzIGF0IGFsbC4gVG8gd29yayBhcm91bmQgdGhhdCwgZGVmaW5lIF9fQ1VEQV9SVENfXworLy8gd2hpY2ggcHJvZHVjZXMgSEQgdmFyaWFudCBhbmQgdW5kZWYgX19ob3N0X18gd2hpY2ggZ2l2ZXMgdXMgZGVzaWRlZAorLy8gZGVjbHMgd2l0aCBfX2RldmljZV9fIGF0dHJpYnV0ZS4KKyNwcmFnbWEgcHVzaF9tYWNybygiX19ob3N0X18iKQorI2RlZmluZSBfX2hvc3RfXworI2RlZmluZSBfX0NVREFDQ19SVENfXworI2luY2x1ZGUgImRldmljZV9mdW5jdGlvbnNfZGVjbHMuaCIKKyN1bmRlZiBfX0NVREFDQ19SVENfXworCisvLyBUZW1wb3JhcmlseSBwb2lzb24gX19ob3N0X18gbWFjcm8gdG8gZW5zdXJlIGl0J3Mgbm90IHVzZWQgYnkgYW55IG9mCisvLyB0aGUgaGVhZGVycyB3ZSdyZSBhYm91dCB0byBpbmNsdWRlLgorI2RlZmluZSBfX2hvc3RfXyBVTkVYUEVDVEVEX0hPU1RfQVRUUklCVVRFCisKKy8vIGRldmljZV9mdW5jdGlvbnMuaHBwIGFuZCBtYXRoX2Z1bmN0aW9ucyouaHBwIHVzZSAnc3RhdGljCisvLyBfX2ZvcmNlaW5saW5lX18nICh3aXRoIG5vIF9fZGV2aWNlX18pIGZvciBkZWZpbml0aW9ucyBvZiBkZXZpY2UKKy8vIGZ1bmN0aW9ucy4gVGVtcG9yYXJpbHkgcmVkZWZpbmUgX19mb3JjZWlubGluZV9fIHRvIGluY2x1ZGUKKy8vIF9fZGV2aWNlX18uCisjcHJhZ21hIHB1c2hfbWFjcm8oIl9fZm9yY2VpbmxpbmVfXyIpCisjZGVmaW5lIF9fZm9yY2VpbmxpbmVfXyBfX2RldmljZV9fIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjaW5jbHVkZSAiZGV2aWNlX2Z1bmN0aW9ucy5ocHAiCisKKy8vIG1hdGhfZnVuY3Rpb24uaHBwIHVzZXMgdGhlIF9fVVNFX0ZBU1RfTUFUSF9fIG1hY3JvIHRvIGRldGVybWluZSB3aGV0aGVyIHdlCisvLyBnZXQgdGhlIHNsb3ctYnV0LWFjY3VyYXRlIG9yIGZhc3QtYnV0LWluYWNjdXJhdGUgdmVyc2lvbnMgb2YgZnVuY3Rpb25zIGxpa2UKKy8vIHNpbiBhbmQgZXhwLiAgVGhpcyBpcyBjb250cm9sbGVkIGluIGNsYW5nIGJ5IC1mY3VkYS1hcHByb3gtdHJhbnNjZW5kZW50YWxzLgorLy8KKy8vIGRldmljZV9mdW5jdGlvbnMuaHBwIHVzZXMgX19VU0VfRkFTVF9NQVRIX18gZm9yIGEgZGlmZmVyZW50IHB1cnBvc2UgKGZhc3QgdnMuCisvLyBzbG93IGRpdmlkZXMpLCBzbyB3ZSBuZWVkIHRvIHNjb3BlIG91ciBkZWZpbmUgY2FyZWZ1bGx5IGhlcmUuCisjcHJhZ21hIHB1c2hfbWFjcm8oIl9fVVNFX0ZBU1RfTUFUSF9fIikKKyNpZiBkZWZpbmVkKF9fQ0xBTkdfQ1VEQV9BUFBST1hfVFJBTlNDRU5ERU5UQUxTX18pCisjZGVmaW5lIF9fVVNFX0ZBU1RfTUFUSF9fCisjZW5kaWYKKyNpbmNsdWRlICJtYXRoX2Z1bmN0aW9ucy5ocHAiCisjcHJhZ21hIHBvcF9tYWNybygiX19VU0VfRkFTVF9NQVRIX18iKQorCisjaW5jbHVkZSAibWF0aF9mdW5jdGlvbnNfZGJsX3B0eDMuaHBwIgorI3ByYWdtYSBwb3BfbWFjcm8oIl9fZm9yY2VpbmxpbmVfXyIpCisKKy8vIFB1bGwgaW4gaG9zdC1vbmx5IGZ1bmN0aW9ucyB0aGF0IGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIG5laXRoZXIKKy8vIF9fQ1VEQUNDX18gbm9yIF9fQ1VEQUJFX18gYXJlIGRlZmluZWQuCisjdW5kZWYgX19NQVRIX0ZVTkNUSU9OU19IUFBfXworI3VuZGVmIF9fQ1VEQUJFX18KKyNpbmNsdWRlICJtYXRoX2Z1bmN0aW9ucy5ocHAiCisvLyBBbGFzLCBhZGRpdGlvbmFsIG92ZXJsb2FkcyBmb3IgdGhlc2UgZnVuY3Rpb25zIGFyZSBoYXJkIHRvIGdldCB0by4KKy8vIENvbnNpZGVyaW5nIHRoYXQgd2Ugb25seSBuZWVkIHRoZXNlIG92ZXJsb2FkcyBmb3IgYSBmZXcgZnVuY3Rpb25zLAorLy8gd2UgY2FuIHByb3ZpZGUgdGhlbSBoZXJlLgorc3RhdGljIGlubGluZSBmbG9hdCByc3FydChmbG9hdCBfX2EpIHsgcmV0dXJuIHJzcXJ0ZihfX2EpOyB9CitzdGF0aWMgaW5saW5lIGZsb2F0IHJjYnJ0KGZsb2F0IF9fYSkgeyByZXR1cm4gcmNicnRmKF9fYSk7IH0KK3N0YXRpYyBpbmxpbmUgZmxvYXQgc2lucGkoZmxvYXQgX19hKSB7IHJldHVybiBzaW5waWYoX19hKTsgfQorc3RhdGljIGlubGluZSBmbG9hdCBjb3NwaShmbG9hdCBfX2EpIHsgcmV0dXJuIGNvc3BpZihfX2EpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2luY29zcGkoZmxvYXQgX19hLCBmbG9hdCAqX19iLCBmbG9hdCAqX19jKSB7CisgIHJldHVybiBzaW5jb3NwaWYoX19hLCBfX2IsIF9fYyk7Cit9CitzdGF0aWMgaW5saW5lIGZsb2F0IGVyZmNpbnYoZmxvYXQgX19hKSB7IHJldHVybiBlcmZjaW52ZihfX2EpOyB9CitzdGF0aWMgaW5saW5lIGZsb2F0IG5vcm1jZGZpbnYoZmxvYXQgX19hKSB7IHJldHVybiBub3JtY2RmaW52ZihfX2EpOyB9CitzdGF0aWMgaW5saW5lIGZsb2F0IG5vcm1jZGYoZmxvYXQgX19hKSB7IHJldHVybiBub3JtY2RmZihfX2EpOyB9CitzdGF0aWMgaW5saW5lIGZsb2F0IGVyZmN4KGZsb2F0IF9fYSkgeyByZXR1cm4gZXJmY3hmKF9fYSk7IH0KKworLy8gRm9yIHNvbWUgcmVhc29uIHNpbmdsZS1hcmd1bWVudCB2YXJpYW50IGlzIG5vdCBhbHdheXMgZGVjbGFyZWQgYnkKKy8vIENVREEgaGVhZGVycy4gQWxhcywgZGV2aWNlX2Z1bmN0aW9ucy5ocHAgaW5jbHVkZWQgYmVsb3cgbmVlZHMgaXQuCitzdGF0aWMgaW5saW5lIF9fZGV2aWNlX18gdm9pZCBfX2Jya3B0KGludCBfX2MpIHsgX19icmtwdCgpOyB9CisKKy8vIE5vdyBpbmNsdWRlICouaHBwIHdpdGggZGVmaW5pdGlvbnMgb2YgdmFyaW91cyBHUFUgZnVuY3Rpb25zLiAgQWxhcywKKy8vIGEgbG90IG9mIHRoaW5zIGdldCBkZWNsYXJlZC9kZWZpbmVkIHdpdGggX19ob3N0X18gYXR0cmlidXRlIHdoaWNoCisvLyB3ZSBkb24ndCB3YW50IGFuZCB3ZSBoYXZlIHRvIGRlZmluZSBpdCBvdXQuIFdlIGFsc28gaGF2ZSB0byBpbmNsdWRlCisvLyB7ZGV2aWNlLG1hdGh9X2Z1bmN0aW9ucy5ocHAgYWdhaW4gaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgb3RoZXIKKy8vIGJyYW5jaCBvZiAjaWYvZWxzZSBpbnNpZGUuCisKKyNkZWZpbmUgX19ob3N0X18KKyN1bmRlZiBfX0NVREFCRV9fCisjZGVmaW5lIF9fQ1VEQUNDX18KKyN1bmRlZiBfX0RFVklDRV9GVU5DVElPTlNfSFBQX18KKyNpbmNsdWRlICJkZXZpY2VfYXRvbWljX2Z1bmN0aW9ucy5ocHAiCisjaW5jbHVkZSAiZGV2aWNlX2Z1bmN0aW9ucy5ocHAiCisjaW5jbHVkZSAic21fMjBfYXRvbWljX2Z1bmN0aW9ucy5ocHAiCisjaW5jbHVkZSAic21fMjBfaW50cmluc2ljcy5ocHAiCisjaW5jbHVkZSAic21fMzJfYXRvbWljX2Z1bmN0aW9ucy5ocHAiCisKKy8vIERvbid0IGluY2x1ZGUgc21fMzBfaW50cmluc2ljcy5oIGFuZCBzbV8zMl9pbnRyaW5zaWNzLmguICBUaGVzZSBkZWZpbmUgdGhlCisvLyBfX3NoZmwgYW5kIF9fbGRnIGludHJpbnNpY3MgdXNpbmcgaW5saW5lICh2b2xhdGlsZSkgYXNtLCBidXQgd2Ugd2FudCB0bworLy8gZGVmaW5lIHRoZW0gdXNpbmcgYnVpbHRpbnMgc28gdGhhdCB0aGUgb3B0aW1pemVyIGNhbiByZWFzb24gYWJvdXQgYW5kIGFjcm9zcworLy8gdGhlc2UgaW5zdHJ1Y3Rpb25zLiAgSW4gcGFydGljdWxhciwgdXNpbmcgaW50cmluc2ljcyBmb3IgbGRnIGdldHMgdXMgdGhlCisvLyBbYWRkcitpbW1dIGFkZHJlc3NpbmcgbW9kZSwgd2hpY2gsIGFsdGhvdWdoIGl0IGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3QgaW4gdGhlCisvLyBoYXJkd2FyZSwgc2VlbXMgdG8gZ2VuZXJhdGUgZmFzdGVyIG1hY2hpbmUgY29kZSBiZWNhdXNlIHB0eGFzIGNhbiBtb3JlIGVhc2lseQorLy8gcmVhc29uIGFib3V0IG91ciBjb2RlLgorCisjdW5kZWYgX19NQVRIX0ZVTkNUSU9OU19IUFBfXworCisvLyBtYXRoX2Z1bmN0aW9ucy5ocHAgZGVmaW5lcyA6OnNpZ25iaXQgYXMgYSBfX2hvc3RfXyBfX2RldmljZV9fIGZ1bmN0aW9uLiAgVGhpcworLy8gY29uZmxpY3RzIHdpdGggbGlic3RkYysrJ3MgY29uc3RleHByIDo6c2lnbmJpdCwgc28gd2UgaGF2ZSB0byByZW5hbWUKKy8vIG1hdGhfZnVuY3Rpb24uaHBwJ3MgOjpzaWduYml0LiAgSXQncyBndWFyZGVkIGJ5ICN1bmRlZiBzaWduYml0LCBidXQgdGhhdCdzCisvLyBjb25kaXRpb25hbCBvbiBfX0dOVUNfXy4gIDopCisjcHJhZ21hIHB1c2hfbWFjcm8oInNpZ25iaXQiKQorI3ByYWdtYSBwdXNoX21hY3JvKCJfX0dOVUNfXyIpCisjdW5kZWYgX19HTlVDX18KKyNkZWZpbmUgc2lnbmJpdCBfX2lnbm9yZWRfY3VkYV9zaWduYml0CisjaW5jbHVkZSAibWF0aF9mdW5jdGlvbnMuaHBwIgorI3ByYWdtYSBwb3BfbWFjcm8oIl9fR05VQ19fIikKKyNwcmFnbWEgcG9wX21hY3JvKCJzaWduYml0IikKKworI3ByYWdtYSBwb3BfbWFjcm8oIl9faG9zdF9fIikKKworI2luY2x1ZGUgInRleHR1cmVfaW5kaXJlY3RfZnVuY3Rpb25zLmgiCisKKy8vIFJlc3RvcmUgc3RhdGUgb2YgX19DVURBX0FSQ0hfXyBhbmQgX19USFJPVyB3ZSBoYWQgb24gZW50cnkuCisjcHJhZ21hIHBvcF9tYWNybygiX19DVURBX0FSQ0hfXyIpCisjcHJhZ21hIHBvcF9tYWNybygiX19USFJPVyIpCisKKy8vIFNldCB1cCBjb21waWxlciBtYWNyb3MgZXhwZWN0ZWQgdG8gYmUgc2VlbiBkdXJpbmcgY29tcGlsYXRpb24uCisjdW5kZWYgX19DVURBQkVfXworI2RlZmluZSBfX0NVREFDQ19fCisKK2V4dGVybiAiQyIgeworLy8gRGV2aWNlLXNpZGUgQ1VEQSBzeXN0ZW0gY2FsbHMuCisvLyBodHRwOi8vZG9jcy5udmlkaWEuY29tL2N1ZGEvcHR4LXdyaXRlcnMtZ3VpZGUtdG8taW50ZXJvcGVyYWJpbGl0eS9pbmRleC5odG1sI3N5c3RlbS1jYWxscworLy8gV2UgbmVlZCB0aGVzZSBkZWNsYXJhdGlvbnMgYW5kIHdyYXBwZXJzIGZvciBkZXZpY2Utc2lkZQorLy8gbWFsbG9jL2ZyZWUvcHJpbnRmIGNhbGxzIHRvIHdvcmsgd2l0aG91dCByZWx5aW5nIG9uCisvLyAtZmN1ZGEtZGlzYWJsZS10YXJnZXQtY2FsbC1jaGVja3Mgb3B0aW9uLgorX19kZXZpY2VfXyBpbnQgdnByaW50Zihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitfX2RldmljZV9fIHZvaWQgZnJlZSh2b2lkICopIF9fYXR0cmlidXRlKChub3Rocm93KSk7CitfX2RldmljZV9fIHZvaWQgKm1hbGxvYyhzaXplX3QpIF9fYXR0cmlidXRlKChub3Rocm93KSkgX19hdHRyaWJ1dGVfXygobWFsbG9jKSk7CitfX2RldmljZV9fIHZvaWQgX19hc3NlcnRmYWlsKGNvbnN0IGNoYXIgKl9fbWVzc2FnZSwgY29uc3QgY2hhciAqX19maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX2xpbmUsIGNvbnN0IGNoYXIgKl9fZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2NoYXJTaXplKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworCisvLyBJbiBvcmRlciBmb3Igc3RhbmRhcmQgYXNzZXJ0KCkgbWFjcm8gb24gbGludXggdG8gd29yayB3ZSBuZWVkIHRvCisvLyBwcm92aWRlIGRldmljZS1zaWRlIF9fYXNzZXJ0X2ZhaWwoKQorX19kZXZpY2VfXyBzdGF0aWMgaW5saW5lIHZvaWQgX19hc3NlcnRfZmFpbChjb25zdCBjaGFyICpfX21lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fZmlsZSwgdW5zaWduZWQgX19saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX2Z1bmN0aW9uKSB7CisgIF9fYXNzZXJ0ZmFpbChfX21lc3NhZ2UsIF9fZmlsZSwgX19saW5lLCBfX2Z1bmN0aW9uLCBzaXplb2YoY2hhcikpOworfQorCisvLyBDbGFuZyB3aWxsIGNvbnZlcnQgcHJpbnRmIGludG8gdnByaW50ZiwgYnV0IHdlIHN0aWxsIG5lZWQKKy8vIGRldmljZS1zaWRlIGRlY2xhcmF0aW9uIGZvciBpdC4KK19fZGV2aWNlX18gaW50IHByaW50Zihjb25zdCBjaGFyICosIC4uLik7Cit9IC8vIGV4dGVybiAiQyIKKworLy8gV2UgYWxzbyBuZWVkIGRldmljZS1zaWRlIHN0ZDo6bWFsbG9jIGFuZCBzdGQ6OmZyZWUuCituYW1lc3BhY2Ugc3RkIHsKK19fZGV2aWNlX18gc3RhdGljIGlubGluZSB2b2lkIGZyZWUodm9pZCAqX19wdHIpIHsgOjpmcmVlKF9fcHRyKTsgfQorX19kZXZpY2VfXyBzdGF0aWMgaW5saW5lIHZvaWQgKm1hbGxvYyhzaXplX3QgX19zaXplKSB7CisgIHJldHVybiA6Om1hbGxvYyhfX3NpemUpOworfQorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKy8vIE91dC1vZi1saW5lIGltcGxlbWVudGF0aW9ucyBmcm9tIGN1ZGFfYnVpbHRpbl92YXJzLmguICBUaGVzZSBuZWVkIHRvIGNvbWUKKy8vIGFmdGVyIHdlJ3ZlIHB1bGxlZCBpbiB0aGUgZGVmaW5pdGlvbiBvZiB1aW50MyBhbmQgZGltMy4KKworX19kZXZpY2VfXyBpbmxpbmUgX19jdWRhX2J1aWx0aW5fdGhyZWFkSWR4X3Q6Om9wZXJhdG9yIHVpbnQzKCkgY29uc3QgeworICB1aW50MyByZXQ7CisgIHJldC54ID0geDsKKyAgcmV0LnkgPSB5OworICByZXQueiA9IHo7CisgIHJldHVybiByZXQ7Cit9CisKK19fZGV2aWNlX18gaW5saW5lIF9fY3VkYV9idWlsdGluX2Jsb2NrSWR4X3Q6Om9wZXJhdG9yIHVpbnQzKCkgY29uc3QgeworICB1aW50MyByZXQ7CisgIHJldC54ID0geDsKKyAgcmV0LnkgPSB5OworICByZXQueiA9IHo7CisgIHJldHVybiByZXQ7Cit9CisKK19fZGV2aWNlX18gaW5saW5lIF9fY3VkYV9idWlsdGluX2Jsb2NrRGltX3Q6Om9wZXJhdG9yIGRpbTMoKSBjb25zdCB7CisgIHJldHVybiBkaW0zKHgsIHksIHopOworfQorCitfX2RldmljZV9fIGlubGluZSBfX2N1ZGFfYnVpbHRpbl9ncmlkRGltX3Q6Om9wZXJhdG9yIGRpbTMoKSBjb25zdCB7CisgIHJldHVybiBkaW0zKHgsIHksIHopOworfQorCisjaW5jbHVkZSA8X19jbGFuZ19jdWRhX2NtYXRoLmg+CisjaW5jbHVkZSA8X19jbGFuZ19jdWRhX2ludHJpbnNpY3MuaD4KKworLy8gY3VyYW5kX210Z3AzMl9rZXJuZWwgaGVscGZ1bGx5IHJlZGVjbGFyZXMgYmxvY2tEaW0gYW5kIHRocmVhZElkeCBpbiBob3N0CisvLyBtb2RlLCBnaXZpbmcgdGhlbSB0aGVpciAicHJvcGVyIiB0eXBlcyBvZiBkaW0zIGFuZCB1aW50My4gIFRoaXMgaXMKKy8vIGluY29tcGF0aWJsZSB3aXRoIHRoZSB0eXBlcyB3ZSBnaXZlIGluIGN1ZGFfYnVpbHRpbl92YXJzLmguICBBcyBhcyBoYWNrLAorLy8gZm9yY2UtaW5jbHVkZSB0aGUgaGVhZGVyIChudmNjIGRvZXNuJ3QgaW5jbHVkZSBpdCBieSBkZWZhdWx0KSBidXQgcmVkZWZpbmUKKy8vIGRpbTMgYW5kIHVpbnQzIHRvIG91ciBidWlsdGluIHR5cGVzLiAgKFRoYW5rZnVsbHkgZGltMyBhbmQgdWludDMgYXJlIG9ubHkKKy8vIHVzZWQgaGVyZSBmb3IgdGhlIHJlZGVjbGFyYXRpb25zIG9mIGJsb2NrRGltIGFuZCB0aHJlYWRJZHguKQorI3ByYWdtYSBwdXNoX21hY3JvKCJkaW0zIikKKyNwcmFnbWEgcHVzaF9tYWNybygidWludDMiKQorI2RlZmluZSBkaW0zIF9fY3VkYV9idWlsdGluX2Jsb2NrRGltX3QKKyNkZWZpbmUgdWludDMgX19jdWRhX2J1aWx0aW5fdGhyZWFkSWR4X3QKKyNpbmNsdWRlICJjdXJhbmRfbXRncDMyX2tlcm5lbC5oIgorI3ByYWdtYSBwb3BfbWFjcm8oImRpbTMiKQorI3ByYWdtYSBwb3BfbWFjcm8oInVpbnQzIikKKyNwcmFnbWEgcG9wX21hY3JvKCJfX1VTRV9GQVNUX01BVEhfXyIpCisKKyNlbmRpZiAvLyBfX0NVREFfXworI2VuZGlmIC8vIF9fQ0xBTkdfQ1VEQV9SVU5USU1FX1dSQVBQRVJfSF9fCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL19fc3RkZGVmX21heF9hbGlnbl90LmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL19fc3RkZGVmX21heF9hbGlnbl90LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxMGNhOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19zdGRkZWZfbWF4X2FsaWduX3QuaApAQCAtMCwwICsxLDQzIEBACisvKj09PS0tLS0gX19zdGRkZWZfbWF4X2FsaWduX3QuaCAtIERlZmluaXRpb24gb2YgbWF4X2FsaWduX3QgZm9yIG1vZHVsZXMgLS0tPT09CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IENoYW5kbGVyIENhcnJ1dGgKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19DTEFOR19NQVhfQUxJR05fVF9ERUZJTkVECisjZGVmaW5lIF9fQ0xBTkdfTUFYX0FMSUdOX1RfREVGSU5FRAorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKK3R5cGVkZWYgZG91YmxlIG1heF9hbGlnbl90OworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCit0eXBlZGVmIGxvbmcgZG91YmxlIG1heF9hbGlnbl90OworI2Vsc2UKKy8vIERlZmluZSAnbWF4X2FsaWduX3QnIHRvIG1hdGNoIHRoZSBHQ0MgZGVmaW5pdGlvbi4KK3R5cGVkZWYgc3RydWN0IHsKKyAgbG9uZyBsb25nIF9fY2xhbmdfbWF4X2FsaWduX25vbmNlMQorICAgICAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oX19hbGlnbm9mX18obG9uZyBsb25nKSkpKTsKKyAgbG9uZyBkb3VibGUgX19jbGFuZ19tYXhfYWxpZ25fbm9uY2UyCisgICAgICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhfX2FsaWdub2ZfXyhsb25nIGRvdWJsZSkpKSk7Cit9IG1heF9hbGlnbl90OworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX3dtbWludHJpbl9hZXMuaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX193bW1pbnRyaW5fYWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExNTE4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX193bW1pbnRyaW5fYWVzLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qPT09LS0tLSBfX3dtbWludHJpbl9hZXMuaCAtIEFFUyBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisjaWZuZGVmIF9XTU1JTlRSSU5fQUVTX0gKKyNkZWZpbmUgX1dNTUlOVFJJTl9BRVNfSAorCisjaW5jbHVkZSA8ZW1taW50cmluLmg+CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYWVzIikpKQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgc2luZ2xlIHJvdW5kIG9mIEFFUyBlbmNyeXB0aW9uIHVzaW5nIHRoZSBFcXVpdmFsZW50CisvLy8gICAgSW52ZXJzZSBDaXBoZXIsIHRyYW5zZm9ybWluZyB0aGUgc3RhdGUgdmFsdWUgZnJvbSB0aGUgZmlyc3Qgc291cmNlCisvLy8gICAgb3BlcmFuZCB1c2luZyBhIDEyOC1iaXQgcm91bmQga2V5IHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgc2Vjb25kIHNvdXJjZQorLy8vICAgIG9wZXJhbmQsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFFU0VOQyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1YKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc3RhdGUgdmFsdWUuCisvLy8gXHBhcmFtIF9fUgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByb3VuZCBrZXkgdmFsdWUuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGVuY3J5cHRlZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWVzZW5jX3NpMTI4KF9fbTEyOGkgX19WLCBfX20xMjhpIF9fUikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2Flc2VuYzEyOCgoX192MmRpKV9fViwgKF9fdjJkaSlfX1IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIHRoZSBmaW5hbCByb3VuZCBvZiBBRVMgZW5jcnlwdGlvbiB1c2luZyB0aGUgRXF1aXZhbGVudAorLy8vICAgIEludmVyc2UgQ2lwaGVyLCB0cmFuc2Zvcm1pbmcgdGhlIHN0YXRlIHZhbHVlIGZyb20gdGhlIGZpcnN0IHNvdXJjZQorLy8vICAgIG9wZXJhbmQgdXNpbmcgYSAxMjgtYml0IHJvdW5kIGtleSB2YWx1ZSBjb250YWluZWQgaW4gdGhlIHNlY29uZCBzb3VyY2UKKy8vLyAgICBvcGVyYW5kLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBRVNFTkNMQVNUIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fVgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdGF0ZSB2YWx1ZS4KKy8vLyBccGFyYW0gX19SCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJvdW5kIGtleSB2YWx1ZS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZW5jcnlwdGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZXNlbmNsYXN0X3NpMTI4KF9fbTEyOGkgX19WLCBfX20xMjhpIF9fUikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2Flc2VuY2xhc3QxMjgoKF9fdjJkaSlfX1YsIChfX3YyZGkpX19SKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIHNpbmdsZSByb3VuZCBvZiBBRVMgZGVjcnlwdGlvbiB1c2luZyB0aGUgRXF1aXZhbGVudAorLy8vICAgIEludmVyc2UgQ2lwaGVyLCB0cmFuc2Zvcm1pbmcgdGhlIHN0YXRlIHZhbHVlIGZyb20gdGhlIGZpcnN0IHNvdXJjZQorLy8vICAgIG9wZXJhbmQgdXNpbmcgYSAxMjgtYml0IHJvdW5kIGtleSB2YWx1ZSBjb250YWluZWQgaW4gdGhlIHNlY29uZCBzb3VyY2UKKy8vLyAgICBvcGVyYW5kLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBRVNERUMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19WCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHN0YXRlIHZhbHVlLgorLy8vIFxwYXJhbSBfX1IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcm91bmQga2V5IHZhbHVlLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBkZWNyeXB0ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Flc2RlY19zaTEyOChfX20xMjhpIF9fViwgX19tMTI4aSBfX1IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9hZXNkZWMxMjgoKF9fdjJkaSlfX1YsIChfX3YyZGkpX19SKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyB0aGUgZmluYWwgcm91bmQgb2YgQUVTIGRlY3J5cHRpb24gdXNpbmcgdGhlIEVxdWl2YWxlbnQKKy8vLyAgICBJbnZlcnNlIENpcGhlciwgdHJhbnNmb3JtaW5nIHRoZSBzdGF0ZSB2YWx1ZSBmcm9tIHRoZSBmaXJzdCBzb3VyY2UKKy8vLyAgICBvcGVyYW5kIHVzaW5nIGEgMTI4LWJpdCByb3VuZCBrZXkgdmFsdWUgY29udGFpbmVkIGluIHRoZSBzZWNvbmQgc291cmNlCisvLy8gICAgb3BlcmFuZCwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQUVTREVDTEFTVCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1YKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc3RhdGUgdmFsdWUuCisvLy8gXHBhcmFtIF9fUgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByb3VuZCBrZXkgdmFsdWUuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGRlY3J5cHRlZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWVzZGVjbGFzdF9zaTEyOChfX20xMjhpIF9fViwgX19tMTI4aSBfX1IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9hZXNkZWNsYXN0MTI4KChfX3YyZGkpX19WLCAoX192MmRpKV9fUik7Cit9CisKKy8vLyBcYnJpZWYgQXBwbGllcyB0aGUgQUVTIEludk1peENvbHVtbnMoKSB0cmFuc2Zvcm1hdGlvbiB0byBhbiBleHBhbmRlZCBrZXkKKy8vLyAgICBjb250YWluZWQgaW4gdGhlIHNvdXJjZSBvcGVyYW5kLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFFU0lNQyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1YKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZXhwYW5kZWQga2V5LgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWVzaW1jX3NpMTI4KF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWVzaW1jMTI4KChfX3YyZGkpX19WKTsKK30KKworLy8vIFxicmllZiBHZW5lcmF0ZXMgYSByb3VuZCBrZXkgZm9yIEFFUyBlbmN5cHRpb24sIG9wZXJhdGluZyBvbiAxMjgtYml0IGRhdGEKKy8vLyAgICBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kIGFuZCB1c2luZyBhbiA4LWJpdCByb3VuZCBjb25zdGFudAorLy8vICAgIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIHNvdXJjZSBvcGVyYW5kLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOGkgX21tX2Flc2tleWdlbmFzc2lzdF9zaTEyOChfX20xMjhpIEMsIGNvbnN0IGludCBSKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEFFU0tFWUdFTkFTU0lTVCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBDCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIHRoYXQgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgQUVTIGVuY3J5cHRpb24ga2V5LgorLy8vIFxwYXJhbSBSCisvLy8gICAgQW4gOC1iaXQgcm91bmQgY29uc3RhbnQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgQUVTIGVuY3J5cHRpb24ga2V5LgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCByb3VuZCBrZXkgZm9yIEFFUyBlbmNyeXB0aW9uLgorI2RlZmluZSBfbW1fYWVza2V5Z2VuYXNzaXN0X3NpMTI4KEMsIFIpIFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWVza2V5Z2VuYXNzaXN0MTI4KChfX3YyZGkpKF9fbTEyOGkpKEMpLCAoaW50KShSKSkKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgIC8qIF9XTU1JTlRSSU5fQUVTX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX193bW1pbnRyaW5fcGNsbXVsLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL19fd21taW50cmluX3BjbG11bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZTA3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL19fd21taW50cmluX3BjbG11bC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qPT09LS0tLSBfX3dtbWludHJpbl9wY2xtdWwuaCAtIFBDTVVMIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfV01NSU5UUklOX1BDTE1VTF9ICisjZGVmaW5lIF9XTU1JTlRSSU5fUENMTVVMX0gKKworLy8vIFxicmllZiBNdWx0aXBsaWVzIHR3byA2NC1iaXQgaW50ZWdlciB2YWx1ZXMsIHdoaWNoIGFyZSBzZWxlY3RlZCBmcm9tIHNvdXJjZQorLy8vICAgIG9wZXJhbmRzIHVzaW5nIHRoZSBpbW1lZGlhdGUtdmFsdWUgb3BlcmFuZC4gVGhlIG11bHRpcGxpY2F0aW9uIGlzIGEKKy8vLyAgICBjYXJyeS1sZXNzIG11bHRpcGxpY2F0aW9uLCBhbmQgdGhlIDEyOC1iaXQgaW50ZWdlciBwcm9kdWN0IGlzIHN0b3JlZCBpbgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4aSBfbW1fY2xtdWxlcGk2NF9zaTEyOChfX20xMjhpIF9fWCwgX19tMTI4aSBfX1ksIGNvbnN0IGludCBfX0kpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBDTE1VTFFEUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggaTY0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX1kKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggaTY0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX0kKKy8vLyAgICBBbiBpbW1lZGlhdGUgdmFsdWUgc3BlY2lmeWluZyB3aGljaCA2NC1iaXQgdmFsdWVzIHRvIHNlbGVjdCBmcm9tIHRoZQorLy8vICAgIG9wZXJhbmRzLgorLy8vICAgIEJpdCAwIGlzIHVzZWQgdG8gc2VsZWN0IGEgdmFsdWUgZnJvbSBvcGVyYW5kIF9fWCwKKy8vLyAgICBhbmQgYml0IDQgaXMgdXNlZCB0byBzZWxlY3QgYSB2YWx1ZSBmcm9tIG9wZXJhbmQgX19ZOgorLy8vICAgIEJpdFswXT0wIGluZGljYXRlcyB0aGF0IGJpdHNbNjM6MF0gb2Ygb3BlcmFuZCBfX1ggYXJlIHVzZWQuCisvLy8gICAgQml0WzBdPTEgaW5kaWNhdGVzIHRoYXQgYml0c1sxMjc6NjRdIG9mIG9wZXJhbmQgX19YIGFyZSB1c2VkLgorLy8vICAgIEJpdFs0XT0wIGluZGljYXRlcyB0aGF0IGJpdHNbNjM6MF0gb2Ygb3BlcmFuZCBfX1kgYXJlIHVzZWQuCisvLy8gICAgQml0WzRdPTEgaW5kaWNhdGVzIHRoYXQgYml0c1sxMjc6NjRdIG9mIG9wZXJhbmQgX19ZIGFyZSB1c2VkLgorLy8vIFxyZXR1cm5zIFRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2FycnktbGVzcworLy8vICAgIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBzZWxlY3RlZCA2NC1iaXQgdmFsdWVzLgorI2RlZmluZSBfbW1fY2xtdWxlcGk2NF9zaTEyOChfX1gsIF9fWSwgX19JKSBcCisgICgoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wY2xtdWxxZHExMjgoKF9fdjJkaSkoX19tMTI4aSkoX19YKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKF9fWSksIChjaGFyKShfX0kpKSkKKworI2VuZGlmIC8qIF9XTU1JTlRSSU5fUENMTVVMX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYWR4aW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FkeGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMzQ3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FkeGludHJpbi5oCkBAIC0wLDAgKzEsODYgQEAKKy8qPT09LS0tLSBhZHhpbnRyaW4uaCAtIEFEWCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGFkeGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BRFhJTlRSSU5fSAorI2RlZmluZSBfX0FEWElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisKKy8qIEludHJpbnNpY3MgdGhhdCBhcmUgYXZhaWxhYmxlIG9ubHkgaWYgX19BRFhfXyBkZWZpbmVkICovCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImFkeCIpKSkKK19hZGRjYXJyeXhfdTMyKHVuc2lnbmVkIGNoYXIgX19jZiwgdW5zaWduZWQgaW50IF9feCwgdW5zaWduZWQgaW50IF9feSwKKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19wKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfYWRkY2Fycnl4X3UzMihfX2NmLCBfX3gsIF9feSwgX19wKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYWR4IikpKQorX2FkZGNhcnJ5eF91NjQodW5zaWduZWQgY2hhciBfX2NmLCB1bnNpZ25lZCBsb25nIGxvbmcgX194LAorICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9feSwgdW5zaWduZWQgbG9uZyBsb25nICAqX19wKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfYWRkY2Fycnl4X3U2NChfX2NmLCBfX3gsIF9feSwgX19wKTsKK30KKyNlbmRpZgorCisvKiBJbnRyaW5zaWNzIHRoYXQgYXJlIGFsc28gYXZhaWxhYmxlIGlmIF9fQURYX18gdW5kZWZpbmVkICovCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19hZGRjYXJyeV91MzIodW5zaWduZWQgY2hhciBfX2NmLCB1bnNpZ25lZCBpbnQgX194LCB1bnNpZ25lZCBpbnQgX195LAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2FkZGNhcnJ5X3UzMihfX2NmLCBfX3gsIF9feSwgX19wKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2FkZGNhcnJ5X3U2NCh1bnNpZ25lZCBjaGFyIF9fY2YsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3gsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ksIHVuc2lnbmVkIGxvbmcgbG9uZyAgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2FkZGNhcnJ5X3U2NChfX2NmLCBfX3gsIF9feSwgX19wKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19zdWJib3Jyb3dfdTMyKHVuc2lnbmVkIGNoYXIgX19jZiwgdW5zaWduZWQgaW50IF9feCwgdW5zaWduZWQgaW50IF9feSwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX3ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9zdWJib3Jyb3dfdTMyKF9fY2YsIF9feCwgX195LCBfX3ApOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfc3ViYm9ycm93X3U2NCh1bnNpZ25lZCBjaGFyIF9fY2YsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3gsCisgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX195LCB1bnNpZ25lZCBsb25nIGxvbmcgICpfX3ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9zdWJib3Jyb3dfdTY0KF9fY2YsIF9feCwgX195LCBfX3ApOworfQorI2VuZGlmCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fQURYSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYWx0aXZlYy5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hbHRpdmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhMTkxNAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYWx0aXZlYy5oCkBAIC0wLDAgKzEsMTQ0NTggQEAKKy8qPT09LS0tLSBhbHRpdmVjLmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIHR5cGUgZ2VuZXJpYyBtYXRoIC0tLS0tLS0tLS0tLS0tLT09PSpcCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKK1wqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSovCisKKyNpZm5kZWYgX19BTFRJVkVDX0gKKyNkZWZpbmUgX19BTFRJVkVDX0gKKworI2lmbmRlZiBfX0FMVElWRUNfXworI2Vycm9yICJBbHRpVmVjIHN1cHBvcnQgbm90IGVuYWJsZWQiCisjZW5kaWYKKworLyogQ29uc3RhbnRzIGZvciBtYXBwaW5nIENSNiBiaXRzIHRvIHByZWRpY2F0ZSByZXN1bHQuICovCisKKyNkZWZpbmUgX19DUjZfRVEgMAorI2RlZmluZSBfX0NSNl9FUV9SRVYgMQorI2RlZmluZSBfX0NSNl9MVCAyCisjZGVmaW5lIF9fQ1I2X0xUX1JFViAzCisKKyNkZWZpbmUgX19BVFRSU19vX2FpIF9fYXR0cmlidXRlX18oKF9fb3ZlcmxvYWRhYmxlX18sIF9fYWx3YXlzX2lubGluZV9fKSkKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGVybSgKKyAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Blcm0oCisgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Blcm0oCisgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYik7CisKKy8qIHZlY19hYnMgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY19hYnNfdjE2cWkgdmVjX2FicworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY19hYnNfdjhoaSB2ZWNfYWJzCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX2Fic192NHNpIHZlY19hYnMKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2Ficyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoX19hLCAtX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hYnModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaChfX2EsIC1fX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hYnModmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c3coX19hLCAtX19hKTsKK30KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2Ficyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzZChfX2EsIC1fX2EpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2Ficyh2ZWN0b3IgZmxvYXQgX19hKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmFic3NwKF9fYSk7CisjZWxzZQorICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KSgweDdGRkZGRkZGKTsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19hYnModmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZhYnNkcChfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY19hYnNzICovCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX2Fic3NfdjE2cWkgdmVjX2Fic3MKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfYWJzc192OGhpIHZlY19hYnNzCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX2Fic3NfdjRzaSB2ZWNfYWJzcworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYWJzcyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoCisgICAgICBfX2EsIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoKHZlY3RvciBzaWduZWQgY2hhcikoMCksIF9fYSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2Fic3ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaCgKKyAgICAgIF9fYSwgX19idWlsdGluX2FsdGl2ZWNfdnN1YnNocygodmVjdG9yIHNpZ25lZCBzaG9ydCkoMCksIF9fYSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hYnNzKHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KAorICAgICAgX19hLCBfX2J1aWx0aW5fYWx0aXZlY192c3Vic3dzKCh2ZWN0b3Igc2lnbmVkIGludCkoMCksIF9fYSkpOworfQorCisvKiB2ZWNfYWRkICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hZGQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICsgKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hZGQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hZGQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hZGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKKyNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hZGQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hZGQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKyNlbmRpZiAvLyBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisjZW5kaWYgLy8gX19WU1hfXworCisvKiB2ZWNfYWRkZSAqLworCisjaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19hZGRlKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZXVxbShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX2FkZGUodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRldXFtKF9fYSwgX19iLCBfX2MpOworfQorI2VuZGlmCisKKy8qIHZlY19hZGRlYyAqLworCisjaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19hZGRlYyh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRlY3VxKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfYWRkZWModmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZWN1cShfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdmFkZHVibSAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1Ym0gdmVjX3ZhZGR1Ym0KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhZGR1Ym0odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFkZHVibSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YWRkdWJtKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFkZHVibSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YWRkdWJtKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhZGR1Ym0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICsgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworLyogdmVjX3ZhZGR1aG0gKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhtIHZlY192YWRkdWhtCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1aG0odmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YWRkdWhtKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1aG0odmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhZGR1aG0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFkZHVobSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFkZHVobSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOworfQorCisvKiB2ZWNfdmFkZHV3bSAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1d20gdmVjX3ZhZGR1d20KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1d20odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFkZHV3bSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1d20odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdmFkZHV3bSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192YWRkdXdtKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdmFkZHV3bSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICsgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCisvKiB2ZWNfdmFkZGZwICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdmFkZGZwIHZlY192YWRkZnAKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192YWRkZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCisvKiB2ZWNfYWRkYyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hZGRjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1dygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2FkZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkY3V3KF9fYSwgX19iKTsKK30KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfYWRkYyh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIF9faW50MTI4KV9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRjdXEoCisgICAgICAodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4KV9fYSwgKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfYWRkYyh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkY3VxKF9fYSwgX19iKTsKK30KKyNlbmRpZiAvLyBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisKKy8qIHZlY192YWRkY3V3ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZhZGRjdXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkY3V3KF9fYSwgX19iKTsKK30KKworLyogdmVjX2FkZHMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FkZHModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNicyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hZGRzKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2JzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYWRkcyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYWRkcyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVicyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FkZHModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hZGRzKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1YnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzaHMoKHZlY3RvciBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfYWRkcyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2FkZHModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfYWRkcyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1aHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzd3MoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzd3MoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzd3MoX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2FkZHModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hZGRzKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hZGRzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworLyogdmVjX3ZhZGRzYnMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhZGRzYnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNicyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YWRkc2JzKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2JzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFkZHNicyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyogdmVjX3ZhZGR1YnMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFkZHVicyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVicyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhZGR1YnModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YWRkdWJzKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1YnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyogdmVjX3ZhZGRzaHMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFkZHNocyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFkZHNocyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzaHMoKHZlY3RvciBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzaHModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCisvKiB2ZWNfdmFkZHVocyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFkZHVocyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhZGR1aHModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFkZHVocyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1aHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKKy8qIHZlY192YWRkc3dzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkc3dzKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzd3MoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFkZHN3cyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzd3MoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFkZHN3cyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzd3MoX19hLCAodmVjdG9yIGludClfX2IpOworfQorCisvKiB2ZWNfdmFkZHV3cyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZhZGR1d3ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192YWRkdXdzKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192YWRkdXdzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKKy8qIHZlY192YWRkdXFtICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdmFkZHVxbSh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZhZGR1cW0odmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCisvKiB2ZWNfdmFkZGV1cW0gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192YWRkZXVxbSh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRldXFtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdmFkZGV1cW0odmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZXVxbShfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3ZhZGRjdXEgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192YWRkY3VxKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1cShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192YWRkY3VxKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRjdXEoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmFkZGVjdXEgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192YWRkZWN1cSh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRlY3VxKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdmFkZGVjdXEodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZWN1cShfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZiAvLyBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisKKy8qIHZlY19hbmQgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192YW5kIHZlY19hbmQKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3Igc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKyNlbmRpZgorCisvKiB2ZWNfdmFuZCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKyNlbmRpZgorCisvKiB2ZWNfYW5kYyAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZhbmRjIHZlY19hbmRjCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2FuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgfih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgfih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZGModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisjZW5kaWYKKworLyogdmVjX3ZhbmRjICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorI2VuZGlmCisKKy8qIHZlY19hdmcgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2F2Zyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YXZnc2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hdmcodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zhdmd1YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2F2Zyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhdmdzaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hdmcodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3VoKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2F2Zyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhdmdzdyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3V3KF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZhdmdzYiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZhdmdzYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YXZnc2IoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmF2Z3ViICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192YXZndWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zhdmd1YihfX2EsIF9fYik7Cit9CisKKy8qIHZlY192YXZnc2ggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192YXZnc2godmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3NoKF9fYSwgX19iKTsKK30KKworLyogdmVjX3Zhdmd1aCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Zhdmd1aCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YXZndWgoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmF2Z3N3ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Zhdmdzdyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhdmdzdyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY192YXZndXcgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmF2Z3V3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3V3KF9fYSwgX19iKTsKK30KKworLyogdmVjX2NlaWwgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfY2VpbCh2ZWN0b3IgZmxvYXQgX19hKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcGlwKF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJmaXAoX19hKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2NlaWwodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpcChfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY192cmZpcCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZyZmlwKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZmlwKF9fYSk7Cit9CisKKy8qIHZlY19jbXBiICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2NtcGIodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGJmcChfX2EsIF9fYik7Cit9CisKKy8qIHZlY192Y21wYmZwICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZjbXBiZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGJmcChfX2EsIF9fYik7Cit9CisKKy8qIHZlY19jbXBlcSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NtcGVxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViKCh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbXBlcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWIoKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2NtcGVxKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aCgodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2NtcGVxKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3KCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZXEodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWQoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZXEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkKAorICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19hLCAodmVjdG9yIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2NtcGVxKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fdnN4X3h2Y21wZXFzcChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZXFmcChfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBlcSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3ZzeF94dmNtcGVxZHAoX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19jbXBndCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NtcGd0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2NtcGd0KHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcGd0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2NtcGd0KHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3coX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3KF9fYSwgX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2QoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBndCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3ZzeF94dmNtcGd0c3AoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnAoX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ3QodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfeHZjbXBndGRwKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfY21wZ2UgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbXBnZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KHZlY19jbXBndChfX2IsIF9fYSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KHZlY19jbXBndChfX2IsIF9fYSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19jbXBnZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19jbXBnZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfih2ZWNfY21wZ3QoX19iLCBfX2EpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfih2ZWNfY21wZ3QoX19iLCBfX2EpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfY21wZ2UodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl92c3hfeHZjbXBnZXNwKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2NtcGdlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fdnN4X3h2Y21wZ2VkcChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBnZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZjbXBnZWZwICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGdlZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcChfX2EsIF9fYik7Cit9CisKKy8qIHZlY192Y21wZ3RzYiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y21wZ3RzYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYihfX2EsIF9fYik7Cit9CisKKy8qIHZlY192Y21wZ3R1YiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y21wZ3R1Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWIoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmNtcGd0c2ggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZjbXBndHNoKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaChfX2EsIF9fYik7Cit9CisKKy8qIHZlY192Y21wZ3R1aCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0dWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjbXBndHN3ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0c3codmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3KF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjbXBndHV3ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0dXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3KF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjbXBndGZwICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0ZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcChfX2EsIF9fYik7Cit9CisKKy8qIHZlY19jbXBsZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NtcGxlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcGxlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2NtcGxlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ2UoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ2UoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBsZSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBsZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBsZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX2NtcGx0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfY21wbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19jbXBsdCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBsdCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBsdCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBsdCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Cit9CisKKy8qIHZlY19jbnRseiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfY250bHoodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsemIoX19hKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NudGx6KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsemIoX19hKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfY250bHoodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHpoKF9fYSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsemgoX19hKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2NudGx6KHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsencoX19hKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHp3KF9fYSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbnRseih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHpkKF9fYSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2NudGx6KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2x6ZChfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY19jcHNnbiAqLworCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfY3BzZ24odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjcHNnbnNwKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2Nwc2duKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y3BzZ25kcChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2N0ZiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19jdGYodmVjdG9yIGludCBfX2EsIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjZnN4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfY3RmKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjZnV4KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfY3RmKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCBpbnQgX19iKSB7CisgIHZlY3RvciBkb3VibGUgX19yZXQgPSBfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2EsIHZlY3RvciBkb3VibGUpOworICBfX3JldCAqPSAodmVjdG9yIGRvdWJsZSkodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoKDB4M2ZmVUxMIC0gX19iKSA8PCA1Mik7CisgIHJldHVybiBfX3JldDsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19jdGYodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCBpbnQgX19iKSB7CisgIHZlY3RvciBkb3VibGUgX19yZXQgPSBfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2EsIHZlY3RvciBkb3VibGUpOworICBfX3JldCAqPSAodmVjdG9yIGRvdWJsZSkodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoKDB4M2ZmVUxMIC0gX19iKSA8PCA1Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisvKiB2ZWNfdmNmc3ggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y2ZzeCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNmc3goX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmNmdXggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y2Z1eCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNmdXgoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCisvKiB2ZWNfY3RzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19jdHModmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmN0c3hzKF9fYSwgX19iKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2N0cyh2ZWN0b3IgZG91YmxlIF9fYSwgaW50IF9fYikgeworICBfX2EgKj0gKHZlY3RvciBkb3VibGUpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCgweDNmZlVMTCArIF9fYikgPDwgNTIpOworICByZXR1cm4gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZjdHN4cyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y3RzeHModmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmN0c3hzKF9fYSwgX19iKTsKK30KKworLyogdmVjX2N0dSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfY3R1KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjdHV4cyhfX2EsIF9fYik7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2N0dSh2ZWN0b3IgZG91YmxlIF9fYSwgaW50IF9fYikgeworICBfX2EgKj0gKHZlY3RvciBkb3VibGUpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCgweDNmZlVMTCArIF9fYikgPDwgNTIpOworICByZXR1cm4gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdmN0dXhzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZjdHV4cyh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3R1eHMoX19hLCBfX2IpOworfQorCisvKiB2ZWNfZG91YmxlICovCisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX2RvdWJsZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgdmVjdG9yIGRvdWJsZSBfX3JldCA9IHtfX2FbMF0sIF9fYVsxXX07CisgIHJldHVybiBfX3JldDsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19kb3VibGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgdmVjdG9yIGRvdWJsZSBfX3JldCA9IHtfX2FbMF0sIF9fYVsxXX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisvKiB2ZWNfZGl2ICovCisKKy8qIEludGVnZXIgdmVjdG9yIGRpdmlkZXMgKHZlY3RvcnMgYXJlIHNjYWxhcml6ZWQsIGVsZW1lbnRzIGRpdmlkZWQKKyAgIGFuZCB0aGUgdmVjdG9ycyByZWFzc2VtYmxlZCkuCisqLworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgLyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAvIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgLyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAvIF9fYjsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAvIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfZGl2KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfZGl2KHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorI2VuZGlmCisKKy8qIHZlY19kc3MgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIHZlY19kc3MoaW50IF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19kc3MoX19hKTsKK30KKworLyogdmVjX2Rzc2FsbCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkgdmVjX2Rzc2FsbCh2b2lkKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX2Rzc2FsbCgpOworfQorCisvKiB2ZWNfZHN0ICovCisjZGVmaW5lIHZlY19kc3QoX19QVFIsIF9fQ1csIF9fU1RSKSBcCisgIF9fZXh0ZW5zaW9uX18oICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7IF9fYnVpbHRpbl9hbHRpdmVjX2RzdCgoY29uc3Qgdm9pZCAqKShfX1BUUiksIChfX0NXKSwgKF9fU1RSKSk7IH0pCisKKy8qIHZlY19kc3RzdCAqLworI2RlZmluZSB2ZWNfZHN0c3QoX19QVFIsIF9fQ1csIF9fU1RSKSBcCisgIF9fZXh0ZW5zaW9uX18oICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgX19idWlsdGluX2FsdGl2ZWNfZHN0c3QoKGNvbnN0IHZvaWQgKikoX19QVFIpLCAoX19DVyksIChfX1NUUikpOyB9KQorCisvKiB2ZWNfZHN0c3R0ICovCisjZGVmaW5lIHZlY19kc3RzdHQoX19QVFIsIF9fQ1csIF9fU1RSKSBcCisgIF9fZXh0ZW5zaW9uX18oICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7IF9fYnVpbHRpbl9hbHRpdmVjX2RzdHN0dCgoY29uc3Qgdm9pZCAqKShfX1BUUiksIChfX0NXKSwgKF9fU1RSKSk7IH0pCisKKy8qIHZlY19kc3R0ICovCisjZGVmaW5lIHZlY19kc3R0KF9fUFRSLCBfX0NXLCBfX1NUUikgXAorICBfX2V4dGVuc2lvbl9fKCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgX19idWlsdGluX2FsdGl2ZWNfZHN0dCgoY29uc3Qgdm9pZCAqKShfX1BUUiksIChfX0NXKSwgKF9fU1RSKSk7IH0pCisKKy8qIHZlY19lcXYgKi8KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfZXF2KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19lcXYodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fdnN4X3h4bGVxdigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfZXF2KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2Vxdih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfZXF2KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2Vxdih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2Vxdih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHhsZXF2KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfZXF2KHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fdnN4X3h4bGVxdigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2Vxdih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfeHhsZXF2KAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2Vxdih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfeHhsZXF2KAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfZXF2KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19lcXYodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2V4cHRlICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfZXhwdGUodmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmV4cHRlZnAoX19hKTsKK30KKworLyogdmVjX3ZleHB0ZWZwICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmV4cHRlZnAodmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmV4cHRlZnAoX19hKTsKK30KKworLyogdmVjX2Zsb29yICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2Zsb29yKHZlY3RvciBmbG9hdCBfX2EpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cnNwaW0oX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmZpbShfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfZmxvb3IodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpbShfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY192cmZpbSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZyZmltKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZmltKF9fYSk7Cit9CisKKy8qIHZlY19sZCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2xkKGludCBfX2EsIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2xkKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2xkKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2xkKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCisvKiB2ZWNfbHZ4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2eChpbnQgX19hLCBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2eChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2eChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2x2eChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2x2eChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCisvKiB2ZWNfbGRlICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sZGUoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdmVieChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2xkZShpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdmVieChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2xkZShpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZWh4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2xkZShpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZWh4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2xkZShpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZld3goX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2xkZShpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZld3goX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sZGUoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdmV3eChfX2EsIF9fYik7Cit9CisKKy8qIHZlY19sdmVieCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZlYngoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdmVieChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2ZWJ4KGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2ZWJ4KF9fYSwgX19iKTsKK30KKworLyogdmVjX2x2ZWh4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2ZWh4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZWh4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2ZWh4KGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZlaHgoX19hLCBfX2IpOworfQorCisvKiB2ZWNfbHZld3ggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2ZXd4KGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY19sdmV3eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZld3goaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZXd4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZld3goaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZld3goX19hLCBfX2IpOworfQorCisvKiB2ZWNfbGRsICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sZGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sZGwoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2xkbChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3Igc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sZGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sZGwoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHBpeGVsICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2xkbChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCisvKiB2ZWNfbHZ4bCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2eGwoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2eGwoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2eGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKKy8qIHZlY19sb2dlICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfbG9nZSh2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bG9nZWZwKF9fYSk7Cit9CisKKy8qIHZlY192bG9nZWZwICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmxvZ2VmcCh2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bG9nZWZwKF9fYSk7Cit9CisKKy8qIHZlY19sdnNsICovCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2c2woaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZzbChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzbChpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2c2woaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c2woaW50IF9fYSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZzbChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c2woaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzbChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c2woaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2c2woaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzbChpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2c2woaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2x2c3IgKi8KKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c3IoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZzcihpbnQgX19hLCBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c3IoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnNyKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzcihpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnNyKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNyKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZzcihpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzcihpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfbWFkZCAqLworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWxhZGQodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWFkZCgKKyAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiB2ZWNfbWxhZGQoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIHZlY19tbGFkZChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIHZlY19tbGFkZChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21hZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIHZlY19tbGFkZChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbWFkZCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19jKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dm1hZGRhc3AoX19hLCBfX2IsIF9fYyk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1hZGRmcChfX2EsIF9fYiwgX19jKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX21hZGQodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWFkZGFkcChfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdm1hZGRmcCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtYWRkZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwgdmVjdG9yIGZsb2F0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1hZGRmcChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX21hZGRzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX21hZGRzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1oYWRkc2hzKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfdm1oYWRkc2hzICovCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bWhhZGRzaHModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1oYWRkc2hzKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfbXN1YiAqLworCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbXN1Yih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bXN1YmFzcChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX21zdWIodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bXN1YmFkcChfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfbWF4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNiKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX21heCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNiKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHViKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHViKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaChfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX21heCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHV3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1dyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2QoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2QoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNkKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1ZCgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWQoX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWF4c3AoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhmcChfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWF4ZHAoX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY192bWF4c2IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtYXhzYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1heHNiKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bWF4c2IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzYihfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyogdmVjX3ZtYXh1YiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bWF4dWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtYXh1Yih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1heHViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1YihfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKiB2ZWNfdm1heHNoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtYXhzaCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtYXhzaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bWF4c2godmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaChfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworLyogdmVjX3ZtYXh1aCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1heHVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bWF4dWgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bWF4dWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWgoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKKy8qIHZlY192bWF4c3cgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZtYXhzdyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWF4c3codmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWF4c3codmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY192bWF4dXcgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192bWF4dXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZtYXh1dyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHV3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192bWF4dXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1dyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKy8qIHZlY192bWF4ZnAgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bWF4ZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZtYXhzcChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heGZwKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfbWVyZ2VoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MTAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsIDB4MTMsIDB4MDQsIDB4MTQsIDB4MDUsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MTYsIDB4MDcsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgxMCwgMHgwMSwgMHgxMSwgMHgwMiwgMHgxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgxMywgMHgwNCwgMHgxNCwgMHgwNSwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgxNiwgMHgwNywgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDEwLCAweDAxLCAweDExLCAweDAyLCAweDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDEzLCAweDA0LCAweDE0LCAweDA1LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDE2LCAweDA3LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDEwLCAweDExLCAweDAyLCAweDAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MTAsIDB4MTEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VoKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDEwLCAweDExLCAweDEyLCAweDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDEwLCAweDExLCAweDEyLCAweDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDEwLCAweDExLCAweDEyLCAweDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgKHZlY3RvciBkb3VibGUpX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDEwLCAweDExLCAweDEyLCAweDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBkb3VibGUpX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdm1yZ2hiICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdm1yZ2hiIHZlY192bXJnaGIKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtcmdoYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgxMCwgMHgwMSwgMHgxMSwgMHgwMiwgMHgxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgxMywgMHgwNCwgMHgxNCwgMHgwNSwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgxNiwgMHgwNywgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bXJnaGIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDEwLCAweDAxLCAweDExLCAweDAyLCAweDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDEzLCAweDA0LCAweDE0LCAweDA1LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDE2LCAweDA3LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1yZ2hiKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MTAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsIDB4MTMsIDB4MDQsIDB4MTQsIDB4MDUsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MTYsIDB4MDcsIDB4MTcpKTsKK30KKworLyogdmVjX3ZtcmdoaCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZtcmdoaCB2ZWNfdm1yZ2hoCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtcmdoaCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDEwLCAweDExLCAweDAyLCAweDAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bXJnaGgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MTAsIDB4MTEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1yZ2hoKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192bXJnaGgodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOworfQorCisvKiB2ZWNfdm1yZ2h3ICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdm1yZ2h3IHZlY192bXJnaHcKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Ztcmdodyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDEwLCAweDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdm1yZ2h3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2h3KHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2h3KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworLyogdmVjX21lcmdlbCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDE4LCAweDA5LCAweDE5LCAweDBBLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCLCAweDFCLCAweDBDLCAweDFDLCAweDBELCAweDFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDFFLCAweDBGLCAweDFGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MTgsIDB4MDksIDB4MTksIDB4MEEsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIsIDB4MUIsIDB4MEMsIDB4MUMsIDB4MEQsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MUUsIDB4MEYsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgxOCwgMHgwOSwgMHgxOSwgMHgwQSwgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQiwgMHgxQiwgMHgwQywgMHgxQywgMHgwRCwgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgxRSwgMHgwRiwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tZXJnZWwodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgxOCwgMHgxOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgxQywgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDE4LCAweDE5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDFDLCAweDFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDFFLCAweDFGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VsKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21lcmdlbCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDE4LCAweDE5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VsKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDE4LCAwWDE5LCAweDFBLCAweDFCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDE4LCAwWDE5LCAweDFBLCAweDFCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX21lcmdlbCh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDE4LCAwWDE5LCAweDFBLCAweDFCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCAodmVjdG9yIGRvdWJsZSlfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGRvdWJsZSlfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorI2VuZGlmCisKKy8qIHZlY192bXJnbGIgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bXJnbGIgdmVjX3ZtcmdsYgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1yZ2xiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDE4LCAweDA5LCAweDE5LCAweDBBLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCLCAweDFCLCAweDBDLCAweDFDLCAweDBELCAweDFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDFFLCAweDBGLCAweDFGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtcmdsYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MTgsIDB4MDksIDB4MTksIDB4MEEsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIsIDB4MUIsIDB4MEMsIDB4MUMsIDB4MEQsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MUUsIDB4MEYsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bXJnbGIodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgxOCwgMHgwOSwgMHgxOSwgMHgwQSwgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQiwgMHgxQiwgMHgwQywgMHgxQywgMHgwRCwgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgxRSwgMHgwRiwgMHgxRikpOworfQorCisvKiB2ZWNfdm1yZ2xoICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdm1yZ2xoIHZlY192bXJnbGgKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2xoKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZtcmdsaCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgxOCwgMHgxOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgxQywgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bXJnbGgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDE4LCAweDE5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDFDLCAweDFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDFFLCAweDFGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3ZtcmdsaCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDE4LCAweDE5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDFDLCAweDFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDFFLCAweDFGKSk7Cit9CisKKy8qIHZlY192bXJnbHcgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bXJnbHcgdmVjX3ZtcmdsdworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2x3KHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192bXJnbHcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192bXJnbHcodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192bXJnbHcodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KKy8qIHZlY19tZXJnZWUgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgsIDB4MTksIDB4MUEsIDB4MUIpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX21lcmdlZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDEwLCAweDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA4LCAweDA5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7Cit9CisKKy8qIHZlY19tZXJnZW8gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VvKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTYsIDB4MTcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VvKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNiwgMHgxNywgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX21lcmdlbyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2LCAweDE3LCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CisKKyNlbmRpZgorCisvKiB2ZWNfbWZ2c2NyICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfbWZ2c2NyKHZvaWQpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX21mdnNjcigpOworfQorCisvKiB2ZWNfbWluICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNiKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX21pbih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNiKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2IoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnViKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnViKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaChfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnN3KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnN3KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnN3KF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX21pbih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnV3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51dyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2QoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2QoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNkKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51ZCgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWQoX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWluc3AoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5mcChfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWluZHAoX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY192bWluc2IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtaW5zYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1pbnNiKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2IoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bWluc2IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zYihfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyogdmVjX3ZtaW51YiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bWludWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtaW51Yih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1pbnViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51YihfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKiB2ZWNfdm1pbnNoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zaCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bWluc2godmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaChfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworLyogdmVjX3ZtaW51aCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1pbnVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bWludWgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bWludWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWgoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKKy8qIHZlY192bWluc3cgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zdyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zdyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWluc3codmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zdygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWluc3codmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zdyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY192bWludXcgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192bWludXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZtaW51dyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnV3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192bWludXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51dyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKy8qIHZlY192bWluZnAgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bWluZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZtaW5zcChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbmZwKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfbWxhZGQgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bWxhZGR1aG0gdmVjX21sYWRkCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21sYWRkKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYykgeworICByZXR1cm4gX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tbGFkZCgKKyAgICB2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiAodmVjdG9yIHNob3J0KV9fYiArICh2ZWN0b3Igc2hvcnQpX19jOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWxhZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Cit9CisKKy8qIHZlY192bWxhZGR1aG0gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1sYWRkdWhtKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtbGFkZHVobSgKKyAgICB2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiAodmVjdG9yIHNob3J0KV9fYiArICh2ZWN0b3Igc2hvcnQpX19jOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1sYWRkdWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsIHZlY3RvciBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1sYWRkdWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKK30KKworLyogdmVjX21yYWRkcyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX21yYWRkcyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLCB2ZWN0b3Igc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWhyYWRkc2hzKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfdm1ocmFkZHNocyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtaHJhZGRzaHModmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwgdmVjdG9yIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1ocmFkZHNocyhfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX21zdW0gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21zdW0odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bW1ibShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tc3VtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3VtdWJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbXN1bSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXNobShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tc3VtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW11aG0oX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192bXN1bW1ibSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXN1bW1ibSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsIHZlY3RvciBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bW1ibShfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3Ztc3VtdWJtICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Ztc3VtdWJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXVibShfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3Ztc3Vtc2htICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Ztc3Vtc2htKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsIHZlY3RvciBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXNobShfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3Ztc3VtdWhtICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Ztc3VtdWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3VtdWhtKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfbXN1bXMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21zdW1zKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW1zaHMoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbXN1bXModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW11aHMoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192bXN1bXNocyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXN1bXNocyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLCB2ZWN0b3IgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW1zaHMoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192bXN1bXVocyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXN1bXVocyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXVocyhfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX210dnNjciAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19tdHZzY3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBib29sIGNoYXIgX19hKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBzaG9ydCBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19tdHZzY3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19tdHZzY3IodmVjdG9yIHBpeGVsIF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgaW50IF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgYm9vbCBpbnQgX19hKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKKy8qIHZlY19tdWwgKi8KKworLyogSW50ZWdlciB2ZWN0b3IgbXVsdGlwbGljYXRpb24gd2lsbCBpbnZvbHZlIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBvZGQvZXZlbgorICAgZWxlbWVudHMgc2VwYXJhdGVseSwgdGhlbiB0cnVuY2F0aW5nIHRoZSByZXN1bHRzIGFuZCBtb3ZpbmcgdG8gdGhlCisgICByZXN1bHQgdmVjdG9yLgorKi8KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICogX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICogX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbXVsKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19hICogX19iOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX211bCh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKyNlbmRpZgorCisvKiBUaGUgdm11bG9zKiBhbmQgdm11bGVzKiBpbnN0cnVjdGlvbnMgaGF2ZSBhIGJpZyBlbmRpYW4gYmlhcywgc28KKyAgIHdlIG11c3QgcmV2ZXJzZSB0aGUgbWVhbmluZyBvZiAiZXZlbiIgYW5kICJvZGQiIGZvciBsaXR0bGUgZW5kaWFuLiAgKi8KKworLyogdmVjX211bGUgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbXVsZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2IoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2IoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tdWxlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWIoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWIoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19tdWxlKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2goX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2goX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbXVsZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWgoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWgoX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbXVsZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3N3KF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXN3KF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX211bGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdXcoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldXcoX19hLCBfX2IpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3ZtdWxlc2IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsZXNiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zYihfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzYihfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3ZtdWxldWIgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsZXViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWIoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWIoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192bXVsZXNoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtdWxlc2godmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3NoKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXNoKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdm11bGV1aCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsZXVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91aChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1aChfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX211bG8gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbXVsbyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2IoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2IoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tdWxvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWIoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWIoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19tdWxvKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2goX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2goX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbXVsbyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWgoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWgoX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbXVsbyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXN3KF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3N3KF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX211bG8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldXcoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdXcoX19hLCBfX2IpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3ZtdWxvc2IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsb3NiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzYihfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zYihfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3ZtdWxvdWIgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsb3ViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWIoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWIoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192bXVsb3NoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtdWxvc2godmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXNoKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3NoKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdm11bG91aCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsb3VoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1aChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91aChfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogIHZlY19uYW5kICovCisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKKyNlbmRpZgorCisvKiB2ZWNfbm1hZGQgKi8KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX25tYWRkKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dm5tYWRkYXNwKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfbm1hZGQodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZubWFkZGFkcChfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfbm1zdWIgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbm1zdWIodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19jKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dm5tc3ViYXNwKF9fYSwgX19iLCBfX2MpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZubXN1YmZwKF9fYSwgX19iLCBfX2MpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfbm1zdWIodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZubXN1YmFkcChfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdm5tc3ViZnAgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bm1zdWJmcCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLCB2ZWN0b3IgZmxvYXQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bm1zdWJmcChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX25vciAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3Zub3IgdmVjX25vcgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbm9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19ub3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX25vcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX25vcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbm9yKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX25vcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbm9yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19ub3IodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgfigodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19ub3IodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorICAgICAgfigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Cit9CisjZW5kaWYKKworLyogdmVjX3Zub3IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zub3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bm9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192bm9yKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm5vcih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bm9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm5vcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm5vcih2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdm5vcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdm5vcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Zub3IodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgIH4oKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19ub3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19ub3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19ub3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19vciAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZvciB2ZWNfb3IKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBzaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisjZW5kaWYKKworLyogdmVjX3ZvciAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKyNlbmRpZgorCisvKiB2ZWNfcGFjayAqLworCisvKiBUaGUgdmFyaW91cyB2ZWN0b3IgcGFjayBpbnN0cnVjdGlvbnMgaGF2ZSBhIGJpZy1lbmRpYW4gYmlhcywgc28gZm9yCisgICBsaXR0bGUgZW5kaWFuIHdlIG11c3QgaGFuZGxlIHJldmVyc2VkIGVsZW1lbnQgbnVtYmVyaW5nLiAgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3BhY2sodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMSwgMHgwMywgMHgwNSwgMHgwNywgMHgwOSwgMHgwQiwgMHgwRCwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHgxMywgMHgxNSwgMHgxNywgMHgxOSwgMHgxQiwgMHgxRCwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3BhY2sodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAxLCAweDAzLCAweDA1LCAweDA3LCAweDA5LCAweDBCLCAweDBELCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDEzLCAweDE1LCAweDE3LCAweDE5LCAweDFCLCAweDFELCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19wYWNrKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDgsIDB4MEEsIDB4MEMsIDB4MEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsIDB4MUUpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAxLCAweDAzLCAweDA1LCAweDA3LCAweDA5LCAweDBCLCAweDBELCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDEzLCAweDE1LCAweDE3LCAweDE5LCAweDFCLCAweDFELCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGFjayh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBzaG9ydCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDA0LCAweDA1LCAweDA4LCAweDA5LCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDE0LCAweDE1LCAweDE4LCAweDE5LCAweDFDLCAweDFEKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBzaG9ydCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAyLCAweDAzLCAweDA2LCAweDA3LCAweDBBLCAweDBCLCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDFBLCAweDFCLCAweDFFLCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3BhY2sodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwNCwgMHgwNSwgMHgwOCwgMHgwOSwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxNCwgMHgxNSwgMHgxOCwgMHgxOSwgMHgxQywgMHgxRCkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgwQSwgMHgwQiwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgxQSwgMHgxQiwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGFjayh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDQsIDB4MDUsIDB4MDgsIDB4MDksIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTQsIDB4MTUsIDB4MTgsIDB4MTksIDB4MUMsIDB4MUQpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgwQSwgMHgwQiwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgxQSwgMHgxQiwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19wYWNrKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA4LCAweDA5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19wYWNrKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA4LCAweDA5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19wYWNrKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA4LCAweDA5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDFDLCAweDFELCAweDFFLCAweDFGKSk7CisjZW5kaWYKK30KKworI2VuZGlmCisKKy8qIHZlY192cGt1aHVtICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1bSB2ZWNfdnBrdWh1bQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnBrdWh1bSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAyLCAweDA0LCAweDA2LCAweDA4LCAweDBBLCAweDBDLCAweDBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDEyLCAweDE0LCAweDE2LCAweDE4LCAweDFBLCAweDFDLCAweDFFKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAxLCAweDAzLCAweDA1LCAweDA3LCAweDA5LCAweDBCLCAweDBELCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDEzLCAweDE1LCAweDE3LCAweDE5LCAweDFCLCAweDFELCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnBrdWh1bSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAyLCAweDA0LCAweDA2LCAweDA4LCAweDBBLCAweDBDLCAweDBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDEyLCAweDE0LCAweDE2LCAweDE4LCAweDFBLCAweDFDLCAweDFFKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDEsIDB4MDMsIDB4MDUsIDB4MDcsIDB4MDksIDB4MEIsIDB4MEQsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4MTMsIDB4MTUsIDB4MTcsIDB4MTksIDB4MUIsIDB4MUQsIDB4MUYpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zwa3VodW0odmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDEsIDB4MDMsIDB4MDUsIDB4MDcsIDB4MDksIDB4MEIsIDB4MEQsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4MTMsIDB4MTUsIDB4MTcsIDB4MTksIDB4MUIsIDB4MUQsIDB4MUYpKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdnBrdXd1bSAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dW0gdmVjX3Zwa3V3dW0KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnBrdXd1bSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBzaG9ydCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDA0LCAweDA1LCAweDA4LCAweDA5LCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDE0LCAweDE1LCAweDE4LCAweDE5LCAweDFDLCAweDFEKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBzaG9ydCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAyLCAweDAzLCAweDA2LCAweDA3LCAweDBBLCAweDBCLCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDFBLCAweDFCLCAweDFFLCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Zwa3V3dW0odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwNCwgMHgwNSwgMHgwOCwgMHgwOSwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxNCwgMHgxNSwgMHgxOCwgMHgxOSwgMHgxQywgMHgxRCkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgwQSwgMHgwQiwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgxQSwgMHgxQiwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Zwa3V3dW0odmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwNCwgMHgwNSwgMHgwOCwgMHgwOSwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxNCwgMHgxNSwgMHgxOCwgMHgxOSwgMHgxQywgMHgxRCkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAyLCAweDAzLCAweDA2LCAweDA3LCAweDBBLCAweDBCLCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDFBLCAweDFCLCAweDFFLCAweDFGKSk7CisjZW5kaWYKK30KKworLyogdmVjX3Zwa3VkdW0gKi8KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdW0gdmVjX3Zwa3VkdW0KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zwa3VkdW0odmVjdG9yIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA4LCAweDA5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBpbnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnBrdWR1bSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnBrdWR1bSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpdmVjX3Blcm0oCisgICAgICAodmVjdG9yIGxvbmcgbG9uZylfX2EsICh2ZWN0b3IgbG9uZyBsb25nKV9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpdmVjX3Blcm0oCisgICAgICAodmVjdG9yIGxvbmcgbG9uZylfX2EsICh2ZWN0b3IgbG9uZyBsb25nKV9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3BhY2tweCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3BhY2tweCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192cGtweChfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192cGtweChfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3Zwa3B4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnBrcHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnBrcHgoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnBrcHgoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY19wYWNrcyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wYWNrcyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzaHNzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzaHNzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19wYWNrcyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wYWNrcyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzd3NzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzd3NzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfcGFja3ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3BhY2tzKHZlY3RvciBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Nkc3MoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Nkc3MoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcGFja3ModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdXMoX19hLCBfX2IpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3Zwa3Noc3MgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192cGtzaHNzKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2hzcyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2hzcyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3Zwa3Nkc3MgKi8KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnBrc2Rzcyh2ZWN0b3IgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Nkc3MoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Nkc3MoX19hLCBfX2IpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3Zwa3VodXMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Zwa3VodXModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1aHVzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1aHVzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdnBrdWR1cyAqLworCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Zwa3VkdXModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdXMoX19hLCBfX2IpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3Zwa3N3c3MgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnBrc3dzcyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc3dzcyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc3dzcyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3Zwa3V3dXMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192cGt1d3VzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfcGFja3N1ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3BhY2tzdSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NodXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NodXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3BhY2tzdSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19wYWNrc3UodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3dXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3dXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19wYWNrc3UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19wYWNrc3UodmVjdG9yIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NkdXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NkdXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcGFja3N1KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1ZHVzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1ZHVzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192cGtzaHVzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zwa3NodXModmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzaHVzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzaHVzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192cGtzaHVzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3Zwa3N3dXMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Zwa3N3dXModmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3dXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3dXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192cGtzd3VzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdnBrc2R1cyAqLworCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnBrc2R1cyh2ZWN0b3IgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2R1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2R1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKiB2ZWNfcGVybSAqLworCisvLyBUaGUgdnBlcm0gaW5zdHJ1Y3Rpb24gaXMgZGVmaW5lZCBhcmNoaXRlY3R1cmFsbHkgd2l0aCBhIGJpZy1lbmRpYW4gYmlhcy4KKy8vIEZvciBsaXR0bGUgZW5kaWFuLCB3ZSBzd2FwIHRoZSBpbnB1dCBvcGVyYW5kcyBhbmQgaW52ZXJ0IHRoZSBwZXJtdXRlCisvLyBjb250cm9sIHZlY3Rvci4gIE9ubHkgdGhlIHJpZ2h0bW9zdCA1IGJpdHMgbWF0dGVyLCBzbyB3ZSBjb3VsZCB1c2UKKy8vIGEgdmVjdG9yIG9mIGFsbCAzMXMgaW5zdGVhZCBvZiBhbGwgMjU1cyB0byBwZXJmb3JtIHRoZSBpbnZlcnNpb24uCisvLyBIb3dldmVyLCB3aGVuIHRoZSBQQ1YgaXMgbm90IGEgY29uc3RhbnQsIHVzaW5nIDI1NSBoYXMgYW4gYWR2YW50YWdlCisvLyBpbiB0aGF0IHRoZSB2ZWNfeG9yIGNhbiBiZSByZWNvZ25pemVkIGFzIGEgdmVjX25vciAoYW5kIGZvciBQOCBhbmQKKy8vIGxhdGVyLCBwb3NzaWJseSBhIHZlY19uYW5kKS4KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGVybSgKKyAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koCisgICAgICAodmVjdG9yIGludClfX2IsICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAorICAgICAgKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYiwgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAorICAgICAgKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wZXJtKAorICAgIHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koX19iLCBfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaShfX2EsIF9fYiwgX19jKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAorICAgICAgKHZlY3RvciBpbnQpX19iLCAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAorICAgICAgKHZlY3RvciBpbnQpX19iLCAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAorICAgICAgKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYiwgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAorICAgICAgKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3ZwZXJtICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZwZXJtKAorICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZwZXJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192cGVybSgKKyAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192cGVybSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnBlcm0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZwZXJtKAorICAgIHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpCit2ZWNfdnBlcm0odmVjdG9yIHBpeGVsIF9fYSwgdmVjdG9yIHBpeGVsIF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZwZXJtKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnBlcm0odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY192cGVybSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpCit2ZWNfdnBlcm0odmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY192cGVybSgKKyAgICB2ZWN0b3IgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGxvbmcgbG9uZyBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdnBlcm0odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfdnBlcm0odmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorI2VuZGlmCisKKy8qIHZlY19yZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19yZSh2ZWN0b3IgZmxvYXQgX19hKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJlc3AoX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmVmcChfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfcmUodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZWRwKF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZyZWZwICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnJlZnAodmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJlZnAoX19hKTsKK30KKworLyogdmVjX3JsICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19ybCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnJsYigodmVjdG9yIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19ybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZybGIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcmwodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZybGgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192cmxoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfcmwodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZybHcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3JsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnJsdygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcmwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJsZChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmxkKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnJsYiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnJsYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnJsYigodmVjdG9yIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192cmxiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnJsYigodmVjdG9yIGNoYXIpX19hLCBfX2IpOworfQorCisvKiB2ZWNfdnJsaCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnJsaCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmxoKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZybGgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192cmxoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCisvKiB2ZWNfdnJsdyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnJsdyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmx3KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192cmx3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnJsdygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKKy8qIHZlY19yb3VuZCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19yb3VuZCh2ZWN0b3IgZmxvYXQgX19hKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcGkoX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmZpbihfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfcm91bmQodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpKF9fYSk7Cit9CisKKy8qIHZlY19yaW50ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3JpbnQodmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcGljKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19yaW50KHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cmRwaWMoX19hKTsKK30KKworLyogdmVjX25lYXJieWludCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19uZWFyYnlpbnQodmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcGkoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX25lYXJieWludCh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJkcGkoX19hKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnJmaW4gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192cmZpbih2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmZpbihfX2EpOworfQorCisvKiB2ZWNfc3FydCAqLworCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfc3FydCh2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2c3FydHNwKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19zcXJ0KHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2c3FydGRwKF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX3JzcXJ0ZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19yc3FydGUodmVjdG9yIGZsb2F0IF9fYSkgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyc3FydGVzcChfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zyc3FydGVmcChfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfcnNxcnRlKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cnNxcnRlZHAoX19hKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnJzcXJ0ZWZwICovCisKK3N0YXRpYyBfX2lubGluZV9fIF9fdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192cnNxcnRlZnAodmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJzcXJ0ZWZwKF9fYSk7Cit9CisKKy8qIHZlY19zZWwgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c2VsXzRzaSB2ZWNfc2VsCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NlbCgKKyAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaWduZWQgY2hhcilfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NlbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNpZ25lZCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciBzaWduZWQgY2hhcilfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2VsKAorICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKSB8IChfX2IgJiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBib29sIGNoYXIpX19jKSB8IChfX2IgJiAodmVjdG9yIGJvb2wgY2hhcilfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaG9ydClfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2hvcnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaG9ydClfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2hvcnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2MpIHwKKyAgICAgICAgIChfX2IgJiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2VsKAorICAgIHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgYm9vbCBzaG9ydClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgYm9vbCBzaG9ydClfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zZWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIHZlY3RvciBib29sIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgaW50KV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgaW50KV9fYykgfCAoX19iICYgKHZlY3RvciBpbnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NlbCgKKyAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYykgfCAoX19iICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3NlbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGJvb2wgaW50KV9fYykgfCAoX19iICYgKHZlY3RvciBib29sIGludClfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHZlY3RvciBpbnQgX19yZXMgPSAoKHZlY3RvciBpbnQpX19hICYgfih2ZWN0b3IgaW50KV9fYykgfAorICAgICAgICAgICAgICAgICAgICAgKCh2ZWN0b3IgaW50KV9fYiAmICh2ZWN0b3IgaW50KV9fYyk7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2MpIHsKKyAgdmVjdG9yIGludCBfX3JlcyA9ICgodmVjdG9yIGludClfX2EgJiB+KHZlY3RvciBpbnQpX19jKSB8CisgICAgICAgICAgICAgICAgICAgICAoKHZlY3RvciBpbnQpX19iICYgKHZlY3RvciBpbnQpX19jKTsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX3NlbCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2MpIHsKKyAgdmVjdG9yIGxvbmcgbG9uZyBfX3JlcyA9ICgodmVjdG9yIGxvbmcgbG9uZylfX2EgJiB+KHZlY3RvciBsb25nIGxvbmcpX19jKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZlY3RvciBsb25nIGxvbmcpX19iICYgKHZlY3RvciBsb25nIGxvbmcpX19jKTsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX3NlbCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHZlY3RvciBsb25nIGxvbmcgX19yZXMgPSAoKHZlY3RvciBsb25nIGxvbmcpX19hICYgfih2ZWN0b3IgbG9uZyBsb25nKV9fYykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2ZWN0b3IgbG9uZyBsb25nKV9fYiAmICh2ZWN0b3IgbG9uZyBsb25nKV9fYyk7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnNlbCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2VsKAorICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNpZ25lZCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciBzaWduZWQgY2hhcilfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNlbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNpZ25lZCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciBzaWduZWQgY2hhcilfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c2VsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2VsKAorICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKSB8IChfX2IgJiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c2VsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgYm9vbCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciBib29sIGNoYXIpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzZWwodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNob3J0KV9fYykgfCAoX19iICYgKHZlY3RvciBzaG9ydClfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNob3J0KV9fYykgfCAoX19iICYgKHZlY3RvciBzaG9ydClfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNlbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c2VsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2MpIHwKKyAgICAgICAgIChfX2IgJiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNlbCgKKyAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGJvb2wgc2hvcnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGJvb2wgc2hvcnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNlbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgaW50KV9fYykgfCAoX19iICYgKHZlY3RvciBpbnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBpbnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGludClfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNlbCgKKyAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwoCisgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYykgfCAoX19iICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3ZzZWwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBib29sIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgYm9vbCBpbnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICB2ZWN0b3IgaW50IF9fcmVzID0gKCh2ZWN0b3IgaW50KV9fYSAmIH4odmVjdG9yIGludClfX2MpIHwKKyAgICAgICAgICAgICAgICAgICAgICgodmVjdG9yIGludClfX2IgJiAodmVjdG9yIGludClfX2MpOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHZlY3RvciBpbnQgX19yZXMgPSAoKHZlY3RvciBpbnQpX19hICYgfih2ZWN0b3IgaW50KV9fYykgfAorICAgICAgICAgICAgICAgICAgICAgKCh2ZWN0b3IgaW50KV9fYiAmICh2ZWN0b3IgaW50KV9fYyk7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisvKiB2ZWNfc2wgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIDw8ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIDw8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2wodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA8PCAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA8PCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zbCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIDw8ICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA8PCBfX2I7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc2wodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIDw8ICh2ZWN0b3IgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSA8PCBfX2I7Cit9CisjZW5kaWYKKworLyogdmVjX3ZzbGIgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c2xiIHZlY192c2xiCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c2xiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3NsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3NsKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZzbGggKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c2xoIHZlY192c2xoCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c2xoKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19zbChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c2xoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19zbChfX2EsIF9fYik7Cit9CisKKy8qIHZlY192c2x3ICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNsdyB2ZWNfdnNsdworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsdyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2woX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzbHcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2woX19hLCBfX2IpOworfQorCisvKiB2ZWNfc2xkICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNsZG9pXzRzaSB2ZWNfc2xkCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NsZCgKKyAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NsZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NsZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgLSBfX2QsIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCAtIF9fZCwgMjUgLSBfX2QsIDI2IC0gX19kLCAyNyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsZCgKKyAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgLSBfX2QsIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCAtIF9fZCwgMjUgLSBfX2QsIDI2IC0gX19kLCAyNyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NsZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NsZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zbGQodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgLSBfX2QsIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCAtIF9fZCwgMjUgLSBfX2QsIDI2IC0gX19kLCAyNyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc2xkKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zbGQoCisgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3NsZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zbGQodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgLSBfX2QsIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCAtIF9fZCwgMjUgLSBfX2QsIDI2IC0gX19kLCAyNyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworLyogdmVjX3ZzbGRvaSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsZG9pKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKAorICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLCB1bnNpZ25lZCBjaGFyIF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2xkb2kodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbGRvaSgKKyAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCB1bnNpZ25lZCBjaGFyIF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c2xkb2kodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c2xkb2kodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKAorICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgLSBfX2QsIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCAtIF9fZCwgMjUgLSBfX2QsIDI2IC0gX19kLCAyNyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfc2xsICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc2xsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc2xsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NsbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NsbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbChfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc2xsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY192c2wgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c2wodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c2wodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c2wodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c2wodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY192c2wodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworLyogdmVjX3NsbyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc2xvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Nsbyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc2xvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc2xvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbG8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc2xvKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xvKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Nsbyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc2xvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY192c2xvICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c2xvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzbG8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzbG8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c2xvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNsbyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c2xvKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNsbyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNsbyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworLyogdmVjX3NwbGF0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IgJiAweDBGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iICYgMHgwRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NwbGF0KHZlY3RvciBib29sIGNoYXIgX19hLCB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IgJiAweDBGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDA3KSAqIDI7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDE7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDA3KSAqIDI7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDE7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc3BsYXQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwNykgKiAyOworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0KHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwNykgKiAyOworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3NwbGF0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDMpICogNDsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMywgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMiwgYjMsIGIwLCBiMSwgYjIsIGIzKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3BsYXQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDAzKSAqIDQ7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDEsIGIyID0gYjAgKyAyLCBiMyA9IGIwICsgMzsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIyLCBiMywgYjAsIGIxLCBiMiwgYjMsIGIwLCBiMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3BsYXQodmVjdG9yIGJvb2wgaW50IF9fYSwgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDMpICogNDsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMywgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMiwgYjMsIGIwLCBiMSwgYjIsIGIzKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwMykgKiA0OworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxLCBiMiA9IGIwICsgMiwgYjMgPSBiMCArIDM7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMiwgYjMsIGIwLCBiMSwgYjIsIGIzLCBiMCwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIyLCBiMywgYjAsIGIxLCBiMiwgYjMpKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19zcGxhdCh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwMSkgKiA4OworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxLCBiMiA9IGIwICsgMiwgYjMgPSBiMCArIDMsIGI0ID0gYjAgKyA0LCBiNSA9IGIwICsgNSwKKyAgICAgICAgICAgICAgICBiNiA9IGIwICsgNiwgYjcgPSBiMCArIDc7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3LCBiMCwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcpKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwMSkgKiA4OworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxLCBiMiA9IGIwICsgMiwgYjMgPSBiMCArIDMsIGI0ID0gYjAgKyA0LCBiNSA9IGIwICsgNSwKKyAgICAgICAgICAgICAgICBiNiA9IGIwICsgNiwgYjcgPSBiMCArIDc7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3LCBiMCwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcpKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NwbGF0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDEpICogODsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzLCBiNCA9IGIwICsgNCwgYjUgPSBiMCArIDUsCisgICAgICAgICAgICAgICAgYjYgPSBiMCArIDYsIGI3ID0gYjAgKyA3OworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNywgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3KSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwMSkgKiA4OworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxLCBiMiA9IGIwICsgMiwgYjMgPSBiMCArIDMsIGI0ID0gYjAgKyA0LCBiNSA9IGIwICsgNSwKKyAgICAgICAgICAgICAgICBiNiA9IGIwICsgNiwgYjcgPSBiMCArIDc7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3LCBiMCwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcpKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnNwbHRiICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNwbHRiIHZlY192c3BsdGIKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzcGx0Yih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzcGx0Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0Yih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYikpOworfQorCisvKiB2ZWNfdnNwbHRoICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNwbHRoIHZlY192c3BsdGgKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNwbHRoKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgX19iICo9IDI7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBfX2IgKyAxOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzcGx0aCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB1bnNpZ25lZCBjaGFyIF9fYikgeworICBfX2IgKj0gMjsKKyAgdW5zaWduZWQgY2hhciBiMSA9IF9fYiArIDE7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3BsdGgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB1bnNpZ25lZCBjaGFyIF9fYikgeworICBfX2IgKj0gMjsKKyAgdW5zaWduZWQgY2hhciBiMSA9IF9fYiArIDE7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c3BsdGgodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYikgeworICBfX2IgKj0gMjsKKyAgdW5zaWduZWQgY2hhciBiMSA9IF9fYiArIDE7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSkpOworfQorCisvKiB2ZWNfdnNwbHR3ICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNwbHR3IHZlY192c3BsdHcKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0dyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgX19iICo9IDQ7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBfX2IgKyAxLCBiMiA9IF9fYiArIDIsIGIzID0gX19iICsgMzsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IsIGIxLCBiMiwgYjMsIF9fYiwgYjEsIGIyLCBiMywgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMSwgYjIsIGIzLCBfX2IsIGIxLCBiMiwgYjMpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c3BsdHcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIF9fYiAqPSA0OworICB1bnNpZ25lZCBjaGFyIGIxID0gX19iICsgMSwgYjIgPSBfX2IgKyAyLCBiMyA9IF9fYiArIDM7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgYjIsIGIzLCBfX2IsIGIxLCBiMiwgYjMsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0dyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIF9fYiAqPSA0OworICB1bnNpZ25lZCBjaGFyIGIxID0gX19iICsgMSwgYjIgPSBfX2IgKyAyLCBiMyA9IF9fYiArIDM7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgYjIsIGIzLCBfX2IsIGIxLCBiMiwgYjMsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0dyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIF9fYiAqPSA0OworICB1bnNpZ25lZCBjaGFyIGIxID0gX19iICsgMSwgYjIgPSBfX2IgKyAyLCBiMyA9IF9fYiArIDM7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgYjIsIGIzLCBfX2IsIGIxLCBiMiwgYjMsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzKSk7Cit9CisKKy8qIHZlY19zcGxhdF9zOCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcGx0aXNiIHZlY19zcGxhdF9zOAorCisvLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3BsYXRfczgoc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKShfX2EpOworfQorCisvKiB2ZWNfdnNwbHRpc2IgKi8KKworLy8gRklYTUU6IHBhcmFtZXRlciBzaG91bGQgYmUgdHJlYXRlZCBhcyA1LWJpdCBzaWduZWQgbGl0ZXJhbAorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzcGx0aXNiKHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikoX19hKTsKK30KKworLyogdmVjX3NwbGF0X3MxNiAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcGx0aXNoIHZlY19zcGxhdF9zMTYKKworLy8gRklYTUU6IHBhcmFtZXRlciBzaG91bGQgYmUgdHJlYXRlZCBhcyA1LWJpdCBzaWduZWQgbGl0ZXJhbAorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRfczE2KHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaG9ydCkoX19hKTsKK30KKworLyogdmVjX3ZzcGx0aXNoICovCisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0aXNoKHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaG9ydCkoX19hKTsKK30KKworLyogdmVjX3NwbGF0X3MzMiAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcGx0aXN3IHZlY19zcGxhdF9zMzIKKworLy8gRklYTUU6IHBhcmFtZXRlciBzaG91bGQgYmUgdHJlYXRlZCBhcyA1LWJpdCBzaWduZWQgbGl0ZXJhbAorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0X3MzMihzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KShfX2EpOworfQorCisvKiB2ZWNfdnNwbHRpc3cgKi8KKworLy8gRklYTUU6IHBhcmFtZXRlciBzaG91bGQgYmUgdHJlYXRlZCBhcyA1LWJpdCBzaWduZWQgbGl0ZXJhbAorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0aXN3KHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBpbnQpKF9fYSk7Cit9CisKKy8qIHZlY19zcGxhdF91OCAqLworCisvLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdF91OCh1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2EpOworfQorCisvKiB2ZWNfc3BsYXRfdTE2ICovCisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdF91MTYoc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KShfX2EpOworfQorCisvKiB2ZWNfc3BsYXRfdTMyICovCisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3BsYXRfdTMyKHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpKF9fYSk7Cit9CisKKy8qIHZlY19zciAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSA+PiBfX2I7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hID4+IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSA+PiBfX2I7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NyKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3NyKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSA+PiBfX2I7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgPj4gX19iOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NyKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSA+PiBfX2I7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgPj4gX19iOworfQorI2VuZGlmCisKKy8qIHZlY192c3JiICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNyYiB2ZWNfdnNyYgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hID4+IF9fYjsKK30KKworLyogdmVjX3ZzcmggKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3JoIHZlY192c3JoCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3JoKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzcmgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hID4+IF9fYjsKK30KKworLyogdmVjX3ZzcncgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3J3IHZlY192c3J3CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3J3KHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNydyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiBfX2I7Cit9CisKKy8qIHZlY19zcmEgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NyYSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyYWIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3JhKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyYWIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JhKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnNyYWgoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcmEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JhaCgodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NyYSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcmF3KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zcmEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JhdygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc3JhKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc3JhKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgPj4gX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnNyYWIgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzcmFiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JhYigodmVjdG9yIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3JhYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFiKCh2ZWN0b3IgY2hhcilfX2EsIF9fYik7Cit9CisKKy8qIHZlY192c3JhaCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNyYWgodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnNyYWgoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3JhaCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCisvKiB2ZWNfdnNyYXcgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzcmF3KHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3JhdyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNyYXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JhdygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKKy8qIHZlY19zcmwgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc3JsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc3JsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworLyogdmVjX3ZzciAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zzcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zzcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Zzcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcihfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcihfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Zzcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3Zzcih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCisvKiB2ZWNfc3JvICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcm8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3JvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcm8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcm8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Nybyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcm8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3JvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zcm8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworLyogdmVjX3Zzcm8gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zzcm8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNybyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNybyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zzcm8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3JvKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Zzcm8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c3JvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c3JvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCisvKiB2ZWNfc3QgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3N0dnggKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdGUgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVieCgodmVjdG9yIGNoYXIpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWJ4KCh2ZWN0b3IgY2hhcilfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlYngoKHZlY3RvciBjaGFyKV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWJ4KCh2ZWN0b3IgY2hhcilfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZld3goX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZld3goKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfc3R2ZWJ4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlYngodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlYngoKHZlY3RvciBjaGFyKV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZWJ4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVieCgodmVjdG9yIGNoYXIpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlYngodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWJ4KCh2ZWN0b3IgY2hhcilfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVieCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVieCgodmVjdG9yIGNoYXIpX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdHZlaHggKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVoeCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVoeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLCB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZWh4KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVoeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlaHgodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVoeCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfc3R2ZXd4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZld3godmVjdG9yIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmV3eCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZXd4KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmV3eCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZld3goKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZld3godmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZld3goKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdGwgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfc3R2eGwgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3N1YiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3ViKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3ViKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgLSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc3ViKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgLSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgLSAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3ViKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCisjaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorI2VuZGlmIC8vIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKKy8qIHZlY192c3VidWJtICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnN1YnVibSB2ZWNfdnN1YnVibQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnN1YnVibSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3VidWJtKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzdWJ1Ym0odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3VidWJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzdWJ1Ym0odmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnN1YnVibSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgLSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCisvKiB2ZWNfdnN1YnVobSAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1aG0gdmVjX3ZzdWJ1aG0KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnN1YnVobSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1aG0odmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnN1YnVobSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3Igc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnN1YnVobSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3VidWhtKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3VidWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Cit9CisKKy8qIHZlY192c3VidXdtICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3bSB2ZWNfdnN1YnV3bQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnN1YnV3bSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3VidXdtKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnN1YnV3bSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c3VidXdtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1d20odmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c3VidXdtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgLSAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKKy8qIHZlY192c3ViZnAgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3ViZnAgdmVjX3ZzdWJmcAorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZzdWJmcCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKKy8qIHZlY19zdWJjICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3ViYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJjdXcoX19hLCBfX2IpOworfQorCisjaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3N1YmModmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmN1cShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfc3ViYyh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJjdXEoX19hLCBfX2IpOworfQorI2VuZGlmIC8vIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKKworLyogdmVjX3ZzdWJjdXcgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnN1YmN1dyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJjdXcoX19hLCBfX2IpOworfQorCisvKiB2ZWNfc3VicyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3Vicyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2JzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3N1YnModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zdWJzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2JzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zdWJzKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWJzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3Vicyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3N1YnModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVicyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzaHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNocygodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzaHMoX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zdWJzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1aHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc3Vicyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zdWJzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3Vicyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1d3MoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3N1YnModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1d3MoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3N1YnModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1d3MoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCisvKiB2ZWNfdnN1YnNicyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnN1YnNicyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2JzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzdWJzYnModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3Vic2JzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2JzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IpOworfQorCisvKiB2ZWNfdnN1YnVicyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3VidWJzKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWJzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnN1YnVicyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzdWJ1YnModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVicyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKiB2ZWNfdnN1YnNocyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3Vic2hzKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzaHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3Vic2hzKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNocygodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnN1YnNocyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzaHMoX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKKy8qIHZlY192c3VidWhzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3VidWhzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1aHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnN1YnVocyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3VidWhzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworLyogdmVjX3ZzdWJzd3MgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJzd3ModmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3Vic3dzKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3Vic3dzKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY192c3VidXdzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnN1YnV3cyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1d3MoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1d3ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1d3MoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1d3ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1d3MoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCisjaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorLyogdmVjX3ZzdWJ1cW0gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192c3VidXFtKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdnN1YnVxbSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKKy8qIHZlY192c3ViZXVxbSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZzdWJldXFtKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmV1cW0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192c3ViZXVxbSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJldXFtKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfdnN1YmN1cSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZzdWJjdXEodmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViY3VxKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZzdWJjdXEodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmN1cShfX2EsIF9fYik7Cit9CisKKy8qIHZlY192c3ViZWN1cSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZzdWJlY3VxKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmVjdXEoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192c3ViZWN1cSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJlY3VxKF9fYSwgX19iLCBfX2MpOworfQorI2VuZGlmIC8vIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKKworLyogdmVjX3N1bTRzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zdW00cyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtNHNicyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3VtNHModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bTR1YnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3VtNHModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW00c2hzKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZzdW00c2JzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZzdW00c2JzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtNHNicyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY192c3VtNHVicyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192c3VtNHVicyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtNHVicyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY192c3VtNHNocyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192c3VtNHNocyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW00c2hzKF9fYSwgX19iKTsKK30KKworLyogdmVjX3N1bTJzICovCisKKy8qIFRoZSB2c3VtMnN3cyBpbnN0cnVjdGlvbiBoYXMgYSBiaWctZW5kaWFuIGJpYXMsIHNvIHRoYXQgdGhlIHNlY29uZAorICAgaW5wdXQgdmVjdG9yIGFuZCB0aGUgcmVzdWx0IGFsd2F5cyByZWZlcmVuY2UgYmlnLWVuZGlhbiBlbGVtZW50cworICAgMSBhbmQgMyAobGl0dGxlLWVuZGlhbiBlbGVtZW50IDAgYW5kIDIpLiAgRm9yIGVhc2Ugb2YgcG9ydGluZyB0aGUKKyAgIHByb2dyYW1tZXIgd2FudHMgZWxlbWVudHMgMSBhbmQgMyBpbiBib3RoIGNhc2VzLCBzbyBmb3IgbGl0dGxlCisgICBlbmRpYW4gd2UgbXVzdCBwZXJmb3JtIHNvbWUgcGVybXV0ZXMuICAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfc3VtMnModmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIGludCBfX2MgPSAodmVjdG9yIHNpZ25lZCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg0LCA1LCA2LCA3LCAwLCAxLCAyLCAzLCAxMiwgMTMsIDE0LCAxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIDksIDEwLCAxMSkpOworICBfX2MgPSBfX2J1aWx0aW5fYWx0aXZlY192c3VtMnN3cyhfX2EsIF9fYyk7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2MsIF9fYywgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg0LCA1LCA2LCA3LCAwLCAxLCAyLCAzLCAxMiwgMTMsIDE0LCAxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIDksIDEwLCAxMSkpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW0yc3dzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdnN1bTJzd3MgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZzdW0yc3dzKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciBpbnQgX19jID0gKHZlY3RvciBzaWduZWQgaW50KXZlY19wZXJtKAorICAgICAgX19iLCBfX2IsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoNCwgNSwgNiwgNywgMCwgMSwgMiwgMywgMTIsIDEzLCAxNCwgMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCA5LCAxMCwgMTEpKTsKKyAgX19jID0gX19idWlsdGluX2FsdGl2ZWNfdnN1bTJzd3MoX19hLCBfX2MpOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KXZlY19wZXJtKAorICAgICAgX19jLCBfX2MsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoNCwgNSwgNiwgNywgMCwgMSwgMiwgMywgMTIsIDEzLCAxNCwgMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCA5LCAxMCwgMTEpKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtMnN3cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3N1bXMgKi8KKworLyogVGhlIHZzdW1zd3MgaW5zdHJ1Y3Rpb24gaGFzIGEgYmlnLWVuZGlhbiBiaWFzLCBzbyB0aGF0IHRoZSBzZWNvbmQKKyAgIGlucHV0IHZlY3RvciBhbmQgdGhlIHJlc3VsdCBhbHdheXMgcmVmZXJlbmNlIGJpZy1lbmRpYW4gZWxlbWVudCAzCisgICAobGl0dGxlLWVuZGlhbiBlbGVtZW50IDApLiAgRm9yIGVhc2Ugb2YgcG9ydGluZyB0aGUgcHJvZ3JhbW1lcgorICAgd2FudHMgZWxlbWVudCAzIGluIGJvdGggY2FzZXMsIHNvIGZvciBsaXR0bGUgZW5kaWFuIHdlIG11c3QgcGVyZm9ybQorICAgc29tZSBwZXJtdXRlcy4gICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19zdW1zKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgX19iID0gKHZlY3RvciBzaWduZWQgaW50KXZlY19zcGxhdChfX2IsIDMpOworICBfX2IgPSBfX2J1aWx0aW5fYWx0aXZlY192c3Vtc3dzKF9fYSwgX19iKTsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkoMCwgMCwgMCwgX19iWzBdKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vtc3dzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdnN1bXN3cyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnN1bXN3cyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIF9fYiA9ICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfc3BsYXQoX19iLCAzKTsKKyAgX19iID0gX19idWlsdGluX2FsdGl2ZWNfdnN1bXN3cyhfX2EsIF9fYik7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpKDAsIDAsIDAsIF9fYlswXSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bXN3cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3RydW5jICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3RydW5jKHZlY3RvciBmbG9hdCBfX2EpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cnNwaXooX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmZpeihfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfdHJ1bmModmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpeihfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY192cmZpeiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZyZml6KHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZml6KF9fYSk7Cit9CisKKy8qIHZlY191bnBhY2toICovCisKKy8qIFRoZSB2ZWN0b3IgdW5wYWNrIGluc3RydWN0aW9ucyBhbGwgaGF2ZSBhIGJpZy1lbmRpYW4gYmlhcywgc28gZm9yCisgICBsaXR0bGUgZW5kaWFuIHdlIG11c3QgcmV2ZXJzZSB0aGUgbWVhbmluZ3Mgb2YgImhpZ2giIGFuZCAibG93LiIgICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY191bnBhY2toKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3VucGFja2godmVjdG9yIGJvb2wgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3VucGFja2godmVjdG9yIHNob3J0IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzaChfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY191bnBhY2toKHZlY3RvciBib29sIHNob3J0IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2goKHZlY3RvciBzaG9ydClfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzaCgodmVjdG9yIHNob3J0KV9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY191bnBhY2toKHZlY3RvciBwaXhlbCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xweCgodmVjdG9yIHNob3J0KV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hweCgodmVjdG9yIHNob3J0KV9fYSk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfdW5wYWNraCh2ZWN0b3IgaW50IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzdyhfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY191bnBhY2toKHZlY3RvciBib29sIGludCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KCh2ZWN0b3IgaW50KV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KCh2ZWN0b3IgaW50KV9fYSk7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKiB2ZWNfdnVwa2hzYiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnVwa2hzYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192dXBraHNiKHZlY3RvciBib29sIGNoYXIgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2VuZGlmCit9CisKKy8qIHZlY192dXBraHNoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192dXBraHNoKHZlY3RvciBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzaChfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2goX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnVwa2hzaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2goKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnVwa2hzaCh2ZWN0b3IgcGl4ZWwgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtscHgoKHZlY3RvciBzaG9ydClfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtocHgoKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKKy8qIHZlY192dXBraHN3ICovCisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3Z1cGtoc3codmVjdG9yIGludCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzdyhfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdnVwa2hzdyh2ZWN0b3IgYm9vbCBpbnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzdygodmVjdG9yIGludClfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzdygodmVjdG9yIGludClfX2EpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3VucGFja2wgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haQordmVjX3VucGFja2wodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdW5wYWNrbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdW5wYWNrbCh2ZWN0b3Igc2hvcnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2goX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3VucGFja2wodmVjdG9yIGJvb2wgc2hvcnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzaCgodmVjdG9yIHNob3J0KV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3VucGFja2wodmVjdG9yIHBpeGVsIF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY191bnBhY2tsKHZlY3RvciBpbnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3VucGFja2wodmVjdG9yIGJvb2wgaW50IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192dXBrbHNiICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192dXBrbHNiKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Z1cGtsc2IodmVjdG9yIGJvb2wgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZW5kaWYKK30KKworLyogdmVjX3Z1cGtsc2ggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Z1cGtsc2godmVjdG9yIHNob3J0IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHNoKF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzaChfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY192dXBrbHNoKHZlY3RvciBib29sIHNob3J0IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2goKHZlY3RvciBzaG9ydClfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzaCgodmVjdG9yIHNob3J0KV9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192dXBrbHNoKHZlY3RvciBwaXhlbCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hweCgodmVjdG9yIHNob3J0KV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xweCgodmVjdG9yIHNob3J0KV9fYSk7CisjZW5kaWYKK30KKworLyogdmVjX3Z1cGtsc3cgKi8KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfdnVwa2xzdyh2ZWN0b3IgaW50IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzdyhfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192dXBrbHN3KHZlY3RvciBib29sIGludCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KCh2ZWN0b3IgaW50KV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KCh2ZWN0b3IgaW50KV9fYSk7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKiB2ZWNfdnN4X2xkICovCisKKyNpZmRlZiBfX1ZTWF9fCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192c3hfbGQoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciBzaWduZWQgbG9uZyBsb25nICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fdnN4X2x4dmQyeChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3ZzeF9seHZkMngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgZG91YmxlICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl92c3hfbHh2ZDJ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgZG91YmxlICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl92c3hfbHh2ZDJ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCBzaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworI2VuZGlmCisKKy8qIHZlY192c3hfc3QgKi8KKworI2lmZGVmIF9fVlNYX18KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIHNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dmQyeCgodmVjdG9yIGRvdWJsZSlfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dmQyeCgodmVjdG9yIGRvdWJsZSlfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgZG91YmxlIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dmQyeCgodmVjdG9yIGRvdWJsZSlfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgZG91YmxlIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2ZDJ4KCh2ZWN0b3IgZG91YmxlKV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworI2VuZGlmCisKKy8qIHZlY194b3IgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192eG9yIHZlY194b3IKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3Igc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSBeICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnhvciAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSBeICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSBeICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSBeICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZXh0ZW5zaW9ucyBmb3IgQ0JFQSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiB2ZWNfZXh0cmFjdCAqLworCitzdGF0aWMgX19pbmxpbmVfXyBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2V4dHJhY3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2V4dHJhY3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfZXh0cmFjdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworc3RhdGljIF9faW5saW5lX18gZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3IgZG91YmxlIF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gZmxvYXQgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCisvKiB2ZWNfaW5zZXJ0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19pbnNlcnQoc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19pbnNlcnQodW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2luc2VydCh1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MpIHsKKyAgX19iW19fY10gPSBfX2E7CisgIHJldHVybiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfaW5zZXJ0KHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLCBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfaW5zZXJ0KHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfaW5zZXJ0KHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19pbnNlcnQoc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19pbnNlcnQodW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIGludCBfX2MpIHsKKyAgX19iW19fY10gPSBfX2E7CisgIHJldHVybiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2luc2VydCh1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2luc2VydChzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2luc2VydCh1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2luc2VydCh1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iLCBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2luc2VydChkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19pbnNlcnQoZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworLyogdmVjX2x2bHggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2bHgoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBzaWduZWQgY2hhcikoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZseChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBzaWduZWQgY2hhcikoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2bHgoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZseChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2bHgoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIGJvb2wgY2hhcikoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBzaG9ydCkoMCksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3Igc2hvcnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZseChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4KGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZseChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIGJvb2wgc2hvcnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19sdmx4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBwaXhlbCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHBpeGVsKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgaW50KSgwKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2x2bHgoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgaW50KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZseChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgaW50KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2x2bHgoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgYm9vbCBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdmx4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgZmxvYXQpKDApLCB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdmx4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBmbG9hdCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIGZsb2F0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworLyogdmVjX2x2bHhsICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdmx4bChpbnQgX19hLCBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBzaWduZWQgY2hhcikoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2bHhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2bHhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgYm9vbCBjaGFyKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHNob3J0KSgwKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBzaG9ydCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4bChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgYm9vbCBzaG9ydCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgcGl4ZWwpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIGludCkoMCksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgaW50KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4bChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgaW50KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIGJvb2wgaW50KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIGZsb2F0KSgwKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBmbG9hdCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKKy8qIHZlY19sdnJ4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3Igc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2cngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3Igc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2cngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBib29sIGNoYXIpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3Igc2hvcnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLCB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHNob3J0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2cngoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZyeChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2cngoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBib29sIHNob3J0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbHZyeChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBwaXhlbCkoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGludCkoMCksIHZlY19sZChfX2EsIF9fYiksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgaW50KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGludCkoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2x2cngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGludCkoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGJvb2wgaW50KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZyeChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGZsb2F0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZyeChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgZmxvYXQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBmbG9hdCkoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKKy8qIHZlY19sdnJ4bCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgY2hhcikoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgYm9vbCBjaGFyKSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHNob3J0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3Igc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaG9ydCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgYm9vbCBzaG9ydCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19sdnJ4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHBpeGVsICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgcGl4ZWwpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGludCkoMCksIHZlY19sZGwoX19hLCBfX2IpLCB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgaW50KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgdW5zaWduZWQgaW50KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGJvb2wgaW50KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGZsb2F0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgZmxvYXQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBmbG9hdCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCisvKiB2ZWNfc3R2bHggKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLCB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCisvKiB2ZWNfc3R2bHhsICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLCB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdHZyeCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdHZyeGwgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworLyogdmVjX3Byb21vdGUgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcHJvbW90ZShzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fcmVzID0gKHZlY3RvciBzaWduZWQgY2hhcikoMCk7CisgIF9fcmVzW19fYl0gPSBfX2E7CisgIHJldHVybiBfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfcHJvbW90ZSh1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMCk7CisgIF9fcmVzW19fYl0gPSBfX2E7CisgIHJldHVybiBfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcHJvbW90ZShzaG9ydCBfX2EsIGludCBfX2IpIHsKKyAgdmVjdG9yIHNob3J0IF9fcmVzID0gKHZlY3RvciBzaG9ydCkoMCk7CisgIF9fcmVzW19fYl0gPSBfX2E7CisgIHJldHVybiBfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Byb21vdGUodW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKDApOworICBfX3Jlc1tfX2JdID0gX19hOworICByZXR1cm4gX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19wcm9tb3RlKGludCBfX2EsIGludCBfX2IpIHsKKyAgdmVjdG9yIGludCBfX3JlcyA9ICh2ZWN0b3IgaW50KSgwKTsKKyAgX19yZXNbX19iXSA9IF9fYTsKKyAgcmV0dXJuIF9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfcHJvbW90ZSh1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApOworICBfX3Jlc1tfX2JdID0gX19hOworICByZXR1cm4gX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Byb21vdGUoZmxvYXQgX19hLCBpbnQgX19iKSB7CisgIHZlY3RvciBmbG9hdCBfX3JlcyA9ICh2ZWN0b3IgZmxvYXQpKDApOworICBfX3Jlc1tfX2JdID0gX19hOworICByZXR1cm4gX19yZXM7Cit9CisKKy8qIHZlY19zcGxhdHMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3BsYXRzKHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3BsYXRzKHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyhzaG9ydCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdHModW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KShfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRzKGludCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KShfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3NwbGF0cyh1bnNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludCkoX19hKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NwbGF0cyhzaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NwbGF0cyh1bnNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoX19hKTsKK30KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfc3BsYXRzKHNpZ25lZCBfX2ludDEyOCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIF9faW50MTI4KShfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfc3BsYXRzKHVuc2lnbmVkIF9faW50MTI4IF9fYSkgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCkoX19hKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19zcGxhdHMoZG91YmxlIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKF9fYSk7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRzKGZsb2F0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBmbG9hdCkoX19hKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHJlZGljYXRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogdmVjX2FsbF9lcSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFQsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVCwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFQsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVCwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFQsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFQsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVCwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVCwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xULCBfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVCwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVCwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVCwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVCwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xULCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsIF9fYSwgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxc3BfcChfX0NSNl9MVCwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFkcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2FsbF9nZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRLCBfX2IsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9FUSwgKHZlY3RvciBzaG9ydClfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUSwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUSwgKHZlY3RvciBpbnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVEsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ2VzcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGdlZnBfcChfX0NSNl9MVCwgX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZWRwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYWxsX2d0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfTFQsIF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xULCBfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xULCBfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVCwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndHNwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0ZHBfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfaW4gKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19hbGxfaW4odmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGJmcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKKy8qIHZlY19hbGxfbGUgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9FUSwgX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVEsIF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUSwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfRVEsIF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ2VzcF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGdlZnBfcChfX0NSNl9MVCwgX19iLCBfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZWRwX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYWxsX2x0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfTFQsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xULCAodmVjdG9yIHNob3J0KV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xULCAodmVjdG9yIGludClfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVCwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0c3BfcChfX0NSNl9MVCwgX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RkcF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX2FsbF9uYW4gKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25hbih2ZWN0b3IgZmxvYXQgX19hKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxc3BfcChfX0NSNl9FUSwgX19hLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfRVEsIF9fYSwgX19hKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25hbih2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxZHBfcChfX0NSNl9FUSwgX19hLCBfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfbmUgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUSwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVEsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVEsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVEsIF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVEsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUSwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUSwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUSwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUSwgX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVEsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVEsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVEsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVEsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUSwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUSwgKHZlY3RvciBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfRVEsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfRVEsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxZHBfcChfX0NSNl9FUSwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFkcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2FsbF9uZ2UgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25nZSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlc3BfcChfX0NSNl9FUSwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25nZSh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZWRwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYWxsX25ndCAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmd0KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RzcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnBfcChfX0NSNl9FUSwgX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmd0KHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0ZHBfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfbmxlICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfYWxsX25sZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcF9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Cit9CisKKy8qIHZlY19hbGxfbmx0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfYWxsX25sdCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcF9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Cit9CisKKy8qIHZlY19hbGxfbnVtZXJpYyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FsbF9udW1lcmljKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfTFQsIF9fYSwgX19hKTsKK30KKworLyogdmVjX2FueV9lcSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRX1JFViwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUV9SRVYsIF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUV9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfRVFfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfRVFfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoCisgICAgICBfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfRVFfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxc3BfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXFmcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBlcWRwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2FueV9nZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaG9ydClfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgaW50KV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVF9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ2VzcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlZHBfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYW55X2d0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVFfUkVWLCBfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0VRX1JFViwgX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndHNwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnBfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RkcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbnlfbGUgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfTFRfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9MVF9SRVYsIF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfTFRfUkVWLCBfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFRfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfTFRfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVF9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVF9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVF9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlc3BfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZWRwX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX2FueV9sdCAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaG9ydClfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVFfUkVWLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgaW50KV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRX1JFViwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9FUV9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RzcF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0ZHBfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYW55X25hbiAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FueV9uYW4odmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxZnBfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19hKTsKK30KKworLyogdmVjX2FueV9uZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xUX1JFViwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVF9SRVYsIF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9MVF9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfTFRfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfTFRfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoCisgICAgICBfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfTFRfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxc3BfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXFmcF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBlcWRwX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2FueV9uZ2UgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19hbnlfbmdlKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKKy8qIHZlY19hbnlfbmd0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfYW55X25ndCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCisvKiB2ZWNfYW55X25sZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FueV9ubGUodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGdlZnBfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKK30KKworLyogdmVjX2FueV9ubHQgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19hbnlfbmx0KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwX3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Cit9CisKKy8qIHZlY19hbnlfbnVtZXJpYyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FueV9udW1lcmljKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYSk7Cit9CisKKy8qIHZlY19hbnlfb3V0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfYW55X291dCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wYmZwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisKKy8qIFBvd2VyIDggQ3J5cHRvIGZ1bmN0aW9ucworTm90ZTogV2UgZGl2ZXJnZSBmcm9tIHRoZSBjdXJyZW50IEdDQyBpbXBsZW1lbnRhdGlvbiB3aXRoIHJlZ2FyZAordG8gY3J5cHRvZ3JhcGh5IGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBhcyBmb2xsb3dzOgorLSBPbmx5IHRoZSBTSEEgYW5kIEFFUyBpbnN0cnVjdGlvbnMgYW5kIGJ1aWx0aW5zIGFyZSBkaXNhYmxlZCBieSAtbW5vLWNyeXB0bworLSBUaGUgcmVtYWluaW5nIG9uZXMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFBvd2VyOCBhbmQgdXAgc28KKyAgcmVxdWlyZSAtbXBvd2VyOC12ZWN0b3IKK1RoZSBqdXN0aWZpY2F0aW9uIGZvciB0aGlzIGlzIHRoYXQgZXhwb3J0IHJlcXVpcmVtZW50cyByZXF1aXJlIHRoYXQKK0NhdGVnb3J5OlZlY3Rvci5DcnlwdG8gaXMgb3B0aW9uYWwgKGkuZS4gY29tcGxpYW50IGhhcmR3YXJlIG1heSBub3QgcHJvdmlkZQorc3VwcG9ydCkuIEFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gdHVybiBvZmYgc3VwcG9ydCBmb3IgdGhvc2UuCitUaGUgcmVtYWluaW5nIG9uZXMgKGN1cnJlbnRseSBjb250cm9sbGVkIGJ5IC1tY3J5cHRvIGZvciBHQ0MpIHN0aWxsCituZWVkIHRvIGJlIHByb3ZpZGVkIG9uIGNvbXBsaWFudCBoYXJkd2FyZSBldmVuIGlmIFZlY3Rvci5DcnlwdG8gaXMgbm90Citwcm92aWRlZC4KKyovCisjaWZkZWYgX19DUllQVE9fXworI2RlZmluZSB2ZWNfc2JveF9iZSBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnNib3gKKyNkZWZpbmUgdmVjX2NpcGhlcl9iZSBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdmNpcGhlcgorI2RlZmluZSB2ZWNfY2lwaGVybGFzdF9iZSBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdmNpcGhlcmxhc3QKKyNkZWZpbmUgdmVjX25jaXBoZXJfYmUgX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZuY2lwaGVyCisjZGVmaW5lIHZlY19uY2lwaGVybGFzdF9iZSBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdm5jaXBoZXJsYXN0CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorX19idWlsdGluX2NyeXB0b192c2JveCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZzYm94KF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorX19idWlsdGluX2NyeXB0b192Y2lwaGVyKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdmNpcGhlcihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorX19idWlsdGluX2NyeXB0b192Y2lwaGVybGFzdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192Y2lwaGVybGFzdChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorX19idWlsdGluX2NyeXB0b192bmNpcGhlcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192bmNpcGhlcihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorX19idWlsdGluX2NyeXB0b192bmNpcGhlcmxhc3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZuY2lwaGVybGFzdChfX2EsIF9fYik7Cit9CisKKyNkZWZpbmUgX19idWlsdGluX2NyeXB0b192c2hhc2lnbWFkIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192c2hhc2lnbWFkCisjZGVmaW5lIF9fYnVpbHRpbl9jcnlwdG9fdnNoYXNpZ21hdyBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnNoYXNpZ21hdworCisjZGVmaW5lIHZlY19zaGFzaWdtYV9iZShYLCBZLCBaKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfR2VuZXJpYygoWCksIHZlY3RvciB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgOiBfX2J1aWx0aW5fY3J5cHRvX3ZzaGFzaWdtYXcsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgICAgICAgICAgICBcCisgICAgICAgICAgIDogX19idWlsdGluX2NyeXB0b192c2hhc2lnbWFkKSgoWCksIChZKSwgKFopKQorI2VuZGlmCisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCitfX2J1aWx0aW5fY3J5cHRvX3ZwZXJteG9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cGVybXhvcihfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQorX19idWlsdGluX2NyeXB0b192cGVybXhvcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cGVybXhvcigKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgX19idWlsdGluX2NyeXB0b192cGVybXhvcigKKyAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnBlcm14b3IoCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCitfX2J1aWx0aW5fY3J5cHRvX3ZwZXJteG9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cGVybXhvcigKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCitfX2J1aWx0aW5fY3J5cHRvX3ZwbXN1bWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cG1zdW1iKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQorX19idWlsdGluX2NyeXB0b192cG1zdW1iKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cG1zdW1oKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK19fYnVpbHRpbl9jcnlwdG9fdnBtc3VtYih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cG1zdW13KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK19fYnVpbHRpbl9jcnlwdG9fdnBtc3VtYih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZwbXN1bWQoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmdiYmQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmdiYmQoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKKyNkZWZpbmUgdmVjX3Btc3VtX2JlIF9fYnVpbHRpbl9jcnlwdG9fdnBtc3VtYgorI2RlZmluZSB2ZWNfZ2IgX19idWlsdGluX2FsdGl2ZWNfdmdiYmQKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmdiYmQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Z2JiZChfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZicGVybXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmJwZXJtcSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YnBlcm1xKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YnBlcm1xKF9fYSwgX19iKTsKK30KKworI2lmZGVmIF9fcG93ZXJwYzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2JwZXJtKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmJwZXJtcSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKyNlbmRpZgorI2VuZGlmCisKKyN1bmRlZiBfX0FUVFJTX29fYWkKKworI2VuZGlmIC8qIF9fQUxUSVZFQ19IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FtbWludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hbW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTg1YmI0Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hbW1pbnRyaW4uaApAQCAtMCwwICsxLDE5NCBAQAorLyo9PT0tLS0tIGFtbWludHJpbi5oIC0gU1NFNGEgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0FNTUlOVFJJTl9ICisjZGVmaW5lIF9fQU1NSU5UUklOX0gKKworI2luY2x1ZGUgPHBtbWludHJpbi5oPgorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInNzZTRhIikpKQorCisvLy8gXGJyaWVmIEV4dHJhY3RzIHRoZSBzcGVjaWZpZWQgYml0cyBmcm9tIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSAxMjgtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZCBhdCB0aGUgaW5kZXggaWR4IGFuZCBvZiB0aGUgbGVuZ3RoIGxlbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4aSBfbW1fZXh0cmFjdGlfc2k2NChfX20xMjhpIHgsIGNvbnN0IGludCBsZW4sIGNvbnN0IGludCBpZHgpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgRVhUUlEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0geAorLy8vICAgIFRoZSB2YWx1ZSBmcm9tIHdoaWNoIGJpdHMgYXJlIGV4dHJhY3RlZC4KKy8vLyBccGFyYW0gbGVuCisvLy8gICAgQml0cyBbNTowXSBzcGVjaWZ5IHRoZSBsZW5ndGg7IHRoZSBvdGhlciBiaXRzIGFyZSBpZ25vcmVkLiBJZiBiaXRzIFs1OjBdCisvLy8gICAgYXJlIHplcm8sIHRoZSBsZW5ndGggaXMgaW50ZXJwcmV0ZWQgYXMgNjQuCisvLy8gXHBhcmFtIGlkeAorLy8vICAgIEJpdHMgWzU6MF0gc3BlY2lmeSB0aGUgaW5kZXggb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdDsgdGhlIG90aGVyCisvLy8gICAgYml0cyBhcmUgaWdub3JlZC4gSWYgdGhlIHN1bSBvZiB0aGUgaW5kZXggYW5kIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gNjQsCisvLy8gICAgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuIElmIHRoZSBsZW5ndGggYW5kIGluZGV4IGFyZSBib3RoIHplcm8sIGJpdHMKKy8vLyAgICBbNjM6MF0gb2YgcGFyYW1ldGVyIHggYXJlIGV4dHJhY3RlZC4gSWYgdGhlIGxlbmd0aCBpcyB6ZXJvIGJ1dCB0aGUgaW5kZXgKKy8vLyAgICBpcyBub24temVybywgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIHdob3NlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUgYml0cworLy8vICAgIGV4dHJhY3RlZCBmcm9tIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKyNkZWZpbmUgX21tX2V4dHJhY3RpX3NpNjQoeCwgbGVuLCBpZHgpIFwKKyAgKChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2V4dHJxaSgoX192MmRpKShfX20xMjhpKSh4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKShsZW4pLCAoY2hhcikoaWR4KSkpCisKKy8vLyBcYnJpZWYgRXh0cmFjdHMgdGhlIHNwZWNpZmllZCBiaXRzIGZyb20gdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIDEyOC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIGF0IHRoZSBpbmRleCBhbmQgb2YgdGhlIGxlbmd0aCBzcGVjaWZpZWQgYnkgX195LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEVYVFJRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9feAorLy8vICAgIFRoZSB2YWx1ZSBmcm9tIHdoaWNoIGJpdHMgYXJlIGV4dHJhY3RlZC4KKy8vLyBccGFyYW0gX195CisvLy8gICAgU3BlY2lmaWVzIHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGF0IFsxMzo4XSBhbmQgdGhlCisvLy8gICAgbGVuZ3RoIGF0IFs1OjBdOyBhbGwgb3RoZXIgYml0cyBhcmUgaWdub3JlZC4gSWYgYml0cyBbNTowXSBhcmUgemVybywgdGhlCisvLy8gICAgbGVuZ3RoIGlzIGludGVycHJldGVkIGFzIDY0LiBJZiB0aGUgc3VtIG9mIHRoZSBpbmRleCBhbmQgbGVuZ3RoIGlzCisvLy8gICAgZ3JlYXRlciB0aGFuIDY0LCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4gSWYgdGhlIGxlbmd0aCBhbmQgaW5kZXggYXJlCisvLy8gICAgYm90aCB6ZXJvLCBiaXRzIFs2MzowXSBvZiBwYXJhbWV0ZXIgX194IGFyZSBleHRyYWN0ZWQuIElmIHRoZSBsZW5ndGggaXMKKy8vLyAgICB6ZXJvIGJ1dCB0aGUgaW5kZXggaXMgbm9uLXplcm8sIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igd2hvc2UgbG93ZXIgNjQgYml0cyBjb250YWluIHRoZSBiaXRzIGV4dHJhY3RlZAorLy8vICAgIGZyb20gdGhlIHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9leHRyYWN0X3NpNjQoX19tMTI4aSBfX3gsIF9fbTEyOGkgX195KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZXh0cnEoKF9fdjJkaSlfX3gsIChfX3YxNnFpKV9feSk7Cit9CisKKy8vLyBcYnJpZWYgSW5zZXJ0cyBiaXRzIG9mIGEgc3BlY2lmaWVkIGxlbmd0aCBmcm9tIHRoZSBzb3VyY2UgaW50ZWdlciB2ZWN0b3IgeQorLy8vICAgIGludG8gdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGludGVnZXIgdmVjdG9yIHggYXQgdGhlIGluZGV4CisvLy8gICAgaWR4IGFuZCBvZiB0aGUgbGVuZ3RoIGxlbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4aSBfbW1faW5zZXJ0aV9zaTY0KF9fbTEyOGkgeCwgX19tMTI4aSB5LCBjb25zdCBpbnQgbGVuLAorLy8vIGNvbnN0IGludCBpZHgpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgSU5TRVJUUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSB4CisvLy8gICAgVGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQgd2hlcmUgYml0cyB3aWxsIGJlIGluc2VydGVkLiBUaGUgaW5zZXJ0ZWQgYml0cworLy8vICAgIGFyZSBkZWZpbmVkIGJ5IHRoZSBsZW5ndGggbGVuIGFuZCBieSB0aGUgaW5kZXggaWR4IHNwZWNpZnlpbmcgdGhlIGxlYXN0CisvLy8gICAgc2lnbmlmaWNhbnQgYml0LgorLy8vIFxwYXJhbSB5CisvLy8gICAgVGhlIHNvdXJjZSBvcGVyYW5kIGNvbnRhaW5pbmcgdGhlIGJpdHMgdG8gYmUgZXh0cmFjdGVkLiBUaGUgZXh0cmFjdGVkCisvLy8gICAgYml0cyBhcmUgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2Ygb3BlcmFuZCB5IG9mIGxlbmd0aCBsZW4uCisvLy8gXHBhcmFtIGxlbgorLy8vICAgIEJpdHMgWzU6MF0gc3BlY2lmeSB0aGUgbGVuZ3RoOyB0aGUgb3RoZXIgYml0cyBhcmUgaWdub3JlZC4gSWYgYml0cyBbNTowXQorLy8vICAgIGFyZSB6ZXJvLCB0aGUgbGVuZ3RoIGlzIGludGVycHJldGVkIGFzIDY0LgorLy8vIFxwYXJhbSBpZHgKKy8vLyAgICBCaXRzIFs1OjBdIHNwZWNpZnkgdGhlIGluZGV4IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQ7IHRoZSBvdGhlcgorLy8vICAgIGJpdHMgYXJlIGlnbm9yZWQuIElmIHRoZSBzdW0gb2YgdGhlIGluZGV4IGFuZCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY0LAorLy8vICAgIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLiBJZiB0aGUgbGVuZ3RoIGFuZCBpbmRleCBhcmUgYm90aCB6ZXJvLCBiaXRzCisvLy8gICAgWzYzOjBdIG9mIHBhcmFtZXRlciB5IGFyZSBpbnNlcnRlZCBpbnRvIHBhcmFtZXRlciB4LiBJZiB0aGUgbGVuZ3RoIGlzCisvLy8gICAgemVybyBidXQgdGhlIGluZGV4IGlzIG5vbi16ZXJvLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgbG93ZXIgNjQtYml0cyBvZgorLy8vICAgIGRlc3RpbmF0aW9uIG9wZXJhbmQgeCB3aXRoIHRoZSBzcGVjaWZpZWQgYml0ZmllbGRzIHJlcGxhY2VkIGJ5IHRoZSBsb3dlcgorLy8vICAgIGJpdHMgb2Ygc291cmNlIG9wZXJhbmQgeS4gVGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIHJldHVybiB2YWx1ZSBhcmUKKy8vLyAgICB1bmRlZmluZWQuCisKKyNkZWZpbmUgX21tX2luc2VydGlfc2k2NCh4LCB5LCBsZW4sIGlkeCkgXAorICAoKF9fbTEyOGkpX19idWlsdGluX2lhMzJfaW5zZXJ0cWkoKF9fdjJkaSkoX19tMTI4aSkoeCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKHkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcikobGVuKSwgKGNoYXIpKGlkeCkpKQorCisvLy8gXGJyaWVmIEluc2VydHMgYml0cyBvZiBhIHNwZWNpZmllZCBsZW5ndGggZnJvbSB0aGUgc291cmNlIGludGVnZXIgdmVjdG9yCisvLy8gICAgX195IGludG8gdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGludGVnZXIgdmVjdG9yIF9feCBhdCB0aGUKKy8vLyAgICBpbmRleCBhbmQgb2YgdGhlIGxlbmd0aCBzcGVjaWZpZWQgYnkgX195LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIElOU0VSVFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX194CisvLy8gICAgVGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQgd2hlcmUgYml0cyB3aWxsIGJlIGluc2VydGVkLiBUaGUgaW5zZXJ0ZWQgYml0cworLy8vICAgIGFyZSBkZWZpbmVkIGJ5IHRoZSBsZW5ndGggYW5kIGJ5IHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisvLy8gICAgc3BlY2lmaWVkIGJ5IG9wZXJhbmQgX195LgorLy8vIFxwYXJhbSBfX3kKKy8vLyAgICBUaGUgc291cmNlIG9wZXJhbmQgY29udGFpbmluZyB0aGUgYml0cyB0byBiZSBleHRyYWN0ZWQuIFRoZSBleHRyYWN0ZWQKKy8vLyAgICBiaXRzIGFyZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBvcGVyYW5kIF9feSB3aXRoIGxlbmd0aCBzcGVjaWZpZWQKKy8vLyAgICBieSBiaXRzIFs2OTo2NF0uIFRoZXNlIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBkZXN0aW5hdGlvbiBhdCB0aGUgaW5kZXgKKy8vLyAgICBzcGVjaWZpZWQgYnkgYml0cyBbNzc6NzJdOyBhbGwgb3RoZXIgYml0cyBhcmUgaWdub3JlZC4gSWYgYml0cyBbNjk6NjRdCisvLy8gICAgYXJlIHplcm8sIHRoZSBsZW5ndGggaXMgaW50ZXJwcmV0ZWQgYXMgNjQuIElmIHRoZSBzdW0gb2YgdGhlIGluZGV4IGFuZAorLy8vICAgIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gNjQsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLiBJZiB0aGUgbGVuZ3RoIGFuZAorLy8vICAgIGluZGV4IGFyZSBib3RoIHplcm8sIGJpdHMgWzYzOjBdIG9mIHBhcmFtZXRlciBfX3kgYXJlIGluc2VydGVkIGludG8KKy8vLyAgICBwYXJhbWV0ZXIgX194LiBJZiB0aGUgbGVuZ3RoIGlzIHplcm8gYnV0IHRoZSBpbmRleCBpcyBub24temVybywgdGhlCisvLy8gICAgcmVzdWx0IGlzIHVuZGVmaW5lZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgbG93ZXIgNjQtYml0cyBvZgorLy8vICAgIGRlc3RpbmF0aW9uIG9wZXJhbmQgX194IHdpdGggdGhlIHNwZWNpZmllZCBiaXRmaWVsZHMgcmVwbGFjZWQgYnkgdGhlCisvLy8gICAgbG93ZXIgYml0cyBvZiBzb3VyY2Ugb3BlcmFuZCBfX3kuIFRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSByZXR1cm4gdmFsdWUKKy8vLyAgICBhcmUgdW5kZWZpbmVkLgorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2luc2VydF9zaTY0KF9fbTEyOGkgX194LCBfX20xMjhpIF9feSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2luc2VydHEoKF9fdjJkaSlfX3gsIChfX3YyZGkpX195KTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgYSA2NC1iaXQgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpbiBhIDY0LWJpdCBtZW1vcnkgbG9jYXRpb24uCisvLy8gICAgVG8gbWluaW1pemUgY2FjaGluZywgdGhlIGRhdGEgaXMgZmxhZ2dlZCBhcyBub24tdGVtcG9yYWwgKHVubGlrZWx5IHRvIGJlCisvLy8gICAgdXNlZCBhZ2FpbiBzb29uKS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBNT1ZOVFNEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIFRoZSA2NC1iaXQgbWVtb3J5IGxvY2F0aW9uIHVzZWQgdG8gc3RvcmUgdGhlIHJlZ2lzdGVyIHZhbHVlLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBUaGUgNjQtYml0IGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgdmFsdWUgdG8gYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdHJlYW1fc2QoZG91YmxlICpfX3AsIF9fbTEyOGQgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZudHNkKF9fcCwgKF9fdjJkZilfX2EpOworfQorCisvLy8gXGJyaWVmIFN0b3JlcyBhIDMyLWJpdCBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGluIGEgMzItYml0CisvLy8gICAgbWVtb3J5IGxvY2F0aW9uLiBUbyBtaW5pbWl6ZSBjYWNoaW5nLCB0aGUgZGF0YSBpcyBmbGFnZ2VkIGFzCisvLy8gICAgbm9uLXRlbXBvcmFsICh1bmxpa2VseSB0byBiZSB1c2VkIGFnYWluIHNvb24pLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIE1PVk5UU1MgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgVGhlIDMyLWJpdCBtZW1vcnkgbG9jYXRpb24gdXNlZCB0byBzdG9yZSB0aGUgcmVnaXN0ZXIgdmFsdWUuCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIFRoZSAzMi1iaXQgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCByZWdpc3RlciB2YWx1ZSB0byBiZSBzdG9yZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0cmVhbV9zcyhmbG9hdCAqX19wLCBfX20xMjggX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZudHNzKF9fcCwgKF9fdjRzZilfX2EpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0FNTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FybV9hY2xlLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FybV9hY2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyM2U2MgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXJtX2FjbGUuaApAQCAtMCwwICsxLDMxMiBAQAorLyo9PT0tLS0tIGFybV9hY2xlLmggLSBBUk0gTm9uLU5lb24gaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0FSTV9BQ0xFX0gKKyNkZWZpbmUgX19BUk1fQUNMRV9ICisKKyNpZm5kZWYgX19BUk1fQUNMRQorI2Vycm9yICJBQ0xFIGludHJpbnNpY3Mgc3VwcG9ydCBub3QgZW5hYmxlZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIDggU1lOQ0hST05JWkFUSU9OLCBCQVJSSUVSIEFORCBISU5UIElOVFJJTlNJQ1MgKi8KKy8qIDguMyBNZW1vcnkgYmFycmllcnMgKi8KKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgX19kbWIoaSkgX19idWlsdGluX2FybV9kbWIoaSkKKyNkZWZpbmUgX19kc2IoaSkgX19idWlsdGluX2FybV9kc2IoaSkKKyNkZWZpbmUgX19pc2IoaSkgX19idWlsdGluX2FybV9pc2IoaSkKKyNlbmRpZgorCisvKiA4LjQgSGludHMgKi8KKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKSBfX3dmaSh2b2lkKSB7CisgIF9fYnVpbHRpbl9hcm1fd2ZpKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkgX193ZmUodm9pZCkgeworICBfX2J1aWx0aW5fYXJtX3dmZSgpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpIF9fc2V2KHZvaWQpIHsKKyAgX19idWlsdGluX2FybV9zZXYoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKSBfX3Nldmwodm9pZCkgeworICBfX2J1aWx0aW5fYXJtX3NldmwoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKSBfX3lpZWxkKHZvaWQpIHsKKyAgX19idWlsdGluX2FybV95aWVsZCgpOworfQorI2VuZGlmCisKKyNpZiBfX0FSTV8zMkJJVF9TVEFURQorI2RlZmluZSBfX2RiZyh0KSBfX2J1aWx0aW5fYXJtX2RiZyh0KQorI2VuZGlmCisKKy8qIDguNSBTd2FwICovCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19zd3AodWludDMyX3QgX194LCB2b2xhdGlsZSB1aW50MzJfdCAqX19wKSB7CisgIHVpbnQzMl90IHY7CisgIGRvCisgICAgdiA9IF9fYnVpbHRpbl9hcm1fbGRyZXgoX19wKTsKKyAgd2hpbGUgKF9fYnVpbHRpbl9hcm1fc3RyZXgoX194LCBfX3ApKTsKKyAgcmV0dXJuIHY7Cit9CisKKy8qIDguNiBNZW1vcnkgcHJlZmV0Y2ggaW50cmluc2ljcyAqLworLyogOC42LjEgRGF0YSBwcmVmZXRjaCAqLworI2RlZmluZSBfX3BsZChhZGRyKSBfX3BsZHgoMCwgMCwgMCwgYWRkcikKKworI2lmIF9fQVJNXzMyQklUX1NUQVRFCisjZGVmaW5lIF9fcGxkeChhY2Nlc3Nfa2luZCwgY2FjaGVfbGV2ZWwsIHJldGVudGlvbl9wb2xpY3ksIGFkZHIpIFwKKyAgX19idWlsdGluX2FybV9wcmVmZXRjaChhZGRyLCBhY2Nlc3Nfa2luZCwgMSkKKyNlbHNlCisjZGVmaW5lIF9fcGxkeChhY2Nlc3Nfa2luZCwgY2FjaGVfbGV2ZWwsIHJldGVudGlvbl9wb2xpY3ksIGFkZHIpIFwKKyAgX19idWlsdGluX2FybV9wcmVmZXRjaChhZGRyLCBhY2Nlc3Nfa2luZCwgY2FjaGVfbGV2ZWwsIHJldGVudGlvbl9wb2xpY3ksIDEpCisjZW5kaWYKKworLyogOC42LjIgSW5zdHJ1Y3Rpb24gcHJlZmV0Y2ggKi8KKyNkZWZpbmUgX19wbGkoYWRkcikgX19wbGl4KDAsIDAsIGFkZHIpCisKKyNpZiBfX0FSTV8zMkJJVF9TVEFURQorI2RlZmluZSBfX3BsaXgoY2FjaGVfbGV2ZWwsIHJldGVudGlvbl9wb2xpY3ksIGFkZHIpIFwKKyAgX19idWlsdGluX2FybV9wcmVmZXRjaChhZGRyLCAwLCAwKQorI2Vsc2UKKyNkZWZpbmUgX19wbGl4KGNhY2hlX2xldmVsLCByZXRlbnRpb25fcG9saWN5LCBhZGRyKSBcCisgIF9fYnVpbHRpbl9hcm1fcHJlZmV0Y2goYWRkciwgMCwgY2FjaGVfbGV2ZWwsIHJldGVudGlvbl9wb2xpY3ksIDApCisjZW5kaWYKKworLyogOC43IE5PUCAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKSBfX25vcCh2b2lkKSB7CisgIF9fYnVpbHRpbl9hcm1fbm9wKCk7Cit9CisKKy8qIDkgREFUQS1QUk9DRVNTSU5HIElOVFJJTlNJQ1MgKi8KKy8qIDkuMiBNaXNjZWxsYW5lb3VzIGRhdGEtcHJvY2Vzc2luZyBpbnRyaW5zaWNzICovCisvKiBST1IgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3Jvcih1aW50MzJfdCBfX3gsIHVpbnQzMl90IF9feSkgeworICBfX3kgJT0gMzI7CisgIGlmIChfX3kgPT0gMCkKKyAgICByZXR1cm4gX194OworICByZXR1cm4gKF9feCA+PiBfX3kpIHwgKF9feCA8PCAoMzIgLSBfX3kpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcm9ybGwodWludDY0X3QgX194LCB1aW50MzJfdCBfX3kpIHsKKyAgX195ICU9IDY0OworICBpZiAoX195ID09IDApCisgICAgcmV0dXJuIF9feDsKKyAgcmV0dXJuIChfX3ggPj4gX195KSB8IChfX3ggPDwgKDY0IC0gX195KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcm9ybCh1bnNpZ25lZCBsb25nIF9feCwgdWludDMyX3QgX195KSB7CisjaWYgX19TSVpFT0ZfTE9OR19fID09IDQKKyAgcmV0dXJuIF9fcm9yKF9feCwgX195KTsKKyNlbHNlCisgIHJldHVybiBfX3JvcmxsKF9feCwgX195KTsKKyNlbmRpZgorfQorCisKKy8qIENMWiAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fY2x6KHVpbnQzMl90IF9fdCkgeworICByZXR1cm4gX19idWlsdGluX2NseihfX3QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2NsemwodW5zaWduZWQgbG9uZyBfX3QpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9jbHpsKF9fdCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQ2NF90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2NsemxsKHVpbnQ2NF90IF9fdCkgeworICByZXR1cm4gX19idWlsdGluX2NsemxsKF9fdCk7Cit9CisKKy8qIFJFViAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmV2KHVpbnQzMl90IF9fdCkgeworICByZXR1cm4gX19idWlsdGluX2Jzd2FwMzIoX190KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yZXZsKHVuc2lnbmVkIGxvbmcgX190KSB7CisjaWYgX19TSVpFT0ZfTE9OR19fID09IDQKKyAgcmV0dXJuIF9fYnVpbHRpbl9ic3dhcDMyKF9fdCk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2Jzd2FwNjQoX190KTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yZXZsbCh1aW50NjRfdCBfX3QpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9ic3dhcDY0KF9fdCk7Cit9CisKKy8qIFJFVjE2ICovCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yZXYxNih1aW50MzJfdCBfX3QpIHsKKyAgcmV0dXJuIF9fcm9yKF9fcmV2KF9fdCksIDE2KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmV2MTZsbCh1aW50NjRfdCBfX3QpIHsKKyAgcmV0dXJuICgoKHVpbnQ2NF90KV9fcmV2MTYoX190ID4+IDMyKSkgPDwgMzIpIHwgX19yZXYxNihfX3QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3JldjE2bCh1bnNpZ25lZCBsb25nIF9fdCkgeworI2lmIF9fU0laRU9GX0xPTkdfXyA9PSA0CisgICAgcmV0dXJuIF9fcmV2MTYoX190KTsKKyNlbHNlCisgICAgcmV0dXJuIF9fcmV2MTZsbChfX3QpOworI2VuZGlmCit9CisKKy8qIFJFVlNIICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQxNl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3JldnNoKGludDE2X3QgX190KSB7CisgIHJldHVybiBfX2J1aWx0aW5fYnN3YXAxNihfX3QpOworfQorCisvKiBSQklUICovCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yYml0KHVpbnQzMl90IF9fdCkgeworICByZXR1cm4gX19idWlsdGluX2FybV9yYml0KF9fdCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQ2NF90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3JiaXRsbCh1aW50NjRfdCBfX3QpIHsKKyNpZiBfX0FSTV8zMkJJVF9TVEFURQorICByZXR1cm4gKCgodWludDY0X3QpX19idWlsdGluX2FybV9yYml0KF9fdCkpIDw8IDMyKSB8CisgICAgICAgICBfX2J1aWx0aW5fYXJtX3JiaXQoX190ID4+IDMyKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3JiaXQ2NChfX3QpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmJpdGwodW5zaWduZWQgbG9uZyBfX3QpIHsKKyNpZiBfX1NJWkVPRl9MT05HX18gPT0gNAorICByZXR1cm4gX19yYml0KF9fdCk7CisjZWxzZQorICByZXR1cm4gX19yYml0bGwoX190KTsKKyNlbmRpZgorfQorCisvKgorICogOS40IFNhdHVyYXRpbmcgaW50cmluc2ljcworICoKKyAqIEZJWE1FOiBDaGFuZ2UgZ3VhcmQgdG8gdGhlaXIgY29ycm9zcG9uZGluZyBfX0FSTV9GRUFUVVJFIGZsYWcgd2hlbiBRIGZsYWcKKyAqIGludHJpbnNpY3MgYXJlIGltcGxlbWVudGVkIGFuZCB0aGUgZmxhZyBpcyBlbmFibGVkLgorICovCisvKiA5LjQuMSBXaWR0aC1zcGVjaWZpZWQgc2F0dXJhdGlvbiBpbnRyaW5zaWNzICovCisjaWYgX19BUk1fMzJCSVRfU1RBVEUKKyNkZWZpbmUgX19zc2F0KHgsIHkpIF9fYnVpbHRpbl9hcm1fc3NhdCh4LCB5KQorI2RlZmluZSBfX3VzYXQoeCwgeSkgX19idWlsdGluX2FybV91c2F0KHgsIHkpCisjZW5kaWYKKworLyogOS40LjIgU2F0dXJhdGluZyBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gaW50cmluc2ljcyAqLworI2lmIF9fQVJNXzMyQklUX1NUQVRFCitzdGF0aWMgX19pbmxpbmVfXyBpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3FhZGQoaW50MzJfdCBfX3QsIGludDMyX3QgX192KSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3FhZGQoX190LCBfX3YpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3FzdWIoaW50MzJfdCBfX3QsIGludDMyX3QgX192KSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3FzdWIoX190LCBfX3YpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3FkYmwoaW50MzJfdCBfX3QpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fcWFkZChfX3QsIF9fdCk7Cit9CisjZW5kaWYKKworLyogOS43IENSQzMyIGludHJpbnNpY3MgKi8KKyNpZiBfX0FSTV9GRUFUVVJFX0NSQzMyCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19jcmMzMmIodWludDMyX3QgX19hLCB1aW50OF90IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FybV9jcmMzMmIoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19jcmMzMmgodWludDMyX3QgX19hLCB1aW50MTZfdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fY3JjMzJoKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fY3JjMzJ3KHVpbnQzMl90IF9fYSwgdWludDMyX3QgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMydyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2NyYzMyZCh1aW50MzJfdCBfX2EsIHVpbnQ2NF90IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FybV9jcmMzMmQoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19jcmMzMmNiKHVpbnQzMl90IF9fYSwgdWludDhfdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fY3JjMzJjYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2NyYzMyY2godWludDMyX3QgX19hLCB1aW50MTZfdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fY3JjMzJjaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2NyYzMyY3codWludDMyX3QgX19hLCB1aW50MzJfdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fY3JjMzJjdyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2NyYzMyY2QodWludDMyX3QgX19hLCB1aW50NjRfdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fY3JjMzJjZChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogMTAuMSBTcGVjaWFsIHJlZ2lzdGVyIGludHJpbnNpY3MgKi8KKyNkZWZpbmUgX19hcm1fcnNyKHN5c3JlZykgX19idWlsdGluX2FybV9yc3Ioc3lzcmVnKQorI2RlZmluZSBfX2FybV9yc3I2NChzeXNyZWcpIF9fYnVpbHRpbl9hcm1fcnNyNjQoc3lzcmVnKQorI2RlZmluZSBfX2FybV9yc3JwKHN5c3JlZykgX19idWlsdGluX2FybV9yc3JwKHN5c3JlZykKKyNkZWZpbmUgX19hcm1fd3NyKHN5c3JlZywgdikgX19idWlsdGluX2FybV93c3Ioc3lzcmVnLCB2KQorI2RlZmluZSBfX2FybV93c3I2NChzeXNyZWcsIHYpIF9fYnVpbHRpbl9hcm1fd3NyNjQoc3lzcmVnLCB2KQorI2RlZmluZSBfX2FybV93c3JwKHN5c3JlZywgdikgX19idWlsdGluX2FybV93c3JwKHN5c3JlZywgdikKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVJNX0FDTEVfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hcm1fbmVvbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hcm1fbmVvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1Y2E1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FybV9uZW9uLmgKQEAgLTAsMCArMSw2OTIzMSBAQAorLyo9PT0tLS0tIGFybV9uZW9uLmggLSBBUk0gTmVvbiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0FSTV9ORU9OX0gKKyNkZWZpbmUgX19BUk1fTkVPTl9ICisKKyNpZiAhZGVmaW5lZChfX0FSTV9ORU9OKQorI2Vycm9yICJORU9OIHN1cHBvcnQgbm90IGVuYWJsZWQiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCit0eXBlZGVmIGZsb2F0IGZsb2F0MzJfdDsKK3R5cGVkZWYgX19mcDE2IGZsb2F0MTZfdDsKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiBkb3VibGUgZmxvYXQ2NF90OworI2VuZGlmCisKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiB1aW50OF90IHBvbHk4X3Q7Cit0eXBlZGVmIHVpbnQxNl90IHBvbHkxNl90OwordHlwZWRlZiB1aW50NjRfdCBwb2x5NjRfdDsKK3R5cGVkZWYgX191aW50MTI4X3QgcG9seTEyOF90OworI2Vsc2UKK3R5cGVkZWYgaW50OF90IHBvbHk4X3Q7Cit0eXBlZGVmIGludDE2X3QgcG9seTE2X3Q7CisjZW5kaWYKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg4KSkpIGludDhfdCBpbnQ4eDhfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSgxNikpKSBpbnQ4X3QgaW50OHgxNl90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgaW50MTZfdCBpbnQxNng0X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoOCkpKSBpbnQxNl90IGludDE2eDhfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSgyKSkpIGludDMyX3QgaW50MzJ4Ml90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgaW50MzJfdCBpbnQzMng0X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMSkpKSBpbnQ2NF90IGludDY0eDFfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSgyKSkpIGludDY0X3QgaW50NjR4Ml90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDgpKSkgdWludDhfdCB1aW50OHg4X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMTYpKSkgdWludDhfdCB1aW50OHgxNl90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgdWludDE2X3QgdWludDE2eDRfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg4KSkpIHVpbnQxNl90IHVpbnQxNng4X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMikpKSB1aW50MzJfdCB1aW50MzJ4Ml90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgdWludDMyX3QgdWludDMyeDRfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSgxKSkpIHVpbnQ2NF90IHVpbnQ2NHgxX3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMikpKSB1aW50NjRfdCB1aW50NjR4Ml90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgZmxvYXQxNl90IGZsb2F0MTZ4NF90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDgpKSkgZmxvYXQxNl90IGZsb2F0MTZ4OF90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDIpKSkgZmxvYXQzMl90IGZsb2F0MzJ4Ml90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgZmxvYXQzMl90IGZsb2F0MzJ4NF90OworI2lmZGVmIF9fYWFyY2g2NF9fCit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMSkpKSBmbG9hdDY0X3QgZmxvYXQ2NHgxX3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMikpKSBmbG9hdDY0X3QgZmxvYXQ2NHgyX3Q7CisjZW5kaWYKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl9wb2x5dmVjdG9yX3R5cGUoOCkpKSBwb2x5OF90IHBvbHk4eDhfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl9wb2x5dmVjdG9yX3R5cGUoMTYpKSkgcG9seThfdCBwb2x5OHgxNl90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3BvbHl2ZWN0b3JfdHlwZSg0KSkpIHBvbHkxNl90IHBvbHkxNng0X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fcG9seXZlY3Rvcl90eXBlKDgpKSkgcG9seTE2X3QgcG9seTE2eDhfdDsKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3BvbHl2ZWN0b3JfdHlwZSgxKSkpIHBvbHk2NF90IHBvbHk2NHgxX3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fcG9seXZlY3Rvcl90eXBlKDIpKSkgcG9seTY0X3QgcG9seTY0eDJfdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBpbnQ4eDh4Ml90IHsKKyAgaW50OHg4X3QgdmFsWzJdOworfSBpbnQ4eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQ4eDE2eDJfdCB7CisgIGludDh4MTZfdCB2YWxbMl07Cit9IGludDh4MTZ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQxNng0eDJfdCB7CisgIGludDE2eDRfdCB2YWxbMl07Cit9IGludDE2eDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQxNng4eDJfdCB7CisgIGludDE2eDhfdCB2YWxbMl07Cit9IGludDE2eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQzMngyeDJfdCB7CisgIGludDMyeDJfdCB2YWxbMl07Cit9IGludDMyeDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQzMng0eDJfdCB7CisgIGludDMyeDRfdCB2YWxbMl07Cit9IGludDMyeDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQ2NHgxeDJfdCB7CisgIGludDY0eDFfdCB2YWxbMl07Cit9IGludDY0eDF4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQ2NHgyeDJfdCB7CisgIGludDY0eDJfdCB2YWxbMl07Cit9IGludDY0eDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50OHg4eDJfdCB7CisgIHVpbnQ4eDhfdCB2YWxbMl07Cit9IHVpbnQ4eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50OHgxNngyX3QgeworICB1aW50OHgxNl90IHZhbFsyXTsKK30gdWludDh4MTZ4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MTZ4NHgyX3QgeworICB1aW50MTZ4NF90IHZhbFsyXTsKK30gdWludDE2eDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MTZ4OHgyX3QgeworICB1aW50MTZ4OF90IHZhbFsyXTsKK30gdWludDE2eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MzJ4MngyX3QgeworICB1aW50MzJ4Ml90IHZhbFsyXTsKK30gdWludDMyeDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MzJ4NHgyX3QgeworICB1aW50MzJ4NF90IHZhbFsyXTsKK30gdWludDMyeDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50NjR4MXgyX3QgeworICB1aW50NjR4MV90IHZhbFsyXTsKK30gdWludDY0eDF4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50NjR4MngyX3QgeworICB1aW50NjR4Ml90IHZhbFsyXTsKK30gdWludDY0eDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDE2eDR4Ml90IHsKKyAgZmxvYXQxNng0X3QgdmFsWzJdOworfSBmbG9hdDE2eDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDE2eDh4Ml90IHsKKyAgZmxvYXQxNng4X3QgdmFsWzJdOworfSBmbG9hdDE2eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDJ4Ml90IHsKKyAgZmxvYXQzMngyX3QgdmFsWzJdOworfSBmbG9hdDMyeDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDR4Ml90IHsKKyAgZmxvYXQzMng0X3QgdmFsWzJdOworfSBmbG9hdDMyeDR4Ml90OworCisjaWZkZWYgX19hYXJjaDY0X18KK3R5cGVkZWYgc3RydWN0IGZsb2F0NjR4MXgyX3QgeworICBmbG9hdDY0eDFfdCB2YWxbMl07Cit9IGZsb2F0NjR4MXgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0NjR4MngyX3QgeworICBmbG9hdDY0eDJfdCB2YWxbMl07Cit9IGZsb2F0NjR4MngyX3Q7CisKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgcG9seTh4OHgyX3QgeworICBwb2x5OHg4X3QgdmFsWzJdOworfSBwb2x5OHg4eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTh4MTZ4Ml90IHsKKyAgcG9seTh4MTZfdCB2YWxbMl07Cit9IHBvbHk4eDE2eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTE2eDR4Ml90IHsKKyAgcG9seTE2eDRfdCB2YWxbMl07Cit9IHBvbHkxNng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTE2eDh4Ml90IHsKKyAgcG9seTE2eDhfdCB2YWxbMl07Cit9IHBvbHkxNng4eDJfdDsKKworI2lmZGVmIF9fYWFyY2g2NF9fCit0eXBlZGVmIHN0cnVjdCBwb2x5NjR4MXgyX3QgeworICBwb2x5NjR4MV90IHZhbFsyXTsKK30gcG9seTY0eDF4Ml90OworCit0eXBlZGVmIHN0cnVjdCBwb2x5NjR4MngyX3QgeworICBwb2x5NjR4Ml90IHZhbFsyXTsKK30gcG9seTY0eDJ4Ml90OworCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IGludDh4OHgzX3QgeworICBpbnQ4eDhfdCB2YWxbM107Cit9IGludDh4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDh4MTZ4M190IHsKKyAgaW50OHgxNl90IHZhbFszXTsKK30gaW50OHgxNngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDE2eDR4M190IHsKKyAgaW50MTZ4NF90IHZhbFszXTsKK30gaW50MTZ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDE2eDh4M190IHsKKyAgaW50MTZ4OF90IHZhbFszXTsKK30gaW50MTZ4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDMyeDJ4M190IHsKKyAgaW50MzJ4Ml90IHZhbFszXTsKK30gaW50MzJ4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDMyeDR4M190IHsKKyAgaW50MzJ4NF90IHZhbFszXTsKK30gaW50MzJ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDY0eDF4M190IHsKKyAgaW50NjR4MV90IHZhbFszXTsKK30gaW50NjR4MXgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDY0eDJ4M190IHsKKyAgaW50NjR4Ml90IHZhbFszXTsKK30gaW50NjR4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ4eDh4M190IHsKKyAgdWludDh4OF90IHZhbFszXTsKK30gdWludDh4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ4eDE2eDNfdCB7CisgIHVpbnQ4eDE2X3QgdmFsWzNdOworfSB1aW50OHgxNngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQxNng0eDNfdCB7CisgIHVpbnQxNng0X3QgdmFsWzNdOworfSB1aW50MTZ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQxNng4eDNfdCB7CisgIHVpbnQxNng4X3QgdmFsWzNdOworfSB1aW50MTZ4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQzMngyeDNfdCB7CisgIHVpbnQzMngyX3QgdmFsWzNdOworfSB1aW50MzJ4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQzMng0eDNfdCB7CisgIHVpbnQzMng0X3QgdmFsWzNdOworfSB1aW50MzJ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ2NHgxeDNfdCB7CisgIHVpbnQ2NHgxX3QgdmFsWzNdOworfSB1aW50NjR4MXgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ2NHgyeDNfdCB7CisgIHVpbnQ2NHgyX3QgdmFsWzNdOworfSB1aW50NjR4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MTZ4NHgzX3QgeworICBmbG9hdDE2eDRfdCB2YWxbM107Cit9IGZsb2F0MTZ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MTZ4OHgzX3QgeworICBmbG9hdDE2eDhfdCB2YWxbM107Cit9IGZsb2F0MTZ4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MzJ4MngzX3QgeworICBmbG9hdDMyeDJfdCB2YWxbM107Cit9IGZsb2F0MzJ4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MzJ4NHgzX3QgeworICBmbG9hdDMyeDRfdCB2YWxbM107Cit9IGZsb2F0MzJ4NHgzX3Q7CisKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQ2NHgxeDNfdCB7CisgIGZsb2F0NjR4MV90IHZhbFszXTsKK30gZmxvYXQ2NHgxeDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQ2NHgyeDNfdCB7CisgIGZsb2F0NjR4Ml90IHZhbFszXTsKK30gZmxvYXQ2NHgyeDNfdDsKKworI2VuZGlmCit0eXBlZGVmIHN0cnVjdCBwb2x5OHg4eDNfdCB7CisgIHBvbHk4eDhfdCB2YWxbM107Cit9IHBvbHk4eDh4M190OworCit0eXBlZGVmIHN0cnVjdCBwb2x5OHgxNngzX3QgeworICBwb2x5OHgxNl90IHZhbFszXTsKK30gcG9seTh4MTZ4M190OworCit0eXBlZGVmIHN0cnVjdCBwb2x5MTZ4NHgzX3QgeworICBwb2x5MTZ4NF90IHZhbFszXTsKK30gcG9seTE2eDR4M190OworCit0eXBlZGVmIHN0cnVjdCBwb2x5MTZ4OHgzX3QgeworICBwb2x5MTZ4OF90IHZhbFszXTsKK30gcG9seTE2eDh4M190OworCisjaWZkZWYgX19hYXJjaDY0X18KK3R5cGVkZWYgc3RydWN0IHBvbHk2NHgxeDNfdCB7CisgIHBvbHk2NHgxX3QgdmFsWzNdOworfSBwb2x5NjR4MXgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHk2NHgyeDNfdCB7CisgIHBvbHk2NHgyX3QgdmFsWzNdOworfSBwb2x5NjR4MngzX3Q7CisKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgaW50OHg4eDRfdCB7CisgIGludDh4OF90IHZhbFs0XTsKK30gaW50OHg4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50OHgxNng0X3QgeworICBpbnQ4eDE2X3QgdmFsWzRdOworfSBpbnQ4eDE2eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MTZ4NHg0X3QgeworICBpbnQxNng0X3QgdmFsWzRdOworfSBpbnQxNng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MTZ4OHg0X3QgeworICBpbnQxNng4X3QgdmFsWzRdOworfSBpbnQxNng4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MzJ4Mng0X3QgeworICBpbnQzMngyX3QgdmFsWzRdOworfSBpbnQzMngyeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MzJ4NHg0X3QgeworICBpbnQzMng0X3QgdmFsWzRdOworfSBpbnQzMng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50NjR4MXg0X3QgeworICBpbnQ2NHgxX3QgdmFsWzRdOworfSBpbnQ2NHgxeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50NjR4Mng0X3QgeworICBpbnQ2NHgyX3QgdmFsWzRdOworfSBpbnQ2NHgyeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDh4OHg0X3QgeworICB1aW50OHg4X3QgdmFsWzRdOworfSB1aW50OHg4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDh4MTZ4NF90IHsKKyAgdWludDh4MTZfdCB2YWxbNF07Cit9IHVpbnQ4eDE2eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDE2eDR4NF90IHsKKyAgdWludDE2eDRfdCB2YWxbNF07Cit9IHVpbnQxNng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDE2eDh4NF90IHsKKyAgdWludDE2eDhfdCB2YWxbNF07Cit9IHVpbnQxNng4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDMyeDJ4NF90IHsKKyAgdWludDMyeDJfdCB2YWxbNF07Cit9IHVpbnQzMngyeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDMyeDR4NF90IHsKKyAgdWludDMyeDRfdCB2YWxbNF07Cit9IHVpbnQzMng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDY0eDF4NF90IHsKKyAgdWludDY0eDFfdCB2YWxbNF07Cit9IHVpbnQ2NHgxeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDY0eDJ4NF90IHsKKyAgdWludDY0eDJfdCB2YWxbNF07Cit9IHVpbnQ2NHgyeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQxNng0eDRfdCB7CisgIGZsb2F0MTZ4NF90IHZhbFs0XTsKK30gZmxvYXQxNng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQxNng4eDRfdCB7CisgIGZsb2F0MTZ4OF90IHZhbFs0XTsKK30gZmxvYXQxNng4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQzMngyeDRfdCB7CisgIGZsb2F0MzJ4Ml90IHZhbFs0XTsKK30gZmxvYXQzMngyeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQzMng0eDRfdCB7CisgIGZsb2F0MzJ4NF90IHZhbFs0XTsKK30gZmxvYXQzMng0eDRfdDsKKworI2lmZGVmIF9fYWFyY2g2NF9fCit0eXBlZGVmIHN0cnVjdCBmbG9hdDY0eDF4NF90IHsKKyAgZmxvYXQ2NHgxX3QgdmFsWzRdOworfSBmbG9hdDY0eDF4NF90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDY0eDJ4NF90IHsKKyAgZmxvYXQ2NHgyX3QgdmFsWzRdOworfSBmbG9hdDY0eDJ4NF90OworCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IHBvbHk4eDh4NF90IHsKKyAgcG9seTh4OF90IHZhbFs0XTsKK30gcG9seTh4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHk4eDE2eDRfdCB7CisgIHBvbHk4eDE2X3QgdmFsWzRdOworfSBwb2x5OHgxNng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHkxNng0eDRfdCB7CisgIHBvbHkxNng0X3QgdmFsWzRdOworfSBwb2x5MTZ4NHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHkxNng4eDRfdCB7CisgIHBvbHkxNng4X3QgdmFsWzRdOworfSBwb2x5MTZ4OHg0X3Q7CisKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiBzdHJ1Y3QgcG9seTY0eDF4NF90IHsKKyAgcG9seTY0eDFfdCB2YWxbNF07Cit9IHBvbHk2NHgxeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTY0eDJ4NF90IHsKKyAgcG9seTY0eDJfdCB2YWxbNF07Cit9IHBvbHk2NHgyeDRfdDsKKworI2VuZGlmCisKKyNkZWZpbmUgX19haSBzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZhYmRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YWJkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4MTZfdCBfX25vc3dhcF92YWJkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWJkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhYmRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92YWJkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFiZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWJkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdmFiZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmFiZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2YWJkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHgxNl90IF9fbm9zd2FwX3ZhYmRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZhYmRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2YWJkcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWJkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWJkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92YWJkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhYmRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhYmRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZhYmRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmFiZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZhYmRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92YWJkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmFiZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZhYmRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZhYmRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZhYmRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2YWJkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDRfdCBfX25vc3dhcF92YWJkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmFiZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZhYmRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdmFiZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdmFiZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2YWJkX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmFiZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZhYmRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92YWJkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2YWJkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmFiZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZhYmRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZhYnNxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmFic3FfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmFic3FfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2YWJzcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFic3FfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFic3FfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWJzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3AwLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWJzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmFic19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmFic19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19yZXYwLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZhYnNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2YWJzX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2YWJzX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZhYnNfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2YWJzX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZhYnNfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2YWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2YWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmFkZHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZhZGRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWRkcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZhZGRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2YWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2YWRkX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZhZGRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2YWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2YWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2YWRkX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2YWRkX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2YWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmFkZF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZhZGRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2YWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZhZGRobl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2YWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDRfdCBfX25vc3dhcF92YWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2YWRkaG5fdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMngyX3QgX19ub3N3YXBfdmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2YWRkaG5fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50OHg4X3QgX19ub3N3YXBfdmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmFkZGhuX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZhZGRobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92YWRkaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2YWRkaG5fczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmFkZGhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3ZhZGRobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmFkZGhuX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZhZGRobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ4eDhfdCBfX25vc3dhcF92YWRkaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZhbmRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmFuZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhbmRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhbmRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmFuZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmFuZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YW5kcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YW5kcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmFuZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZhbmRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YW5kcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhbmRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFuZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YW5kcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhbmRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFuZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2YW5kX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2YW5kX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmFuZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2YW5kX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmFuZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2YW5kX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmFuZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2YW5kX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZhbmRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmFuZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZhbmRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2YW5kX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmFuZF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZhbmRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZhbmRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2YW5kX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZiaWNxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZiaWNxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmJpY3FfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZiaWNxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZiaWNxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YmljcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YmljcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmJpY3FfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2YmljcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZiaWNxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmJpY3FfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmJpY3FfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmJpY3FfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmJpY3FfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmJpY3FfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmJpY3FfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmJpY191OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZiaWNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmJpY191MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmJpY191MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2YmljX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2YmljX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZiaWNfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZiaWNfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZiaWNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZiaWNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmJpY19zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2YmljX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZiaWNfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdmJpY19zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZiaWNfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmJpY19zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2YnNsX3A4KHVpbnQ4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSwgcG9seTh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZic2xfcDgodWludDh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxLCBwb2x5OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2YnNsX3AxNih1aW50MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSwgcG9seTE2eDRfdCBfX3AyKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2YnNsX3AxNih1aW50MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSwgcG9seTE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCA1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdmJzbHFfcDgodWludDh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEsIHBvbHk4eDE2X3QgX19wMikgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2YnNscV9wOCh1aW50OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSwgcG9seTh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2YnNscV9wMTYodWludDE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEsIHBvbHkxNng4X3QgX19wMikgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDM3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2YnNscV9wMTYodWludDE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEsIHBvbHkxNng4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDM3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmJzbHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YnNscV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YnNscV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YnNscV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmJzbHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmJzbHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZic2xxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZic2xxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZic2xxX3M4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZic2xxX3M4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2YnNscV9mMzIodWludDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZic2xxX2YzMih1aW50MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZic2xxX3MzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YnNscV9zMzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YnNscV9zNjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmJzbHFfczY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmJzbHFfczE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZic2xxX3MxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZic2xfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZic2xfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmJzbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZic2xfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmJzbF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEsIHVpbnQ2NHgxX3QgX19wMikgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZic2xfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxLCB1aW50NjR4MV90IF9fcDIpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZic2xfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2YnNsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2YnNsX3M4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2YnNsX3M4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZic2xfZjMyKHVpbnQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmJzbF9mMzIodWludDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmJzbF9zMzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZic2xfczMyKHVpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZic2xfczY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEsIGludDY0eDFfdCBfX3AyKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2YnNsX3M2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxLCBpbnQ2NHgxX3QgX19wMikgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2YnNsX3MxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmJzbF9zMTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjYWdlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjYWdlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2FnZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjYWdlX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhZ2VfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjYWd0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FndHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjYWd0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2FndF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FndF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjYWd0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhZ3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjYWxlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjYWxlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2FsZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjYWxlX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhbGVfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjYWx0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjYWx0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2FsdF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjYWx0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhbHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNlcV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2VxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2VxcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZXFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2VxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZXFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2VxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2VxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZXFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjZXFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNlcXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2VxcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2VxcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNlcXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZXFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2VxcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2VxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZXFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjZXFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNlcV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjZXFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNlcV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNlcV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNlcV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2VxX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNlcV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2VxX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2VxX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2VxX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2VxX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2dlcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZ2VxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2dlcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2dlcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZ2VxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjZ2VxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNnZXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNnZXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNnZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2dlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2dlcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNnZXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZ2VxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2dlcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2dlX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZ2VfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjZ2VfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNnZV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjZ2VfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNnZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNnZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNnZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2dlX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNnZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2dlX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2dlX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2dlX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2dlX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2d0cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNndHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNndHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2d0cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNndHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2d0cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNndHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2d0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ3RxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2d0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ3RxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjZ3RxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZ3RxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjZ3RxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNndF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZ3RfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNndF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ3RfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjZ3RfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2d0X3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjZ3RfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNndF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjZ3RfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ3RfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2d0X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ3RfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNndF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2d0X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjbGVxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNsZXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjbGVxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbGVxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNsZXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNsZXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2xlcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2xlcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2xlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbGVxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjbGVxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2xlcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNsZXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjbGVxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjbGVfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNsZV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNsZV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2xlX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNsZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2xlX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2xlX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2xlX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbGVfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2xlX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbGVfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjbGVfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjbGVfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjbGVfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmNsc3FfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNxX3YoKGludDh4MTZfdClfX3AwLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2Y2xzcV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2xzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmNsc3FfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xzcV92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmNsc3FfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2Y2xzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNxX3YoKGludDh4MTZfdClfX3AwLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2Y2xzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsc3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmNsc19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsc192KChpbnQ4eDhfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmNsc19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19yZXYwLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2Y2xzX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsc192KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjbHNfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2Y2xzX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsc192KChpbnQ4eDhfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZjbHNfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNsdHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjbHRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjbHRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNsdHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjbHRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNsdHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjbHRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNsdHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2x0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNsdHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2x0cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2x0cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2x0cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2x0cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjbHRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2x0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbHRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2x0X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2x0X3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNsdF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2x0X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjbHRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2x0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2x0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNsdF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2x0X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjbHRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNsdF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2x6cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2x6cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2x6cV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNsenFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjbHpxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2x6cV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2Y2x6cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcDAsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZjbHpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3JldjAsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2Y2x6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2Y2x6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZjbHpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcDAsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZjbHpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19yZXYwLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNsel91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2x6X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbHpfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2x6X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNsel91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjbHpfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmNsel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmNsel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19yZXYwLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2Y2x6X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjbHpfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2Y2x6X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZjbHpfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2Y250X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y250X3YoKGludDh4OF90KV9fcDAsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdmNudF9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y250X3YoKGludDh4OF90KV9fcmV2MCwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZjbnRxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19wMCwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZjbnRxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjbnRxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjbnRxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmNudHFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbnRxX3YoKGludDh4MTZfdClfX3AwLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2Y250cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19yZXYwLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNudF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNudF92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y250X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbnRfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2Y250X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y250X3YoKGludDh4OF90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2Y250X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNudF92KChpbnQ4eDhfdClfX3JldjAsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2Y29tYmluZV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2Y29tYmluZV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2Y29tYmluZV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2Y29tYmluZV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjb21iaW5lX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjb21iaW5lX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50OHgxNl90IF9fbm9zd2FwX3Zjb21iaW5lX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNvbWJpbmVfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNvbWJpbmVfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92Y29tYmluZV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjb21iaW5lX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjb21iaW5lX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y29tYmluZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y29tYmluZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3Zjb21iaW5lX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2Y29tYmluZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZjb21iaW5lX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHgxNl90IF9fbm9zd2FwX3Zjb21iaW5lX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjb21iaW5lX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Y29tYmluZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MzJ4NF90IF9fbm9zd2FwX3Zjb21iaW5lX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZjb21iaW5lX2YxNihmbG9hdDE2eDRfdCBfX3AwLCBmbG9hdDE2eDRfdCBfX3AxKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2Y29tYmluZV9mMTYoZmxvYXQxNng0X3QgX19wMCwgZmxvYXQxNng0X3QgX19wMSkgeworICBmbG9hdDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MTZ4OF90IF9fbm9zd2FwX3Zjb21iaW5lX2YxNihmbG9hdDE2eDRfdCBfX3AwLCBmbG9hdDE2eDRfdCBfX3AxKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2Y29tYmluZV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZjb21iaW5lX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdmNvbWJpbmVfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZjb21iaW5lX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmNvbWJpbmVfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmNvbWJpbmVfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2Y29tYmluZV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2Y3JlYXRlX3A4KHVpbnQ2NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdmNyZWF0ZV9wOCh1aW50NjRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZjcmVhdGVfcDE2KHVpbnQ2NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdmNyZWF0ZV9wMTYodWludDY0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNyZWF0ZV91OCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjcmVhdGVfdTgodWludDY0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y3JlYXRlX3UzMih1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjcmVhdGVfdTMyKHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y3JlYXRlX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjcmVhdGVfdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y3JlYXRlX3UxNih1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjcmVhdGVfdTE2KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmNyZWF0ZV9zOCh1aW50NjRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZjcmVhdGVfczgodWludDY0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZjcmVhdGVfZjMyKHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmNyZWF0ZV9mMzIodWludDY0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZjcmVhdGVfZjE2KHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdmNyZWF0ZV9mMTYodWludDY0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2Y3JlYXRlX3MzMih1aW50NjRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjcmVhdGVfczMyKHVpbnQ2NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2Y3JlYXRlX3M2NCh1aW50NjRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZjcmVhdGVfczY0KHVpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2Y3JlYXRlX3MxNih1aW50NjRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZjcmVhdGVfczE2KHVpbnQ2NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRxX2YzMl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjMyX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRxX2YzMl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjMyX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRxX2YzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9mMzJfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmN2dHFfZjMyX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjMyX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnRfZjMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnRfZjMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnRfZjMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX3YoKGludDh4OF90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX3YoKGludDh4OF90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0cV9uX2YzMl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fZjMyX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0cV9uX2YzMl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9mMzJfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHFfbl9mMzJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fZjMyX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0cV9uX2YzMl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fZjMyX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRfbl9mMzJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjMyX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRfbl9mMzJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9mMzJfdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0X25fZjMyX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjMyX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dF9uX2YzMl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9mMzJfdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRxX25fczMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9zMzJfdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRxX25fczMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9zMzJfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dF9uX3MzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9zMzJfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fczMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3MzMl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHFfbl91MzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fdTMyX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0cV9uX3UzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl91MzJfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dF9uX3UzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3UzMl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fdTMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fdTMyX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZjdnRxX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfczMyX3YoKGludDh4MTZfdClfX3AwLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2Y3Z0cV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9zMzJfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZjdnRfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X3MzMl92KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjdnRfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9zMzJfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmN2dHFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3UzMl92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjdnRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfdTMyX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmN2dF91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF91MzJfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjdnRfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X3UzMl92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZkdXBfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZkdXBfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdmR1cF9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2ZHVwX25fcDE2KHBvbHkxNl90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2ZHVwcV9uX3A4KHBvbHk4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdmR1cHFfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2ZHVwcV9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2ZHVwcV9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmR1cHFfbl91OCh1aW50OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZkdXBxX25fdTgodWludDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmR1cHFfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmR1cHFfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZkdXBxX25fdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkge19fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZkdXBxX25fdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2ZHVwcV9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2ZHVwcV9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2ZHVwcV9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2ZHVwcV9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2ZHVwcV9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmR1cHFfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmR1cHFfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2ZHVwcV9uX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2ZHVwcV9uX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZkdXBxX25fczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZkdXBxX25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmR1cHFfbl9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmR1cF9uX3U4KHVpbnQ4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmR1cF9uX3U4KHVpbnQ4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2ZHVwX25fdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkge19fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZkdXBfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZkdXBfbl91NjQodWludDY0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmR1cF9uX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZkdXBfbl91MTYodWludDE2X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmR1cF9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZkdXBfbl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmR1cF9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdmR1cF9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmR1cF9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkge19fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmR1cF9uX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZkdXBfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmR1cF9uX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZkdXBfbl9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZkdXBfbl9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2ZHVwX25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2ZW9ycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZlb3JxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2ZW9ycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2ZW9ycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZlb3JxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZlb3JxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmVvcnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmVvcnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZlb3JxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2ZW9ycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmVvcnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2ZW9ycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZlb3JxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmVvcnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2ZW9ycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZlb3JxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmVvcl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmVvcl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZlb3JfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmVvcl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZlb3JfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmVvcl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZlb3JfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmVvcl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2ZW9yX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZlb3JfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2ZW9yX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmVvcl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZlb3JfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2ZW9yX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2ZW9yX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmVvcl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dF9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0cV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRxX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0cV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRxX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0cV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dF91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dF9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dF9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdmdldF9oaWdoX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2Z2V0X2hpZ2hfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBwb2x5OHg4X3QgX19ub3N3YXBfdmdldF9oaWdoX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2Z2V0X2hpZ2hfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZnZXRfaGlnaF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDQsIDUsIDYsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZnZXRfaGlnaF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmdldF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZnZXRfaGlnaF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmdldF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Z2V0X2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAyLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMngyX3QgX19ub3N3YXBfdmdldF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZnZXRfaGlnaF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmdldF9oaWdoX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Z2V0X2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZnZXRfaGlnaF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDQsIDUsIDYsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDRfdCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZnZXRfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmdldF9oaWdoX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdmdldF9oaWdoX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZnZXRfaGlnaF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmdldF9oaWdoX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDMyeDJfdCBfX25vc3dhcF92Z2V0X2hpZ2hfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdmdldF9oaWdoX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2Z2V0X2hpZ2hfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MTZ4NF90IF9fbm9zd2FwX3ZnZXRfaGlnaF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmdldF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2Z2V0X2hpZ2hfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAyLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmdldF9oaWdoX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2Z2V0X2hpZ2hfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmdldF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNCwgNSwgNiwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2Z2V0X2hpZ2hfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0X2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seThfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMTYoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seThfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k4KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMzIoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kxNigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k4KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfZjMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9mMzIoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9mMzIoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMzIoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTMyKChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTMyKChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2YzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfZjMyKChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfZjMyKChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kzMigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0X2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZnZXRfbG93X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2Z2V0X2xvd19wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdmdldF9sb3dfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZnZXRfbG93X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmdldF9sb3dfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZnZXRfbG93X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Z2V0X2xvd191MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmdldF9sb3dfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmdldF9sb3dfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZnZXRfbG93X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Z2V0X2xvd191MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmdldF9sb3dfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxLCAyLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZnZXRfbG93X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2Z2V0X2xvd19zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZnZXRfbG93X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Z2V0X2xvd19mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdmdldF9sb3dfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZnZXRfbG93X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmdldF9sb3dfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZnZXRfbG93X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmdldF9sb3dfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZnZXRfbG93X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZnZXRfbG93X3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2Z2V0X2xvd19zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEsIDIsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2aGFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2aGFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZoYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2aGFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2aGFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmhhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2aGFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmhhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZoYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmhhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2aGFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZoYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmhhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmhhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZoYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZoYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmhhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmhhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmhhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmhhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2aGFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2aGFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2aGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2aGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmhzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmhzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2aHN1YnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmhzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmhzdWJxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZoc3VicV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmhzdWJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZoc3VicV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2aHN1YnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZoc3VicV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmhzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2aHN1YnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZoc3ViX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZoc3ViX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2aHN1Yl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2aHN1Yl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZoc3ViX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZoc3ViX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZoc3ViX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZoc3ViX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmhzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmhzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmhzdWJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmhzdWJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgNDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCA5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgMzcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgMzIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgOSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCBfX3AyLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCA1MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgNDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCA0MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDMzKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIHVpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCBfX3AyLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM191OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM191OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM191MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM191NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM191MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA1MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIHVpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDM3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCA0OSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCA0MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICB1aW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgaW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm1heHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZtYXhxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtYXhxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1heHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtYXhxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1heHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm1heHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bWF4cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm1heHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtYXhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtYXhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtYXhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtYXhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtYXhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZtYXhfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2bWF4X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtYXhfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2bWF4X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bWF4X3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm1heF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZtYXhfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2bWF4X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtYXhfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm1heF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtYXhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bWF4X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm1heF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtYXhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm1pbnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZtaW5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtaW5xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1pbnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtaW5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1pbnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm1pbnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bWlucV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm1pbnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtaW5xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtaW5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtaW5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtaW5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtaW5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZtaW5fdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2bWluX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtaW5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2bWluX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bWluX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm1pbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZtaW5fczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2bWluX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtaW5fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm1pbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtaW5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bWluX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm1pbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtaW5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm1sYXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2bWxhcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxhcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxhcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1sYXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1sYXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm1sYXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3Qgdm1sYXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm1sYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2bWxhcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sYXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtbGFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1sYXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtbGFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3Qgdm1sYV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2bWxhX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3Qgdm1sYV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2bWxhX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bWxhX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtbGFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2bWxhX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2bWxhX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3Qgdm1sYV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZtbGFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtbGFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZtbGFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2bWxhX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bWxhX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhcV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhcV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYXFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYXFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYXFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtbGFxX25fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAodWludDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtbGFxX25fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKHVpbnQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1sYXFfbl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqICh1aW50MTZ4OF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1sYXFfbl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAodWludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm1sYXFfbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoZmxvYXQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm1sYXFfbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoZmxvYXQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWxhcV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoaW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxhcV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIChpbnQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bWxhcV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoaW50MTZ4OF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bWxhcV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIChpbnQxNng4X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3Qgdm1sYV9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2bWxhX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm1sYV9uX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2bWxhX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtbGFfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoZmxvYXQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm1sYV9uX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIChmbG9hdDMyeDJfdCkge19fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtbGFfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKGludDMyeDJfdCkge19fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm1sYV9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2bWxhX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIChpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtbGFfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZtbHNxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3Qgdm1sc3FfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sc3FfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sc3FfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtbHNxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtbHNxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZtbHNxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZtbHNxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtbHNxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm1sc3FfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbHNxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxzcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtbHNxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bWxzcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZtbHNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3Qgdm1sc191OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtbHNfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm1sc191MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm1sc191MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2bWxzX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3Qgdm1sc19zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm1sc19zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtbHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bWxzX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bWxzX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bWxzX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm1sc19zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3Qgdm1sc19zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc19sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxzcV9uX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKHVpbnQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxzcV9uX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqICh1aW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtbHNxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAodWludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtbHNxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKHVpbnQxNng4X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtbHNxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKGZsb2F0MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtbHNxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGZsb2F0MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sc3Ffbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKGludDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sc3Ffbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAoaW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1sc3Ffbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKGludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1sc3Ffbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAoaW50MTZ4OF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtbHNfbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm1sc19uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZtbHNfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm1sc19uX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bWxzX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKGZsb2F0MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZtbHNfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAoZmxvYXQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bWxzX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZtbHNfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm1sc19uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bWxzX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZtb3Zfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZtb3Zfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3Qgdm1vdl9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2bW92X25fcDE2KHBvbHkxNl90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2bW92cV9uX3A4KHBvbHk4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3Qgdm1vdnFfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2bW92cV9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2bW92cV9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm1vdnFfbl91OCh1aW50OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZtb3ZxX25fdTgodWludDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1vdnFfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1vdnFfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtb3ZxX25fdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkge19fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtb3ZxX25fdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bW92cV9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bW92cV9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2bW92cV9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bW92cV9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2bW92cV9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm1vdnFfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bW92cV9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bW92cV9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1vdnFfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bW92cV9uX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bW92cV9uX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtb3ZxX25fczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtb3ZxX25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1vdnFfbl9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3Qgdm1vdl9uX3U4KHVpbnQ4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3Qgdm1vdl9uX3U4KHVpbnQ4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2bW92X25fdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkge19fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZtb3Zfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZtb3Zfbl91NjQodWludDY0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3Qgdm1vdl9uX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZtb3Zfbl91MTYodWludDE2X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm1vdl9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZtb3Zfbl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm1vdl9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3Qgdm1vdl9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm1vdl9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtb3Zfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkge19fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1vdl9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3Qgdm1vdl9uX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZtb3Zfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3Qgdm1vdl9uX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZtb3Zfbl9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZtb3Zfbl9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bW92X25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bW92bF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1vdmxfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdm1vdmxfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm1vdmxfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm1vdmxfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ2NHgyX3QgX19ub3N3YXBfdm1vdmxfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bW92bF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bW92bF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92bW92bF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1vdmxfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1vdmxfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcmV2MCwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3Ztb3ZsX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1vdmxfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bW92bF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19yZXYwLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm1vdmxfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtb3ZsX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1vdmxfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3Ztb3ZsX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm1vdm5fdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtb3ZuX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDRfdCBfX25vc3dhcF92bW92bl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2bW92bl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm1vdm5fdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3Ztb3ZuX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3Qgdm1vdm5fdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZtb3ZuX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92bW92bl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2bW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtb3ZuX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92bW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3Qgdm1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bW92bl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdm1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3Qgdm1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2bW92bl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdm1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm11bHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2bXVscV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm11bHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm11bHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bXVscV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bXVscV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm11bHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZtdWxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtdWxxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2bXVscV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bXVscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtdWxxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm11bHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bXVscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZtdWxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZtdWxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2bXVsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZtdWxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bXVsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtdWxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3Qgdm11bF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2bXVsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bXVsX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bXVsX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtdWxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bXVsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm11bF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtdWxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2bXVsX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdm11bF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2bXVsX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3Qgdm11bHFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdm11bHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZtdWxxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVscV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVscV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm11bHFfbl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqICh1aW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm11bHFfbl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKHVpbnQzMng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm11bHFfbl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqICh1aW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm11bHFfbl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKHVpbnQxNng4X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtdWxxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAoZmxvYXQzMng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm11bHFfbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIChmbG9hdDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtdWxxX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAoaW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bXVscV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIChpbnQzMng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bXVscV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogKGludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm11bHFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiAoaW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtdWxfbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqICh1aW50MzJ4Ml90KSB7X19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm11bF9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiAodWludDMyeDJfdCkge19fcDEsIF9fcDF9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bXVsX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAodWludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtdWxfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKHVpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtdWxfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIChmbG9hdDMyeDJfdCkge19fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bXVsX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiAoZmxvYXQzMngyX3QpIHtfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bXVsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAoaW50MzJ4Ml90KSB7X19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bXVsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKGludDMyeDJfdCkge19fcDEsIF9fcDF9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZtdWxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIChpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtdWxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiAoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZtdWxsX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZtdWxsX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAzNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBwb2x5MTZ4OF90IF9fbm9zd2FwX3ZtdWxsX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm11bGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm11bGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdm11bGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bXVsbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bXVsbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZtdWxsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92bXVsbF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm11bGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtdWxsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng4X3QgX19ub3N3YXBfdm11bGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm11bGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtdWxsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92bXVsbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bXVsbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm11bGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZtdWxsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfdTMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfdTE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtdWxsX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKHVpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtdWxsX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkodWludDMyeDJfdCkge19fcDEsIF9fcDF9LCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZtdWxsX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKHVpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkodWludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KSh1aW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdm11bGxfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkodWludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDEsIF9fcDF9LCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm11bGxfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZtdWxsX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3Qgdm12bl9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2bXZuX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZtdm5xX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZtdm5xX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZtdm5xX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZtdm5xX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtdm5xX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bXZucV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm12bnFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtdm5xX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB+X19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZtdm5xX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZtdm5xX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm12bnFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtdm5xX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB+X19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtdm5xX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bXZucV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2bXZuX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZtdm5fdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3Qgdm12bl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm12bl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm12bl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm12bl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZtdm5fczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm12bl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSB+X19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtdm5fczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZtdm5fczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm12bl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3Qgdm12bl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2bmVncV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bmVncV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAtX19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm5lZ3FfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZuZWdxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAtX19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZuZWdxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bmVncV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bmVncV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm5lZ3FfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IC1fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2bmVnX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZuZWdfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZuZWdfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZuZWdfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IC1fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3Qgdm5lZ19zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm5lZ19zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2bmVnX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bmVnX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAtX19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2b3JucV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2b3JucV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZvcm5xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2b3JucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2b3JucV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm9ybnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm9ybnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZvcm5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm9ybnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2b3JucV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZvcm5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZvcm5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZvcm5xX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZvcm5xX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZvcm5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZvcm5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZvcm5fdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2b3JuX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZvcm5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZvcm5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3Qgdm9ybl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3Qgdm9ybl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2b3JuX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2b3JuX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2b3JuX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2b3JuX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZvcm5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm9ybl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2b3JuX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZvcm5fczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2b3JuX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZvcm5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZvcnJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3Qgdm9ycnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZvcnJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZvcnJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm9ycnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm9ycnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2b3JycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2b3JycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm9ycnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZvcnJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2b3JycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZvcnJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm9ycnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2b3JycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZvcnJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm9ycnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2b3JyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2b3JyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3Qgdm9ycl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2b3JyX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3Qgdm9ycl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2b3JyX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm9ycl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2b3JyX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZvcnJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm9ycl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZvcnJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2b3JyX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3Qgdm9ycl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZvcnJfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZvcnJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2b3JyX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZwYWRhbHFfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnBhZGFscV91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZwYWRhbHFfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZwYWRhbHFfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnBhZGFscV91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnBhZGFscV91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZwYWRhbHFfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZwYWRhbHFfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZwYWRhbHFfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cGFkYWxxX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnBhZGFscV9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZwYWRhbHFfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnBhZGFsX3U4KHVpbnQxNng0X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnBhZGFsX3U4KHVpbnQxNng0X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZwYWRhbF91MzIodWludDY0eDFfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnBhZGFsX3UzMih1aW50NjR4MV90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcmV2MSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnBhZGFsX3UxNih1aW50MzJ4Ml90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cGFkYWxfdTE2KHVpbnQzMngyX3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cGFkYWxfczgoaW50MTZ4NF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cGFkYWxfczgoaW50MTZ4NF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZwYWRhbF9zMzIoaW50NjR4MV90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnBhZGFsX3MzMihpbnQ2NHgxX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cGFkYWxfczE2KGludDMyeDJfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZwYWRhbF9zMTYoaW50MzJ4Ml90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnBhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnBhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZwYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZwYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnBhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnBhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnBhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnBhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZwYWRkX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cGFkZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cGFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cGFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnBhZGRscV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19wMCwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZwYWRkbHFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cGFkZGxxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZwYWRkbHFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnBhZGRscV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cGFkZGxxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnBhZGRscV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19wMCwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnBhZGRscV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3JldjAsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cGFkZGxxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnBhZGRscV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnBhZGRscV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZwYWRkbHFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cGFkZGxfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cGFkZGxfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19yZXYwLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZwYWRkbF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnBhZGRsX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnBhZGRsX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cGFkZGxfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnBhZGRsX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZwYWRkbF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnBhZGRsX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnBhZGRsX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19yZXYwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnBhZGRsX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnBhZGRsX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cG1heF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cG1heF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnBtYXhfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnBtYXhfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cG1heF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cG1heF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cG1heF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cG1heF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnBtYXhfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZwbWF4X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZwbWF4X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZwbWF4X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZwbWF4X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZwbWF4X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZwbWluX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZwbWluX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cG1pbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cG1pbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZwbWluX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZwbWluX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZwbWluX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZwbWluX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cG1pbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnBtaW5fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnBtaW5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnBtaW5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnBtaW5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnBtaW5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnFhYnNxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcDAsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxYWJzcV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxYWJzcV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFhYnNxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxYWJzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFhYnNxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnFhYnNfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzX3YoKGludDh4OF90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cWFic19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzX3YoKGludDh4OF90KV9fcmV2MCwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFhYnNfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFic192KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZxYWJzX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFic192KChpbnQ4eDhfdClfX3JldjAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxYWJzX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFhYnNfdigoaW50OHg4X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cWFic19zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFhYnNfdigoaW50OHg4X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnFhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnFhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cWFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnFhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnFhZGRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZxYWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZxYWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cWFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cWFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWFkZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxYWRkcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cWFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZxYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cWFkZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cWFkZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnFhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnFhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cWFkZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cWFkZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZxYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZxYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnFhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cWFkZF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cWFkZF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxYWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxYWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZxYWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbWxhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtbGFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92cWRtbGFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbWxhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtbGFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWRtbGFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbGFsX3MzMihfX3MwLCBfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MzMihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sYWxfczE2KF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfczE2KF9fcmV2MCwgX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG1sYWxfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDIsIF9fcDJ9LCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtbGFsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDIsIF9fcDJ9LCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdnFkbWxhbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0sIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbWxhbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0sIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG1sYWxfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0sIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWRtbGFsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWRtbHNsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxZG1sc2xfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZxZG1sc2xfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtbHNsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG1sc2xfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxZG1sc2xfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sc2xfczMyKF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczMyKF9fcmV2MCwgX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxzbF9zMTYoX19zMCwgX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9zMTYoX19yZXYwLCBfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbWxzbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0sIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxZG1sc2xfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0sIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92cWRtbHNsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtbHNsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFkbWxzbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxZG1sc2xfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9LCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxZG11bGhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG11bGhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxZG11bGhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFkbXVsaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFkbXVsaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng4X3QgX19ub3N3YXBfdnFkbXVsaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cWRtdWxoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFkbXVsaF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3ZxZG11bGhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxZG11bGhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cWRtdWxoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdnFkbXVsaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxocV9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxocV9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsaHFfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsaHFfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsaF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsaF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtdWxocV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdCkoaW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG11bGhxX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdCkoaW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cWRtdWxocV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdCkoaW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX0sIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZxZG11bGhxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdCkoaW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX0sIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cWRtdWxoX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cWRtdWxoX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxZG11bGhfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxZG11bGhfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtdWxsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZxZG11bGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtdWxsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG11bGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdnFkbXVsbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxsX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxsX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG11bGxfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDEsIF9fcDF9LCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92cWRtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtdWxsX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFkbXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdnFkbXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZxbW92bl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZxbW92bl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4NF90IF9fbm9zd2FwX3ZxbW92bl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnFtb3ZuX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnFtb3ZuX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMngyX3QgX19ub3N3YXBfdnFtb3ZuX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxbW92bl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxbW92bl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZxbW92bl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnFtb3ZuX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxbW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZxbW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxbW92bl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cW1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92cW1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxbW92bl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cW1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ4eDhfdCBfX25vc3dhcF92cW1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZxbW92dW5fczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cW1vdnVuX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDRfdCBfX25vc3dhcF92cW1vdnVuX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cW1vdnVuX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnFtb3Z1bl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMngyX3QgX19ub3N3YXBfdnFtb3Z1bl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cW1vdnVuX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnFtb3Z1bl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50OHg4X3QgX19ub3N3YXBfdnFtb3Z1bl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnFuZWdxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcDAsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxbmVncV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxbmVncV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVncV92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFuZWdxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxbmVncV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVncV92KChpbnQ4eDE2X3QpX19wMCwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFuZWdxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnFuZWdfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnX3YoKGludDh4OF90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cW5lZ19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnX3YoKGludDh4OF90KV9fcmV2MCwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFuZWdfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ192KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZxbmVnX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ192KChpbnQ4eDhfdClfX3JldjAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxbmVnX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFuZWdfdigoaW50OHg4X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cW5lZ19zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFuZWdfdigoaW50OHg4X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cXJkbXVsaHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxcmRtdWxocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdnFyZG11bGhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxcmRtdWxocV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFyZG11bGhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92cXJkbXVsaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFyZG11bGhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFyZG11bGhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnFyZG11bGhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cXJkbXVsaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cXJkbXVsaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92cXJkbXVsaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxcmRtdWxocV9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhxX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFyZG11bGhxX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtdWxoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxcmRtdWxoX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxcmRtdWxoX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXJkbXVsaF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxcmRtdWxocV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpKGludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cXJkbXVsaHFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdCkoaW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cXJkbXVsaHFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KShpbnQxNng4X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFyZG11bGhxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpKGludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFyZG11bGhfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cXJkbXVsaF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnFyZG11bGhfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cXJkbXVsaF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxcnNobHFfdTgodWludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cXJzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZxcnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnFyc2hscV91MzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnFyc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cXJzaGxxX3U2NCh1aW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cXJzaGxxX3UxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZxcnNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnFyc2hscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnFyc2hscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFyc2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxcnNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cXJzaGxxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFyc2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxcnNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cXJzaGxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnFyc2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxcnNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cXJzaGxfdTMyKHVpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnFyc2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cXJzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnFyc2hsX3U2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnFyc2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZxcnNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxcnNobF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnFyc2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxcnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFyc2hsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cXJzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZxcnNobF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cXJzaGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxcnNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXJzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXJzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJ1bl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hydW5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZxcnNocnVuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocnVuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJ1bl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hydW5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hydW5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJ1bl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZxcnNocnVuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxc2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnFzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnFzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnFzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZxc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZxc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cXNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cXNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cXNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnFzaGxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxc2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFzaGxxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cXNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxc2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFzaGxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cXNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxc2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnFzaGxfdTgodWludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cXNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZxc2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZxc2hsX3U2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnFzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZxc2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnFzaGxfdTE2KHVpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxc2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxc2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnFzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnFzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cXNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cXNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hscV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hscV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxxX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hscV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hscV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobF9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHVxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1cV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGx1cV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsdXFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1cV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHVxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsdXFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1cV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1cV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1cV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsdV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1X25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHVfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdV9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsdV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdV9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1X25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdV9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1X25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hydW5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJ1bl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXNocnVuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJ1bl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocnVuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hydW5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocnVuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocnVuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXNocnVuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnFzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnFzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cXN1YnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnFzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnFzdWJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZxc3VicV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZxc3VicV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cXN1YnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxc3VicV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cXN1YnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFzdWJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cXN1YnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3Zxc3VicV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cXN1YnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxc3VicV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cXN1YnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3Zxc3VicV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cXN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cXN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnFzdWJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnFzdWJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cXN1Yl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cXN1Yl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZxc3ViX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZxc3ViX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxc3ViX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxc3ViX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnFzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cXN1Yl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cXN1Yl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxc3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxc3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3Zxc3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyYWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyYWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdnJhZGRobl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZyYWRkaG5fdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZyYWRkaG5fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJhZGRobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJhZGRobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdnJhZGRobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmFkZGhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmFkZGhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92cmFkZGhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJhZGRobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJhZGRobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdnJhZGRobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWNwZXFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlY3BlcV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZXFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlY3BlcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZXFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlY3BlcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVxX3YoKGludDh4MTZfdClfX3JldjAsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlY3BlX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BlX3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVjcGVfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVjcGVfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVfdigoaW50OHg4X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWNwZV9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWNwc3FfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlY3BzcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJlY3BzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlY3BzX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlY3BzX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmV2MTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJldjE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJldjE2cV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmV2MTZxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJldjE2cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmV2MTZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmV2MTZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZXYxNnFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYsIDksIDgsIDExLCAxMCwgMTMsIDEyLCAxNSwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZXYxNl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmV2MTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJldjE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZXYxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJldjMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZXYzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZXYzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJldjMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZXYzMnFfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCwgMTEsIDEwLCA5LCA4LCAxNSwgMTQsIDEzLCAxMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJldjMycV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCwgMTEsIDEwLCA5LCA4LCAxNSwgMTQsIDEzLCAxMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZXYzMnFfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZXYzMnFfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJldjMycV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0LCAxMSwgMTAsIDksIDgsIDE1LCAxNCwgMTMsIDEyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmV2MzJxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0LCAxMSwgMTAsIDksIDgsIDE1LCAxNCwgMTMsIDEyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJldjMycV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJldjMycV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZXYzMnFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQsIDExLCAxMCwgOSwgOCwgMTUsIDE0LCAxMywgMTIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJldjMycV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCwgMTEsIDEwLCA5LCA4LCAxNSwgMTQsIDEzLCAxMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJldjMycV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJldjMycV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZXYzMl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmV2MzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmV2MzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZXYzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJldjMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZXYzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJldjMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmV2MzJfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmV2NjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJldjY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJldjY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmV2NjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJldjY0cV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmV2NjRxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJldjY0cV9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJldjY0cV9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmV2NjRxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZXY2NHFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmV2NjRxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmV2NjRxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZXY2NHFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZXY2NHFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmV2NjRxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZXY2NHFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJldjY0cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJldjY0cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZXY2NHFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZXY2NHFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmV2NjRxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmV2NjRxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJldjY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZXY2NF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZXY2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJldjY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZXY2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJldjY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmV2NjRfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJldjY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZXY2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJldjY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJldjY0X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmV2NjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmV2NjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZXY2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmhhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyaGFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmhhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmhhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyaGFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyaGFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmhhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmhhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmhhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJoYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyaGFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmhhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJoYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmhhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmhhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyaGFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmhhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyaGFkZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJoYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmhhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJoYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmhhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyaGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJoYWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cnNobHFfdTgodWludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJzaGxxX3U2NCh1aW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJzaGxxX3U2NCh1aW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyc2hscV91MTYodWludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyc2hscV91MTYodWludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyc2hscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cnNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJzaGxxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cnNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyc2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJzaGxxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cnNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyc2hscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJzaGxfdTgodWludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cnNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyc2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJzaGxfdTMyKHVpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cnNobF91NjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJzaGxfdTE2KHVpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cnNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJzaGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJzaGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cnNobF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cnNobF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyc2hsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyc2hsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJxX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJxX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocnFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocnFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocnFfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hycV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocnFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hycV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocnFfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hyX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hyX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hyX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hyX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hyX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hyX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hyX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnJzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnJzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJzcXJ0ZXFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlcV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyc3FydGVxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJzcXJ0ZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlcV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cnNxcnRlcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyc3FydGVfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlX3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cnNxcnRlX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZV92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyc3FydGVfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlX3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cnNxcnRlX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyc3FydHNxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3FfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cnNxcnRzcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyc3FydHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJzcXJ0c19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c192KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFxX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFxX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFxX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhcV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYXFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFxX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyc3ViaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyc3ViaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdnJzdWJobl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cnN1YmhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cnN1YmhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3Zyc3ViaG5fdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cnN1YmhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cnN1YmhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3Zyc3ViaG5fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJzdWJobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJzdWJobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdnJzdWJobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cnN1YmhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cnN1YmhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92cnN1YmhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJzdWJobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJzdWJobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdnJzdWJobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTE2KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k4KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kxNihfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k4KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMzIoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kzMihfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTMyKF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pNjQoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kxNihfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldHFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldHFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9mMzIoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfZjMyKF9fczAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfZjMyKF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kzMihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kzMihfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMzIoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldHFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k4KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k4KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMzIoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kzMihfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTMyKF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTE2KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9mMzIoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfZjMyKF9fczAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfZjMyKF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kzMihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kzMihfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMzIoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c2hscV91MzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2c2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnNobHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c2hscV91MTYodWludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZzaGxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2c2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2c2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2c2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2c2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2c2hscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2c2hscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2c2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2c2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2c2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2c2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnNobF91NjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnNobF91NjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2c2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2c2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZzaGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2c2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2c2hsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2c2hsX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2c2hsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobHFfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxxX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobHFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hscV9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hscV9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxxX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobHFfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobHFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hscV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobHFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hscV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobHFfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobF9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsbF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzaGxsX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzaGxsX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJxX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hycV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocnFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocnFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hycV9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hycV9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hycV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocnFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hycV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocnFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hycV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocl9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hyX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hyX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hyX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hyX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocm5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpcV9uX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlxX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlxX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlxX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpcV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlxX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpcV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYXFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFxX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhcV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYXFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpcV9uX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlxX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlxX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlxX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpcV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlxX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpcV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCA1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgMzYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgMzcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMTgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDE5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMTkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAzNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCA1MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDUwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDQ5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgNDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDQwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMzMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMTkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCBfX3AyLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAzMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCA1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDM2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgNDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgNDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDQ5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgMzIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgNDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDM0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgMzMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M191OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDQ5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDQxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMzQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAxOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCA1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgNDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDUwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDQxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDQwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDM0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDE4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDQ5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDQxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgNDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAxOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnN1YnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnN1YnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnN1YnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c3VicV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2c3VicV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnN1YnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZzdWJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZzdWJxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2c3VicV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2c3VicV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZzdWJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnN1YnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2c3VicV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnN1YnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2c3ViX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2c3ViX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnN1Yl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2c3ViX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnN1Yl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2c3ViX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2c3ViX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZzdWJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnN1Yl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnN1Yl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnN1Yl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2c3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnN1Yl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZzdWJfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2c3ViX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2c3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnN1Yl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2c3ViaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnN1YmhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdnN1YmhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnN1YmhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZzdWJobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZzdWJobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnN1YmhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZzdWJobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZzdWJobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZzdWJobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2c3ViaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdnN1YmhuX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnN1YmhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZzdWJobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92c3ViaG5fczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZzdWJobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2c3ViaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdnN1YmhuX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c3VibF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF91OChfX3AwKSAtIHZtb3ZsX3U4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZzdWJsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF91OChfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfdTgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnN1YmxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfdTMyKF9fcDApIC0gdm1vdmxfdTMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZzdWJsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX3UzMihfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfdTMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzdWJsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3UxNihfX3AwKSAtIHZtb3ZsX3UxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c3VibF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF91MTYoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX3UxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZzdWJsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3M4KF9fcDApIC0gdm1vdmxfczgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2c3VibF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX3M4KF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9zOChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZzdWJsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3MzMihfX3AwKSAtIHZtb3ZsX3MzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZzdWJsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9zMzIoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX3MzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZzdWJsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3MxNihfX3AwKSAtIHZtb3ZsX3MxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZzdWJsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9zMTYoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX3MxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c3Vid191OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtb3ZsX3U4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZzdWJ3X3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX3U4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZzdWJ3X3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF91MzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnN1YndfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfdTMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzdWJ3X3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF91MTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnN1YndfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfdTE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnN1YndfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF9zOChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZzdWJ3X3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9zOChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZzdWJ3X3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF9zMzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2c3Vid19zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfczMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnN1YndfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtb3ZsX3MxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZzdWJ3X3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9zMTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dGJsMV9wOChwb2x5OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ0YmwxX3A4KHBvbHk4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnRibDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRibDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dGJsMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dGJsMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ0YmwyX3A4KHBvbHk4eDh4Ml90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMl92KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dGJsMl9wOChwb2x5OHg4eDJfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4eDJfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRibDJfdigoaW50OHg4X3QpX19yZXYwLnZhbFswXSwgKGludDh4OF90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0YmwyX3U4KHVpbnQ4eDh4Ml90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMl92KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRibDJfdTgodWludDh4OHgyX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OHgyX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwyX3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dGJsMl9zOChpbnQ4eDh4Ml90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMl92KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ0YmwyX3M4KGludDh4OHgyX3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDh4Ml90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMl92KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnRibDNfcDgocG9seTh4OHgzX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwzX3YoKGludDh4OF90KV9fcDAudmFsWzBdLCAoaW50OHg4X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDEsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnRibDNfcDgocG9seTh4OHgzX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OHgzX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsM192KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0YmwzX3U4KHVpbnQ4eDh4M190IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsM192KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dGJsM191OCh1aW50OHg4eDNfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4eDNfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwzX3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnRibDNfczgoaW50OHg4eDNfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDNfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ0YmwzX3M4KGludDh4OHgzX3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDh4M190IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDNfdigoaW50OHg4X3QpX19yZXYwLnZhbFswXSwgKGludDh4OF90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDhfdClfX3JldjAudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dGJsNF9wOChwb2x5OHg4eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRibDRfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMC52YWxbM10sIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ0Ymw0X3A4KHBvbHk4eDh4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDh4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Ymw0X3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0Ymw0X3U4KHVpbnQ4eDh4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsNF92KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AwLnZhbFszXSwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0Ymw0X3U4KHVpbnQ4eDh4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDh4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Ymw0X3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ0Ymw0X3M4KGludDh4OHg0X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Ymw0X3YoKGludDh4OF90KV9fcDAudmFsWzBdLCAoaW50OHg4X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDAudmFsWzNdLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ0Ymw0X3M4KGludDh4OHg0X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDh4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Ymw0X3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ0YngxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dGJ4MV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4MV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0YngxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRieDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dGJ4MV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnRieDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnRieDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDh4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDIsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnRieDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDh4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OHgyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngyX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dGJ4Ml91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OHgyX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngyX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMiwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRieDJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDh4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OHgyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngyX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYyLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dGJ4Ml9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDh4Ml90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dGJ4Ml9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDh4Ml90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OHgyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngyX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYyLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dGJ4M19wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OHgzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AyLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ0YngzX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4eDNfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDh4M190IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRieDNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dGJ4M191OCh1aW50OHg4X3QgX19wMCwgdWludDh4OHgzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AyLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dGJ4M191OCh1aW50OHg4X3QgX19wMCwgdWludDh4OHgzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4eDNfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngzX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MiwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnRieDNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4eDNfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDNfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEudmFsWzBdLCAoaW50OHg4X3QpX19wMS52YWxbMV0sIChpbnQ4eDhfdClfX3AxLnZhbFsyXSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dGJ4M19zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDh4M190IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OHgzX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4M192KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjIsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ0Yng0X3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4eDRfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRieDRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEudmFsWzBdLCAoaW50OHg4X3QpX19wMS52YWxbMV0sIChpbnQ4eDhfdClfX3AxLnZhbFsyXSwgKGludDh4OF90KV9fcDEudmFsWzNdLCAoaW50OHg4X3QpX19wMiwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dGJ4NF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OHg0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4eDRfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4NF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dGJ4NF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OHg0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Yng0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AxLnZhbFszXSwgKGludDh4OF90KV9fcDIsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0Yng0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4eDRfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDh4NF90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Yng0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIChpbnQ4eDhfdClfX3JldjIsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ0Yng0X3M4KGludDh4OF90IF9fcDAsIGludDh4OHg0X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Yng0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AxLnZhbFszXSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dGJ4NF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDh4NF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OHg0X3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgKGludDh4OF90KV9fcmV2MiwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4eDJfdCB2dHJuX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OHgyX3QgdnRybl9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NHgyX3QgdnRybl9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NHgyX3QgdnRybl9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA1KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNngyX3QgdnRybnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZ4Ml90IHZ0cm5xX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4eDJfdCB2dHJucV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDh4Ml90IHZ0cm5xX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM3KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNngyX3QgdnRybnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZ4Ml90IHZ0cm5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0eDJfdCB2dHJucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDR4Ml90IHZ0cm5xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OHgyX3QgdnRybnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4eDJfdCB2dHJucV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNngyX3QgdnRybnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNngyX3QgdnRybnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NHgyX3QgdnRybnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NHgyX3QgdnRybnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NHgyX3QgdnRybnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDR4Ml90IHZ0cm5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OHgyX3QgdnRybnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDh4Ml90IHZ0cm5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OHgyX3QgdnRybl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4eDJfdCB2dHJuX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4MngyX3QgdnRybl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJ4Ml90IHZ0cm5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0eDJfdCB2dHJuX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NHgyX3QgdnRybl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4eDJfdCB2dHJuX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4eDJfdCB2dHJuX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJ4Ml90IHZ0cm5fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyeDJfdCB2dHJuX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4MngyX3QgdnRybl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyeDJfdCB2dHJuX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0eDJfdCB2dHJuX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDR4Ml90IHZ0cm5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dHN0X3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRzdF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2dHN0X3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnRzdF9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnRzdHFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZ0c3RxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZ0c3RxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnRzdHFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZ0c3RxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2dHN0cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2dHN0cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZ0c3RxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2dHN0cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZ0c3RxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2dHN0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZ0c3RxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnRzdHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnRzdHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnRzdHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnRzdHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dHN0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRzdF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2dHN0X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnRzdF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnRzdF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZ0c3RfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnRzdF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dHN0X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnRzdF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2dHN0X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZ0c3RfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnRzdF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OHgyX3QgdnV6cF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDh4Ml90IHZ1enBfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDR4Ml90IHZ1enBfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDR4Ml90IHZ1enBfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZ4Ml90IHZ1enBxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2eDJfdCB2dXpwcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM2KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OHgyX3QgdnV6cHFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4eDJfdCB2dXpwcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZ4Ml90IHZ1enBxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2eDJfdCB2dXpwcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NHgyX3QgdnV6cHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0eDJfdCB2dXpwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDh4Ml90IHZ1enBxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OHgyX3QgdnV6cHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZ4Ml90IHZ1enBxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZ4Ml90IHZ1enBxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDR4Ml90IHZ1enBxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDR4Ml90IHZ1enBxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDR4Ml90IHZ1enBxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0eDJfdCB2dXpwcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDh4Ml90IHZ1enBxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4eDJfdCB2dXpwcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDh4Ml90IHZ1enBfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OHgyX3QgdnV6cF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJ4Ml90IHZ1enBfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyeDJfdCB2dXpwX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NHgyX3QgdnV6cF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDR4Ml90IHZ1enBfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OHgyX3QgdnV6cF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OHgyX3QgdnV6cF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyeDJfdCB2dXpwX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4MngyX3QgdnV6cF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJ4Ml90IHZ1enBfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4MngyX3QgdnV6cF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NHgyX3QgdnV6cF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0eDJfdCB2dXpwX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4eDJfdCB2emlwX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OHgyX3QgdnppcF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NHgyX3QgdnppcF9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NHgyX3QgdnppcF9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA1KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNngyX3QgdnppcHFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZ4Ml90IHZ6aXBxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4eDJfdCB2emlwcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDh4Ml90IHZ6aXBxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM3KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNngyX3QgdnppcHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZ4Ml90IHZ6aXBxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0eDJfdCB2emlwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDR4Ml90IHZ6aXBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OHgyX3QgdnppcHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4eDJfdCB2emlwcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNngyX3QgdnppcHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNngyX3QgdnppcHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NHgyX3QgdnppcHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NHgyX3QgdnppcHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NHgyX3QgdnppcHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDR4Ml90IHZ6aXBxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OHgyX3QgdnppcHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDh4Ml90IHZ6aXBxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OHgyX3QgdnppcF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4eDJfdCB2emlwX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4MngyX3QgdnppcF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJ4Ml90IHZ6aXBfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0eDJfdCB2emlwX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NHgyX3QgdnppcF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4eDJfdCB2emlwX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4eDJfdCB2emlwX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJ4Ml90IHZ6aXBfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyeDJfdCB2emlwX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4MngyX3QgdnppcF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyeDJfdCB2emlwX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0eDJfdCB2emlwX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDR4Ml90IHZ6aXBfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fYWFyY2g2NF9fKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91OCh1aW50OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MxNihpbnQxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91OCh1aW50OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczgoaW50OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MzMihpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91OCh1aW50OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczgoaW50OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKyNpZiAoX19BUk1fRlAgJiAyKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZjdnRfZjE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmN2dF9mMTZfZjMyKChpbnQ4eDE2X3QpX19wMCwgOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZjdnRfZjE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjE2X2YzMigoaW50OHgxNl90KV9fcmV2MCwgOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDE2eDRfdCBfX25vc3dhcF92Y3Z0X2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjE2X2YzMigoaW50OHgxNl90KV9fcDAsIDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRfZjMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dF9mMzJfZjE2KChpbnQ4eDhfdClfX3AwLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRfZjMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX2YxNigoaW50OHg4X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDMyeDRfdCBfX25vc3dhcF92Y3Z0X2YzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX2YxNigoaW50OHg4X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisjaWYgX19BUk1fQVJDSCA+PSA4CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZjdnRhcV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhcV9zMzJfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZjdnRhcV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXFfczMyX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2Y3Z0YV9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3MzMl92KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjdnRhX3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3MzMl92KChpbnQ4eDhfdClfX3JldjAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y3Z0YXFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhcV91MzJfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y3Z0YXFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXFfdTMyX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmN2dGFfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3UzMl92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmN2dGFfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YV91MzJfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmN2dG1xX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG1xX3MzMl92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmN2dG1xX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV9zMzJfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZjdnRtX3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG1fczMyX3YoKGludDh4OF90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmN2dG1fczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG1fczMyX3YoKGludDh4OF90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjdnRtcV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG1xX3UzMl92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjdnRtcV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV91MzJfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y3Z0bV91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG1fdTMyX3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y3Z0bV91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtX3UzMl92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2Y3Z0bnFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfczMyX3YoKGludDh4MTZfdClfX3AwLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2Y3Z0bnFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG5xX3MzMl92KChpbnQ4eDE2X3QpX19yZXYwLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmN2dG5fczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl9zMzJfdigoaW50OHg4X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2Y3Z0bl9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl9zMzJfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmN2dG5xX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfdTMyX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmN2dG5xX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG5xX3UzMl92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjdnRuX3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl91MzJfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjdnRuX3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG5fdTMyX3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZjdnRwcV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwcV9zMzJfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZjdnRwcV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHFfczMyX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2Y3Z0cF9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3MzMl92KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjdnRwX3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3MzMl92KChpbnQ4eDhfdClfX3JldjAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y3Z0cHFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwcV91MzJfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y3Z0cHFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHFfdTMyX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmN2dHBfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3UzMl92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmN2dHBfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cF91MzJfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNlbmRpZgorI2lmIF9fQVJNX0FSQ0ggPj0gOCAmJiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfRElSRUNURURfUk9VTkRJTkcpCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJuZHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kcV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cm5kcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cm5kX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZF92KChpbnQ4eDhfdClfX3AwLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJuZF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kX3YoKGludDh4OF90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cm5kYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kYXFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJuZGFxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cm5kYV9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhX3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cm5kYV9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kYV92KChpbnQ4eDhfdClfX3JldjAsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJuZG1xX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZG1xX3YoKGludDh4MTZfdClfX3AwLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZybmRtcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kbXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJuZG1fZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kbV92KChpbnQ4eDhfdClfX3AwLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJuZG1fZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZG1fdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZybmRucV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRucV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cm5kbnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZG5xX3YoKGludDh4MTZfdClfX3JldjAsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRuX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZG5fdigoaW50OHg4X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRuX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRuX3YoKGludDh4OF90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cm5kcHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kcHFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJuZHBxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cm5kcF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwX3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cm5kcF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kcF92KChpbnQ4eDhfdClfX3JldjAsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJuZHhxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZHhxX3YoKGludDh4MTZfdClfX3AwLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZybmR4cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5keHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJuZHhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5keF92KChpbnQ4eDhfdClfX3AwLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJuZHhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZHhfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisjaWYgX19BUk1fQVJDSCA+PSA4ICYmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9OVU1FUklDX01BWE1JTikKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2bWF4bm1xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1heG5tcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtYXhubXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtYXhubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZtYXhubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heG5tX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2bWlubm1xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1pbm5tcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtaW5ubXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtaW5ubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZtaW5ubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbm5tX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNlbmRpZgorI2lmIF9fQVJNX0FSQ0ggPj0gOCAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2Y3Z0YXFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXFfczY0X3YoKGludDh4MTZfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2Y3Z0YXFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dGFxX3M2NF92KChpbnQ4eDE2X3QpX19yZXYwLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmN2dGFfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YV9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2Y3Z0YV9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjdnRhcV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dGFxX3U2NF92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjdnRhcV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhcV91NjRfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y3Z0YV91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dGFfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y3Z0YV91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dGFfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmN2dG1xX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dG1xX3M2NF92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmN2dG1xX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV9zNjRfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZjdnRtX3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dG1fczY0X3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdmN2dG1fczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bV9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y3Z0bXFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV91NjRfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y3Z0bXFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXFfdTY0X3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmN2dG1fdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtX3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmN2dG1fdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtX3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZjdnRucV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRucV9zNjRfdigoaW50OHgxNl90KV9fcDAsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZjdnRucV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfczY0X3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2Y3Z0bl9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuX3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZjdnRuX3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dG5fczY0X3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmN2dG5xX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfdTY0X3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmN2dG5xX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dG5xX3U2NF92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjdnRuX3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjdnRuX3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2Y3Z0cHFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHFfczY0X3YoKGludDh4MTZfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2Y3Z0cHFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHBxX3M2NF92KChpbnQ4eDE2X3QpX19yZXYwLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmN2dHBfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cF9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2Y3Z0cF9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjdnRwcV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHBxX3U2NF92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjdnRwcV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwcV91NjRfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y3Z0cF91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dHBfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y3Z0cF91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dHBfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91OCh1aW50OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MxNihpbnQxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF91OCh1aW50OHg4X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczgoaW50OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczgoaW50OHgxNl90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3MxNihpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3MzMihpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF91OCh1aW50OHg4X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfczgoaW50OHg4X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3MzMihpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3MzMihpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91OCh1aW50OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczgoaW50OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91OCh1aW50OHg4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczgoaW50OHg4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNlbmRpZgorI2lmIF9fQVJNX0FSQ0ggPj0gOCAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKSAmJiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfRElSRUNURURfUk9VTkRJTkcpCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJuZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kcV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cm5kcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cm5kX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZF92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZybmRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cm5kYXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kYXFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJuZGFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cm5kYV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJuZGFfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kYV92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJuZGlxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZGlxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZybmRpcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kaXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJuZGlxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZGlxX3YoKGludDh4MTZfdClfX3AwLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZybmRpcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kaXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJuZGlfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kaV92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZybmRpX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZGlfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRpX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZGlfdigoaW50OHg4X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRpX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRpX3YoKGludDh4OF90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cm5kbXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kbXFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJuZG1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRtcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cm5kbV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRtX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJuZG1fZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kbV92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJuZG5xX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZG5xX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZybmRucV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kbnFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJuZG5fZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kbl92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZybmRuX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZG5fdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZybmRwcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwcV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cm5kcHFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZHBxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZybmRwX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZHBfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cm5kcF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cm5keHFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5keHFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJuZHhxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmR4cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cm5keF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmR4X3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJuZHhfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5keF92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKyNpZiBfX0FSTV9BUkNIID49IDggJiYgZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX05VTUVSSUNfTUFYTUlOKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtYXhubXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm1heG5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm1heG5tcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3Qgdm1heG5tX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1heG5tX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZtYXhubV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtaW5ubXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWlubm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm1pbm5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm1pbm5tcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3Qgdm1pbm5tX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1pbm5tX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZtaW5ubV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisjaWYgX19BUk1fRkVBVFVSRV9DUllQVE8KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZhZXNkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWVzZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZhZXNkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWVzZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmFlc2VxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZXNlcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmFlc2VxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZXNlcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2YWVzaW1jcV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFlc2ltY3FfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YWVzaW1jcV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFlc2ltY3FfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2YWVzbWNxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWVzbWNxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmFlc21jcV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFlc21jcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzaGExY3FfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExY3FfdTMyKChpbnQ4eDE2X3QpX19wMCwgX19wMSwgKGludDh4MTZfdClfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c2hhMWNxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMl90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMWNxX3UzMigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgKGludDh4MTZfdClfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdnNoYTFoX3UzMih1aW50MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnNoYTFoX3UzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdnNoYTFoX3UzMih1aW50MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnNoYTFoX3UzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzaGExbXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExbXFfdTMyKChpbnQ4eDE2X3QpX19wMCwgX19wMSwgKGludDh4MTZfdClfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c2hhMW1xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMl90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMW1xX3UzMigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgKGludDh4MTZfdClfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c2hhMXBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMl90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMXBxX3UzMigoaW50OHgxNl90KV9fcDAsIF9fcDEsIChpbnQ4eDE2X3QpX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNoYTFwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFwcV91MzIoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIChpbnQ4eDE2X3QpX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnNoYTFzdTBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExc3UwcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c2hhMXN1MHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFzdTBxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c2hhMXN1MXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExc3UxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNoYTFzdTFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMXN1MXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnNoYTI1NmhxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGEyNTZocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c2hhMjU2aHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTI1NmhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c2hhMjU2aDJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGEyNTZoMnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNoYTI1NmgycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2aDJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c2hhMjU2c3UwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTI1NnN1MHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzaGEyNTZzdTBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2c3UwcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c2hhMjU2c3UxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2c3UxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c2hhMjU2c3UxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2c3UxcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX0ZNQSkKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Zm1hcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Zm1hcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMng0X3QgX19ub3N3YXBfdmZtYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2Zm1hX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtYV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Zm1hX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtYV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMngyX3QgX19ub3N3YXBfdmZtYV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Zm1zcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Zm1hcV9mMzIoX19wMCwgLV9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Zm1zcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Zm1hcV9mMzIoX19yZXYwLCAtX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdmZtc19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSB2Zm1hX2YzMihfX3AwLCAtX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZmbXNfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmZtYV9mMzIoX19yZXYwLCAtX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfUVJETVgpCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxcmRtbGFocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFhZGRxX3MzMihfX3AwLCB2cXJkbXVsaHFfczMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxcmRtbGFocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRxX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cXJkbWxhaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZxYWRkcV9zMTYoX19wMCwgdnFyZG11bGhxX3MxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cXJkbWxhaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkcV9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFyZG1sYWhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IHZxYWRkX3MzMihfX3AwLCB2cXJkbXVsaF9zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFyZG1sYWhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxoX3MzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxcmRtbGFoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSB2cWFkZF9zMTYoX19wMCwgdnFyZG11bGhfczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxcmRtbGFoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZF9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFhZGRxX3MzMihfX3MwLCB2cXJkbXVsaHFfczMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxhaHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkcV9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IHZxYWRkcV9zMTYoX19zMCwgdnFyZG11bGhxX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZHFfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhxX3MxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sYWhfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxYWRkX3MzMihfX3MwLCB2cXJkbXVsaF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbGFoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZF9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWFkZF9zMTYoX19zMCwgdnFyZG11bGhfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxhaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFyZG1sc2hxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2cXN1YnFfczMyKF9fcDAsIHZxcmRtdWxocV9zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFyZG1sc2hxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1YnFfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhxX3MzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxcmRtbHNocV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFzdWJxX3MxNihfX3AwLCB2cXJkbXVsaHFfczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZxcmRtbHNocV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJxX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cXJkbWxzaF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gdnFzdWJfczMyKF9fcDAsIHZxcmRtdWxoX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cXJkbWxzaF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczMyKF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnFyZG1sc2hfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IHZxc3ViX3MxNihfX3AwLCB2cXJkbXVsaF9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnFyZG1sc2hfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zxc3ViX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxoX3MxNihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sc2hxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXN1YnFfczMyKF9fczAsIHZxcmRtdWxocV9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJxX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNocV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFzdWJxX3MxNihfX3MwLCB2cXJkbXVsaHFfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxzaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3Zxc3VicV9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxzaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFzdWJfczMyKF9fczAsIHZxcmRtdWxoX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3Zxc3ViX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxoX3MzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sc2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxc3ViX3MxNihfX3MwLCB2cXJkbXVsaF9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1Yl9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX1FSRE1YKSAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxYWRkcV9zMzIoX19zMCwgdnFyZG11bGhxX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRxX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IHZxYWRkcV9zMTYoX19zMCwgdnFyZG11bGhxX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRxX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFhZGRfczMyKF9fczAsIHZxcmRtdWxoX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZF9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFhZGRfczE2KF9fczAsIHZxcmRtdWxoX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZF9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxc3VicV9zMzIoX19zMCwgdnFyZG11bGhxX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJxX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IHZxc3VicV9zMTYoX19zMCwgdnFyZG11bGhxX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJxX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFzdWJfczMyKF9fczAsIHZxcmRtdWxoX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1Yl9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFzdWJfczE2KF9fczAsIHZxcmRtdWxoX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1Yl9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2VuZGlmCisjaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2YWJkcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmFiZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2YWJkX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2YWJkX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2YWJkZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2YWJkZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZhYmRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZhYmRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2YWJzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZhYnNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWJzcV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YWJzcV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmFic19mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2YWJzX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZhYnNfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdmFic19zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2YWJzZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2YWJzZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2YWRkcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmFkZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2YWRkX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2YWRkX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZhZGRkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2YWRkZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZhZGRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmFkZGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhZGRobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTE2KF9fcDAsIHZhZGRobl91MzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhZGRobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTE2KF9fcmV2MCwgX19ub3N3YXBfdmFkZGhuX3UzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWRkaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UzMihfX3AwLCB2YWRkaG5fdTY0KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWRkaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UzMihfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl91NjQoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmFkZGhuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3U4KF9fcDAsIHZhZGRobl91MTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZhZGRobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3U4KF9fcmV2MCwgX19ub3N3YXBfdmFkZGhuX3UxNihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhZGRobl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMTYoX19wMCwgdmFkZGhuX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWRkaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczE2KF9fcmV2MCwgX19ub3N3YXBfdmFkZGhuX3MzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhZGRobl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMzIoX19wMCwgdmFkZGhuX3M2NChfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWRkaG5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczMyKF9fcmV2MCwgX19ub3N3YXBfdmFkZGhuX3M2NChfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZhZGRobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3M4KF9fcDAsIHZhZGRobl9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmFkZGhuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zOChfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl9zMTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZhZGRsdnFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV91OCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2YWRkbHZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfdTgoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZhZGRsdnFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfdTMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZhZGRsdnFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfdTMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2YWRkbHZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3UxNigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2YWRkbHZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3UxNigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2YWRkbHZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfczgoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2YWRkbHZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV9zOCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2YWRkbHZxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3MzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZhZGRsdnFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV9zMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdmFkZGx2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV9zMTYoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2YWRkbHZxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfczE2KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2YWRkbHZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTgoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2YWRkbHZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl91OCgoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2YWRkbHZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl91MzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2YWRkbHZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl91MzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmFkZGx2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTE2KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmFkZGx2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTE2KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdmFkZGx2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3M4KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2YWRkbHZfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3M4KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmFkZGx2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfczMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2YWRkbHZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3MzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZhZGRsdl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3MxNigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdmFkZGx2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl9zMTYoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2YWRkdnFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV91OCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZhZGR2cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3U4KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2YWRkdnFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV91MzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmFkZHZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2YWRkdnFfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV91NjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmFkZHZxX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2YWRkdnFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV91MTYoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3QgdmFkZHZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTE2KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3QgdmFkZHZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczgoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZhZGR2cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczgoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2YWRkdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9mNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZhZGR2cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9mNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2YWRkdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9mMzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZhZGR2cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9mMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdmFkZHZxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdmFkZHZxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9zMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmFkZHZxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmFkZHZxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9zNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdmFkZHZxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczE2KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdmFkZHZxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9zMTYoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3QgdmFkZHZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZfdTgoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZhZGR2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZfdTgoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmFkZHZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3UzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZhZGR2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl91MzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3QgdmFkZHZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3UxNigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZhZGR2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl91MTYoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZhZGR2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3M4KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZhZGR2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zOCgoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdmFkZHZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X2YzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2YWRkdl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X2YzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZhZGR2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZhZGR2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3MzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZhZGR2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zMTYoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZhZGR2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3MxNigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZic2xfcDY0KHVpbnQ2NHgxX3QgX19wMCwgcG9seTY0eDFfdCBfX3AxLCBwb2x5NjR4MV90IF9fcDIpIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZic2xfcDY0KHVpbnQ2NHgxX3QgX19wMCwgcG9seTY0eDFfdCBfX3AxLCBwb2x5NjR4MV90IF9fcDIpIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdmJzbHFfcDY0KHVpbnQ2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxLCBwb2x5NjR4Ml90IF9fcDIpIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdmJzbHFfcDY0KHVpbnQ2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxLCBwb2x5NjR4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2YnNscV9mNjQodWludDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZic2xxX2Y2NCh1aW50NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjR4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmJzbF9mNjQodWludDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmJzbF9mNjQodWludDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjYWdlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjYWdlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2FnZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjYWdlX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNhZ2VkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZWRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2FnZWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNhZ2VzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2FnZXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2FndHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNhZ3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2FndHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FndHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNhZ3RfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNhZ3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2FndF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FndF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjYWd0ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNhZ3RkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNhZ3RkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FndGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjYWd0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNhZ3RzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNhZ3RzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FndHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNhbGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNhbGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNhbGVxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjYWxlX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNhbGVfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNhbGVfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2FsZWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjYWxlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNhbGVkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2FsZXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjYWxlc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNhbGVzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjYWx0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjYWx0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2FsdF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjYWx0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNhbHRkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2FsdGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0ZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNhbHRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2FsdHNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0c19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2VxX3A2NChwb2x5NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZXFfcDY0KHBvbHk2NHgxX3QgX19wMCwgcG9seTY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2VxcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2VxcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZXFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZXFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2VxcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2VxcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZXFfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNlcV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZXFfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2VxX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2VxX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2VxX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2VxZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNlcWRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y2VxZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcWRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjZXFkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNlcWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNlcWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2Vxc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNlcXNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2Vxc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNlcXNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2Vxel9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNlcXpfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZXF6X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZXF6X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNlcXpfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNlcXpfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXpxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2VxenFfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZXF6cV9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZXF6cV9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZXF6cV9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjZXF6cV9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjZXF6cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXpxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2VxenFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2VxenFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2VxenFfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2VxenFfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2VxenFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2VxenFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2VxenFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZXF6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNlcXpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjZXF6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNlcXpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2VxenFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2VxenFfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNlcXpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2VxenFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2Vxel91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNlcXpfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjZXF6X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZXF6X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZXF6X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZXF6X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNlcXpfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNlcXpfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2Vxel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2Vxel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZXF6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2Vxel9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2Vxel9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNlcXpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2Vxel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZXF6X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2Vxel9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZXF6X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2Vxel9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjZXF6X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNlcXpkX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcXpkX3U2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNlcXpkX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcXpkX3U2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjZXF6ZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmNlcXpkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcXpkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2VxemRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcXpkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNlcXpkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNlcXpzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6c19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjZXF6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNnZXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNnZXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2dlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZ2VxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ2VxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2dlcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNnZV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2dlX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNnZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZ2VfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZ2VfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZ2VfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmNnZWRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y2dlZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZWRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjZ2VkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZWRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2dlZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2dlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZWRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2dlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZWRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjZ2VzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2dlc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjZ2VzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2dlc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2dlenFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNnZXpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNnZXpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZ2V6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNnZXpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjZ2V6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNnZXpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2dlenFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNnZXpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2dlenFfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNnZXpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2dlenFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2dlel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2dlel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZ2V6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2dlel9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2dlel9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNnZXpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2dlel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ2V6X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2dlel9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZ2V6X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2dlel9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjZ2V6X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y2dlemRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlemRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjZ2V6ZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6ZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNnZXpkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjZ2V6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlemRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjZ2V6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2dlenNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNnZXpzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ3RxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNndHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ3RxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2d0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ3RxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZ3RxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZ3RfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2d0X3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2d0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2d0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZ3RfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNndF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjZ3RkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmNndGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2d0ZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNndGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNndGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNndGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2d0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNndHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2d0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNndHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNndHpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZ3R6cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ3R6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2d0enFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ3R6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2d0enFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ3R6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNndHpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNndHpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ3R6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNndHpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNndHpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZ3R6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNndHpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNndHpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNndHpfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNndHpfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2d0el9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNndHpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNndHpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ3R6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNndHpfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2d0el9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNndHpfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2d0el9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNndHpfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2d0el9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmNndHpkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNndHpkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y2d0emRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0emRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjZ3R6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0emRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2d0emRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNndHpkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2d0enNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNndHpzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNndHpzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6c19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2xlcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2xlcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjbGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNsZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsZXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjbGVxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2xlX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbGVfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2xlX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNsZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNsZV9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNsZV9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNsZWRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjbGVkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZWRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmNsZWRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGVkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y2xlZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZWRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjbGVkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjbGVkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNsZXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGVzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNsZXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGVzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjbGV6cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2xlenFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2xlenFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNsZXpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2xlenFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNsZXpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2xlenFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbGV6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2xlenFfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjbGV6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2xlenFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6cV92KChpbnQ4eDE2X3QpX19wMCwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjbGV6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjbGV6X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjbGV6X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3JldjAsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNsZXpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbGV6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbGV6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2xlel9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbGV6X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNsZXpfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjbGV6X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNsZXpfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjbGV6X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNsZXpfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19yZXYwLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjbGV6ZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6ZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmNsZXpkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZXpkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2xlemRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZXpkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNsZXpkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNsZXpzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6c19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjbGV6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2x0cV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjbHRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNsdF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbHRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjbHRfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbHRfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNsdF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2x0X3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjbHRkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2x0ZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHRkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjbHRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0ZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmNsdGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHRkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2x0ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2x0ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjbHRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2x0c19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjbHRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2x0c19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2x0enFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNsdHpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjbHR6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNsdHpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbHR6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNsdHpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2x0enFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2x0enFfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNsdHpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2x0enFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2x0el9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2x0el9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjbHR6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2x0el9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2x0el9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNsdHpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2x0el9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjbHR6X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2x0el9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbHR6X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2x0el9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjbHR6X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y2x0emRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0emRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjbHR6ZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6ZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNsdHpkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjbHR6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0emRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjbHR6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2x0enNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNsdHpzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZjb21iaW5lX3A2NChwb2x5NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZjb21iaW5lX3A2NChwb2x5NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmNvbWJpbmVfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZjb21iaW5lX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfcDgoX19wMF8wLCBfX3AxXzAsIF9fcDJfMCwgX19wM18wKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwXzAgPSBfX3AwXzA7IFwKKyAgcG9seTh4OF90IF9fczJfMCA9IF9fcDJfMDsgXAorICBwb2x5OHgxNl90IF9fcmV0XzA7IFwKKyAgX19yZXRfMCA9IHZzZXRxX2xhbmVfcDgodmdldF9sYW5lX3A4KF9fczJfMCwgX19wM18wKSwgX19zMF8wLCBfX3AxXzApOyBcCisgIF9fcmV0XzA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZV9wOChfX3AwXzEsIF9fcDFfMSwgX19wMl8xLCBfX3AzXzEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczBfMSA9IF9fcDBfMTsgXAorICBwb2x5OHg4X3QgX19zMl8xID0gX19wMl8xOyBcCisgIHBvbHk4eDE2X3QgX19yZXYwXzE7ICBfX3JldjBfMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMSwgX19zMF8xLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXYyXzE7ICBfX3JldjJfMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMSwgX19zMl8xLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0XzE7IFwKKyAgX19yZXRfMSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfcDgoX19ub3N3YXBfdmdldF9sYW5lX3A4KF9fcmV2Ml8xLCBfX3AzXzEpLCBfX3JldjBfMSwgX19wMV8xKTsgXAorICBfX3JldF8xID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMSwgX19yZXRfMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfcDE2KF9fcDBfMiwgX19wMV8yLCBfX3AyXzIsIF9fcDNfMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMF8yID0gX19wMF8yOyBcCisgIHBvbHkxNng0X3QgX19zMl8yID0gX19wMl8yOyBcCisgIHBvbHkxNng4X3QgX19yZXRfMjsgXAorICBfX3JldF8yID0gdnNldHFfbGFuZV9wMTYodmdldF9sYW5lX3AxNihfX3MyXzIsIF9fcDNfMiksIF9fczBfMiwgX19wMV8yKTsgXAorICBfX3JldF8yOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfcDE2KF9fcDBfMywgX19wMV8zLCBfX3AyXzMsIF9fcDNfMykgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMF8zID0gX19wMF8zOyBcCisgIHBvbHkxNng0X3QgX19zMl8zID0gX19wMl8zOyBcCisgIHBvbHkxNng4X3QgX19yZXYwXzM7ICBfX3JldjBfMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMywgX19zMF8zLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV2Ml8zOyAgX19yZXYyXzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzMsIF9fczJfMywgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldF8zOyBcCisgIF9fcmV0XzMgPSBfX25vc3dhcF92c2V0cV9sYW5lX3AxNihfX25vc3dhcF92Z2V0X2xhbmVfcDE2KF9fcmV2Ml8zLCBfX3AzXzMpLCBfX3JldjBfMywgX19wMV8zKTsgXAorICBfX3JldF8zID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMywgX19yZXRfMywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTgoX19wMF80LCBfX3AxXzQsIF9fcDJfNCwgX19wM180KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwXzQgPSBfX3AwXzQ7IFwKKyAgdWludDh4OF90IF9fczJfNCA9IF9fcDJfNDsgXAorICB1aW50OHgxNl90IF9fcmV0XzQ7IFwKKyAgX19yZXRfNCA9IHZzZXRxX2xhbmVfdTgodmdldF9sYW5lX3U4KF9fczJfNCwgX19wM180KSwgX19zMF80LCBfX3AxXzQpOyBcCisgIF9fcmV0XzQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZV91OChfX3AwXzUsIF9fcDFfNSwgX19wMl81LCBfX3AzXzUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczBfNSA9IF9fcDBfNTsgXAorICB1aW50OHg4X3QgX19zMl81ID0gX19wMl81OyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwXzU7ICBfX3JldjBfNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNSwgX19zMF81LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXYyXzU7ICBfX3JldjJfNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNSwgX19zMl81LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0XzU7IFwKKyAgX19yZXRfNSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfdTgoX19ub3N3YXBfdmdldF9sYW5lX3U4KF9fcmV2Ml81LCBfX3AzXzUpLCBfX3JldjBfNSwgX19wMV81KTsgXAorICBfX3JldF81ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNSwgX19yZXRfNSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTMyKF9fcDBfNiwgX19wMV82LCBfX3AyXzYsIF9fcDNfNikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMF82ID0gX19wMF82OyBcCisgIHVpbnQzMngyX3QgX19zMl82ID0gX19wMl82OyBcCisgIHVpbnQzMng0X3QgX19yZXRfNjsgXAorICBfX3JldF82ID0gdnNldHFfbGFuZV91MzIodmdldF9sYW5lX3UzMihfX3MyXzYsIF9fcDNfNiksIF9fczBfNiwgX19wMV82KTsgXAorICBfX3JldF82OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTMyKF9fcDBfNywgX19wMV83LCBfX3AyXzcsIF9fcDNfNykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMF83ID0gX19wMF83OyBcCisgIHVpbnQzMngyX3QgX19zMl83ID0gX19wMl83OyBcCisgIHVpbnQzMng0X3QgX19yZXYwXzc7ICBfX3JldjBfNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNywgX19zMF83LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2Ml83OyAgX19yZXYyXzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzcsIF9fczJfNywgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldF83OyBcCisgIF9fcmV0XzcgPSBfX25vc3dhcF92c2V0cV9sYW5lX3UzMihfX25vc3dhcF92Z2V0X2xhbmVfdTMyKF9fcmV2Ml83LCBfX3AzXzcpLCBfX3JldjBfNywgX19wMV83KTsgXAorICBfX3JldF83ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNywgX19yZXRfNywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTY0KF9fcDBfOCwgX19wMV84LCBfX3AyXzgsIF9fcDNfOCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMF84ID0gX19wMF84OyBcCisgIHVpbnQ2NHgxX3QgX19zMl84ID0gX19wMl84OyBcCisgIHVpbnQ2NHgyX3QgX19yZXRfODsgXAorICBfX3JldF84ID0gdnNldHFfbGFuZV91NjQodmdldF9sYW5lX3U2NChfX3MyXzgsIF9fcDNfOCksIF9fczBfOCwgX19wMV84KTsgXAorICBfX3JldF84OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTY0KF9fcDBfOSwgX19wMV85LCBfX3AyXzksIF9fcDNfOSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMF85ID0gX19wMF85OyBcCisgIHVpbnQ2NHgxX3QgX19zMl85ID0gX19wMl85OyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwXzk7ICBfX3JldjBfOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfOSwgX19zMF85LCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0Xzk7IFwKKyAgX19yZXRfOSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfdTY0KF9fbm9zd2FwX3ZnZXRfbGFuZV91NjQoX19zMl85LCBfX3AzXzkpLCBfX3JldjBfOSwgX19wMV85KTsgXAorICBfX3JldF85ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfOSwgX19yZXRfOSwgMSwgMCk7IFwKKyAgX19yZXRfOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTE2KF9fcDBfMTAsIF9fcDFfMTAsIF9fcDJfMTAsIF9fcDNfMTApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczBfMTAgPSBfX3AwXzEwOyBcCisgIHVpbnQxNng0X3QgX19zMl8xMCA9IF9fcDJfMTA7IFwKKyAgdWludDE2eDhfdCBfX3JldF8xMDsgXAorICBfX3JldF8xMCA9IHZzZXRxX2xhbmVfdTE2KHZnZXRfbGFuZV91MTYoX19zMl8xMCwgX19wM18xMCksIF9fczBfMTAsIF9fcDFfMTApOyBcCisgIF9fcmV0XzEwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTE2KF9fcDBfMTEsIF9fcDFfMTEsIF9fcDJfMTEsIF9fcDNfMTEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczBfMTEgPSBfX3AwXzExOyBcCisgIHVpbnQxNng0X3QgX19zMl8xMSA9IF9fcDJfMTE7IFwKKyAgdWludDE2eDhfdCBfX3JldjBfMTE7ICBfX3JldjBfMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzExLCBfX3MwXzExLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2Ml8xMTsgIF9fcmV2Ml8xMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTEsIF9fczJfMTEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXRfMTE7IFwKKyAgX19yZXRfMTEgPSBfX25vc3dhcF92c2V0cV9sYW5lX3UxNihfX25vc3dhcF92Z2V0X2xhbmVfdTE2KF9fcmV2Ml8xMSwgX19wM18xMSksIF9fcmV2MF8xMSwgX19wMV8xMSk7IFwKKyAgX19yZXRfMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMSwgX19yZXRfMTEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzExOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZV9zOChfX3AwXzEyLCBfX3AxXzEyLCBfX3AyXzEyLCBfX3AzXzEyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczBfMTIgPSBfX3AwXzEyOyBcCisgIGludDh4OF90IF9fczJfMTIgPSBfX3AyXzEyOyBcCisgIGludDh4MTZfdCBfX3JldF8xMjsgXAorICBfX3JldF8xMiA9IHZzZXRxX2xhbmVfczgodmdldF9sYW5lX3M4KF9fczJfMTIsIF9fcDNfMTIpLCBfX3MwXzEyLCBfX3AxXzEyKTsgXAorICBfX3JldF8xMjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lX3M4KF9fcDBfMTMsIF9fcDFfMTMsIF9fcDJfMTMsIF9fcDNfMTMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMF8xMyA9IF9fcDBfMTM7IFwKKyAgaW50OHg4X3QgX19zMl8xMyA9IF9fcDJfMTM7IFwKKyAgaW50OHgxNl90IF9fcmV2MF8xMzsgIF9fcmV2MF8xMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTMsIF9fczBfMTMsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV2Ml8xMzsgIF9fcmV2Ml8xMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTMsIF9fczJfMTMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldF8xMzsgXAorICBfX3JldF8xMyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczgoX19ub3N3YXBfdmdldF9sYW5lX3M4KF9fcmV2Ml8xMywgX19wM18xMyksIF9fcmV2MF8xMywgX19wMV8xMyk7IFwKKyAgX19yZXRfMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMywgX19yZXRfMTMsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzEzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZV9mMzIoX19wMF8xNCwgX19wMV8xNCwgX19wMl8xNCwgX19wM18xNCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczBfMTQgPSBfX3AwXzE0OyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfMTQgPSBfX3AyXzE0OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0XzE0OyBcCisgIF9fcmV0XzE0ID0gdnNldHFfbGFuZV9mMzIodmdldF9sYW5lX2YzMihfX3MyXzE0LCBfX3AzXzE0KSwgX19zMF8xNCwgX19wMV8xNCk7IFwKKyAgX19yZXRfMTQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZV9mMzIoX19wMF8xNSwgX19wMV8xNSwgX19wMl8xNSwgX19wM18xNSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczBfMTUgPSBfX3AwXzE1OyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfMTUgPSBfX3AyXzE1OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MF8xNTsgIF9fcmV2MF8xNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTUsIF9fczBfMTUsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2Ml8xNTsgIF9fcmV2Ml8xNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTUsIF9fczJfMTUsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0XzE1OyBcCisgIF9fcmV0XzE1ID0gX19ub3N3YXBfdnNldHFfbGFuZV9mMzIoX19ub3N3YXBfdmdldF9sYW5lX2YzMihfX3JldjJfMTUsIF9fcDNfMTUpLCBfX3JldjBfMTUsIF9fcDFfMTUpOyBcCisgIF9fcmV0XzE1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTUsIF9fcmV0XzE1LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfczMyKF9fcDBfMTYsIF9fcDFfMTYsIF9fcDJfMTYsIF9fcDNfMTYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMF8xNiA9IF9fcDBfMTY7IFwKKyAgaW50MzJ4Ml90IF9fczJfMTYgPSBfX3AyXzE2OyBcCisgIGludDMyeDRfdCBfX3JldF8xNjsgXAorICBfX3JldF8xNiA9IHZzZXRxX2xhbmVfczMyKHZnZXRfbGFuZV9zMzIoX19zMl8xNiwgX19wM18xNiksIF9fczBfMTYsIF9fcDFfMTYpOyBcCisgIF9fcmV0XzE2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfczMyKF9fcDBfMTcsIF9fcDFfMTcsIF9fcDJfMTcsIF9fcDNfMTcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMF8xNyA9IF9fcDBfMTc7IFwKKyAgaW50MzJ4Ml90IF9fczJfMTcgPSBfX3AyXzE3OyBcCisgIGludDMyeDRfdCBfX3JldjBfMTc7ICBfX3JldjBfMTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE3LCBfX3MwXzE3LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyXzE3OyAgX19yZXYyXzE3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8xNywgX19zMl8xNywgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzE3OyBcCisgIF9fcmV0XzE3ID0gX19ub3N3YXBfdnNldHFfbGFuZV9zMzIoX19ub3N3YXBfdmdldF9sYW5lX3MzMihfX3JldjJfMTcsIF9fcDNfMTcpLCBfX3JldjBfMTcsIF9fcDFfMTcpOyBcCisgIF9fcmV0XzE3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTcsIF9fcmV0XzE3LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfczY0KF9fcDBfMTgsIF9fcDFfMTgsIF9fcDJfMTgsIF9fcDNfMTgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMF8xOCA9IF9fcDBfMTg7IFwKKyAgaW50NjR4MV90IF9fczJfMTggPSBfX3AyXzE4OyBcCisgIGludDY0eDJfdCBfX3JldF8xODsgXAorICBfX3JldF8xOCA9IHZzZXRxX2xhbmVfczY0KHZnZXRfbGFuZV9zNjQoX19zMl8xOCwgX19wM18xOCksIF9fczBfMTgsIF9fcDFfMTgpOyBcCisgIF9fcmV0XzE4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfczY0KF9fcDBfMTksIF9fcDFfMTksIF9fcDJfMTksIF9fcDNfMTkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMF8xOSA9IF9fcDBfMTk7IFwKKyAgaW50NjR4MV90IF9fczJfMTkgPSBfX3AyXzE5OyBcCisgIGludDY0eDJfdCBfX3JldjBfMTk7ICBfX3JldjBfMTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE5LCBfX3MwXzE5LCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXRfMTk7IFwKKyAgX19yZXRfMTkgPSBfX25vc3dhcF92c2V0cV9sYW5lX3M2NChfX25vc3dhcF92Z2V0X2xhbmVfczY0KF9fczJfMTksIF9fcDNfMTkpLCBfX3JldjBfMTksIF9fcDFfMTkpOyBcCisgIF9fcmV0XzE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTksIF9fcmV0XzE5LCAxLCAwKTsgXAorICBfX3JldF8xOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfczE2KF9fcDBfMjAsIF9fcDFfMjAsIF9fcDJfMjAsIF9fcDNfMjApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMF8yMCA9IF9fcDBfMjA7IFwKKyAgaW50MTZ4NF90IF9fczJfMjAgPSBfX3AyXzIwOyBcCisgIGludDE2eDhfdCBfX3JldF8yMDsgXAorICBfX3JldF8yMCA9IHZzZXRxX2xhbmVfczE2KHZnZXRfbGFuZV9zMTYoX19zMl8yMCwgX19wM18yMCksIF9fczBfMjAsIF9fcDFfMjApOyBcCisgIF9fcmV0XzIwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfczE2KF9fcDBfMjEsIF9fcDFfMjEsIF9fcDJfMjEsIF9fcDNfMjEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMF8yMSA9IF9fcDBfMjE7IFwKKyAgaW50MTZ4NF90IF9fczJfMjEgPSBfX3AyXzIxOyBcCisgIGludDE2eDhfdCBfX3JldjBfMjE7ICBfX3JldjBfMjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIxLCBfX3MwXzIxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyXzIxOyAgX19yZXYyXzIxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yMSwgX19zMl8yMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzIxOyBcCisgIF9fcmV0XzIxID0gX19ub3N3YXBfdnNldHFfbGFuZV9zMTYoX19ub3N3YXBfdmdldF9sYW5lX3MxNihfX3JldjJfMjEsIF9fcDNfMjEpLCBfX3JldjBfMjEsIF9fcDFfMjEpOyBcCisgIF9fcmV0XzIxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjEsIF9fcmV0XzIxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV9wOChfX3AwXzIyLCBfX3AxXzIyLCBfX3AyXzIyLCBfX3AzXzIyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczBfMjIgPSBfX3AwXzIyOyBcCisgIHBvbHk4eDhfdCBfX3MyXzIyID0gX19wMl8yMjsgXAorICBwb2x5OHg4X3QgX19yZXRfMjI7IFwKKyAgX19yZXRfMjIgPSB2c2V0X2xhbmVfcDgodmdldF9sYW5lX3A4KF9fczJfMjIsIF9fcDNfMjIpLCBfX3MwXzIyLCBfX3AxXzIyKTsgXAorICBfX3JldF8yMjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfcDgoX19wMF8yMywgX19wMV8yMywgX19wMl8yMywgX19wM18yMykgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwXzIzID0gX19wMF8yMzsgXAorICBwb2x5OHg4X3QgX19zMl8yMyA9IF9fcDJfMjM7IFwKKyAgcG9seTh4OF90IF9fcmV2MF8yMzsgIF9fcmV2MF8yMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjMsIF9fczBfMjMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldjJfMjM7ICBfX3JldjJfMjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzIzLCBfX3MyXzIzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXRfMjM7IFwKKyAgX19yZXRfMjMgPSBfX25vc3dhcF92c2V0X2xhbmVfcDgoX19ub3N3YXBfdmdldF9sYW5lX3A4KF9fcmV2Ml8yMywgX19wM18yMyksIF9fcmV2MF8yMywgX19wMV8yMyk7IFwKKyAgX19yZXRfMjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMywgX19yZXRfMjMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3AxNihfX3AwXzI0LCBfX3AxXzI0LCBfX3AyXzI0LCBfX3AzXzI0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwXzI0ID0gX19wMF8yNDsgXAorICBwb2x5MTZ4NF90IF9fczJfMjQgPSBfX3AyXzI0OyBcCisgIHBvbHkxNng0X3QgX19yZXRfMjQ7IFwKKyAgX19yZXRfMjQgPSB2c2V0X2xhbmVfcDE2KHZnZXRfbGFuZV9wMTYoX19zMl8yNCwgX19wM18yNCksIF9fczBfMjQsIF9fcDFfMjQpOyBcCisgIF9fcmV0XzI0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9wMTYoX19wMF8yNSwgX19wMV8yNSwgX19wMl8yNSwgX19wM18yNSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMF8yNSA9IF9fcDBfMjU7IFwKKyAgcG9seTE2eDRfdCBfX3MyXzI1ID0gX19wMl8yNTsgXAorICBwb2x5MTZ4NF90IF9fcmV2MF8yNTsgIF9fcmV2MF8yNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjUsIF9fczBfMjUsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng0X3QgX19yZXYyXzI1OyAgX19yZXYyXzI1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNSwgX19zMl8yNSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldF8yNTsgXAorICBfX3JldF8yNSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9wMTYoX19ub3N3YXBfdmdldF9sYW5lX3AxNihfX3JldjJfMjUsIF9fcDNfMjUpLCBfX3JldjBfMjUsIF9fcDFfMjUpOyBcCisgIF9fcmV0XzI1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjUsIF9fcmV0XzI1LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV91OChfX3AwXzI2LCBfX3AxXzI2LCBfX3AyXzI2LCBfX3AzXzI2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczBfMjYgPSBfX3AwXzI2OyBcCisgIHVpbnQ4eDhfdCBfX3MyXzI2ID0gX19wMl8yNjsgXAorICB1aW50OHg4X3QgX19yZXRfMjY7IFwKKyAgX19yZXRfMjYgPSB2c2V0X2xhbmVfdTgodmdldF9sYW5lX3U4KF9fczJfMjYsIF9fcDNfMjYpLCBfX3MwXzI2LCBfX3AxXzI2KTsgXAorICBfX3JldF8yNjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfdTgoX19wMF8yNywgX19wMV8yNywgX19wMl8yNywgX19wM18yNykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzI3ID0gX19wMF8yNzsgXAorICB1aW50OHg4X3QgX19zMl8yNyA9IF9fcDJfMjc7IFwKKyAgdWludDh4OF90IF9fcmV2MF8yNzsgIF9fcmV2MF8yNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjcsIF9fczBfMjcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldjJfMjc7ICBfX3JldjJfMjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI3LCBfX3MyXzI3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXRfMjc7IFwKKyAgX19yZXRfMjcgPSBfX25vc3dhcF92c2V0X2xhbmVfdTgoX19ub3N3YXBfdmdldF9sYW5lX3U4KF9fcmV2Ml8yNywgX19wM18yNyksIF9fcmV2MF8yNywgX19wMV8yNyk7IFwKKyAgX19yZXRfMjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yNywgX19yZXRfMjcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzI3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3UzMihfX3AwXzI4LCBfX3AxXzI4LCBfX3AyXzI4LCBfX3AzXzI4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzI4ID0gX19wMF8yODsgXAorICB1aW50MzJ4Ml90IF9fczJfMjggPSBfX3AyXzI4OyBcCisgIHVpbnQzMngyX3QgX19yZXRfMjg7IFwKKyAgX19yZXRfMjggPSB2c2V0X2xhbmVfdTMyKHZnZXRfbGFuZV91MzIoX19zMl8yOCwgX19wM18yOCksIF9fczBfMjgsIF9fcDFfMjgpOyBcCisgIF9fcmV0XzI4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV91MzIoX19wMF8yOSwgX19wMV8yOSwgX19wMl8yOSwgX19wM18yOSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMF8yOSA9IF9fcDBfMjk7IFwKKyAgdWludDMyeDJfdCBfX3MyXzI5ID0gX19wMl8yOTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MF8yOTsgIF9fcmV2MF8yOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjksIF9fczBfMjksIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYyXzI5OyAgX19yZXYyXzI5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yOSwgX19zMl8yOSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldF8yOTsgXAorICBfX3JldF8yOSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV91MzIoX19ub3N3YXBfdmdldF9sYW5lX3UzMihfX3JldjJfMjksIF9fcDNfMjkpLCBfX3JldjBfMjksIF9fcDFfMjkpOyBcCisgIF9fcmV0XzI5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjksIF9fcmV0XzI5LCAxLCAwKTsgXAorICBfX3JldF8yOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV91NjQoX19wMF8zMCwgX19wMV8zMCwgX19wMl8zMCwgX19wM18zMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMF8zMCA9IF9fcDBfMzA7IFwKKyAgdWludDY0eDFfdCBfX3MyXzMwID0gX19wMl8zMDsgXAorICB1aW50NjR4MV90IF9fcmV0XzMwOyBcCisgIF9fcmV0XzMwID0gdnNldF9sYW5lX3U2NCh2Z2V0X2xhbmVfdTY0KF9fczJfMzAsIF9fcDNfMzApLCBfX3MwXzMwLCBfX3AxXzMwKTsgXAorICBfX3JldF8zMDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfdTY0KF9fcDBfMzEsIF9fcDFfMzEsIF9fcDJfMzEsIF9fcDNfMzEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczBfMzEgPSBfX3AwXzMxOyBcCisgIHVpbnQ2NHgxX3QgX19zMl8zMSA9IF9fcDJfMzE7IFwKKyAgdWludDY0eDFfdCBfX3JldF8zMTsgXAorICBfX3JldF8zMSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV91NjQoX19ub3N3YXBfdmdldF9sYW5lX3U2NChfX3MyXzMxLCBfX3AzXzMxKSwgX19zMF8zMSwgX19wMV8zMSk7IFwKKyAgX19yZXRfMzE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVfdTE2KF9fcDBfMzIsIF9fcDFfMzIsIF9fcDJfMzIsIF9fcDNfMzIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfMzIgPSBfX3AwXzMyOyBcCisgIHVpbnQxNng0X3QgX19zMl8zMiA9IF9fcDJfMzI7IFwKKyAgdWludDE2eDRfdCBfX3JldF8zMjsgXAorICBfX3JldF8zMiA9IHZzZXRfbGFuZV91MTYodmdldF9sYW5lX3UxNihfX3MyXzMyLCBfX3AzXzMyKSwgX19zMF8zMiwgX19wMV8zMik7IFwKKyAgX19yZXRfMzI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lX3UxNihfX3AwXzMzLCBfX3AxXzMzLCBfX3AyXzMzLCBfX3AzXzMzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwXzMzID0gX19wMF8zMzsgXAorICB1aW50MTZ4NF90IF9fczJfMzMgPSBfX3AyXzMzOyBcCisgIHVpbnQxNng0X3QgX19yZXYwXzMzOyAgX19yZXYwXzMzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8zMywgX19zMF8zMywgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjJfMzM7ICBfX3JldjJfMzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzMzLCBfX3MyXzMzLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0XzMzOyBcCisgIF9fcmV0XzMzID0gX19ub3N3YXBfdnNldF9sYW5lX3UxNihfX25vc3dhcF92Z2V0X2xhbmVfdTE2KF9fcmV2Ml8zMywgX19wM18zMyksIF9fcmV2MF8zMywgX19wMV8zMyk7IFwKKyAgX19yZXRfMzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8zMywgX19yZXRfMzMsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzMzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3M4KF9fcDBfMzQsIF9fcDFfMzQsIF9fcDJfMzQsIF9fcDNfMzQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzM0ID0gX19wMF8zNDsgXAorICBpbnQ4eDhfdCBfX3MyXzM0ID0gX19wMl8zNDsgXAorICBpbnQ4eDhfdCBfX3JldF8zNDsgXAorICBfX3JldF8zNCA9IHZzZXRfbGFuZV9zOCh2Z2V0X2xhbmVfczgoX19zMl8zNCwgX19wM18zNCksIF9fczBfMzQsIF9fcDFfMzQpOyBcCisgIF9fcmV0XzM0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9zOChfX3AwXzM1LCBfX3AxXzM1LCBfX3AyXzM1LCBfX3AzXzM1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8zNSA9IF9fcDBfMzU7IFwKKyAgaW50OHg4X3QgX19zMl8zNSA9IF9fcDJfMzU7IFwKKyAgaW50OHg4X3QgX19yZXYwXzM1OyAgX19yZXYwXzM1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8zNSwgX19zMF8zNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXYyXzM1OyAgX19yZXYyXzM1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8zNSwgX19zMl8zNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXRfMzU7IFwKKyAgX19yZXRfMzUgPSBfX25vc3dhcF92c2V0X2xhbmVfczgoX19ub3N3YXBfdmdldF9sYW5lX3M4KF9fcmV2Ml8zNSwgX19wM18zNSksIF9fcmV2MF8zNSwgX19wMV8zNSk7IFwKKyAgX19yZXRfMzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8zNSwgX19yZXRfMzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzM1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX2YzMihfX3AwXzM2LCBfX3AxXzM2LCBfX3AyXzM2LCBfX3AzXzM2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMF8zNiA9IF9fcDBfMzY7IFwKKyAgZmxvYXQzMngyX3QgX19zMl8zNiA9IF9fcDJfMzY7IFwKKyAgZmxvYXQzMngyX3QgX19yZXRfMzY7IFwKKyAgX19yZXRfMzYgPSB2c2V0X2xhbmVfZjMyKHZnZXRfbGFuZV9mMzIoX19zMl8zNiwgX19wM18zNiksIF9fczBfMzYsIF9fcDFfMzYpOyBcCisgIF9fcmV0XzM2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9mMzIoX19wMF8zNywgX19wMV8zNywgX19wMl8zNywgX19wM18zNykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczBfMzcgPSBfX3AwXzM3OyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfMzcgPSBfX3AyXzM3OyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MF8zNzsgIF9fcmV2MF8zNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMzcsIF9fczBfMzcsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2Ml8zNzsgIF9fcmV2Ml8zNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMzcsIF9fczJfMzcsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0XzM3OyBcCisgIF9fcmV0XzM3ID0gX19ub3N3YXBfdnNldF9sYW5lX2YzMihfX25vc3dhcF92Z2V0X2xhbmVfZjMyKF9fcmV2Ml8zNywgX19wM18zNyksIF9fcmV2MF8zNywgX19wMV8zNyk7IFwKKyAgX19yZXRfMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8zNywgX19yZXRfMzcsIDEsIDApOyBcCisgIF9fcmV0XzM3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3MzMihfX3AwXzM4LCBfX3AxXzM4LCBfX3AyXzM4LCBfX3AzXzM4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMzggPSBfX3AwXzM4OyBcCisgIGludDMyeDJfdCBfX3MyXzM4ID0gX19wMl8zODsgXAorICBpbnQzMngyX3QgX19yZXRfMzg7IFwKKyAgX19yZXRfMzggPSB2c2V0X2xhbmVfczMyKHZnZXRfbGFuZV9zMzIoX19zMl8zOCwgX19wM18zOCksIF9fczBfMzgsIF9fcDFfMzgpOyBcCisgIF9fcmV0XzM4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9zMzIoX19wMF8zOSwgX19wMV8zOSwgX19wMl8zOSwgX19wM18zOSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzM5ID0gX19wMF8zOTsgXAorICBpbnQzMngyX3QgX19zMl8zOSA9IF9fcDJfMzk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MF8zOTsgIF9fcmV2MF8zOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMzksIF9fczBfMzksIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjJfMzk7ICBfX3JldjJfMzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzM5LCBfX3MyXzM5LCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXRfMzk7IFwKKyAgX19yZXRfMzkgPSBfX25vc3dhcF92c2V0X2xhbmVfczMyKF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYyXzM5LCBfX3AzXzM5KSwgX19yZXYwXzM5LCBfX3AxXzM5KTsgXAorICBfX3JldF8zOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzM5LCBfX3JldF8zOSwgMSwgMCk7IFwKKyAgX19yZXRfMzk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVfczY0KF9fcDBfNDAsIF9fcDFfNDAsIF9fcDJfNDAsIF9fcDNfNDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMF80MCA9IF9fcDBfNDA7IFwKKyAgaW50NjR4MV90IF9fczJfNDAgPSBfX3AyXzQwOyBcCisgIGludDY0eDFfdCBfX3JldF80MDsgXAorICBfX3JldF80MCA9IHZzZXRfbGFuZV9zNjQodmdldF9sYW5lX3M2NChfX3MyXzQwLCBfX3AzXzQwKSwgX19zMF80MCwgX19wMV80MCk7IFwKKyAgX19yZXRfNDA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lX3M2NChfX3AwXzQxLCBfX3AxXzQxLCBfX3AyXzQxLCBfX3AzXzQxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczBfNDEgPSBfX3AwXzQxOyBcCisgIGludDY0eDFfdCBfX3MyXzQxID0gX19wMl80MTsgXAorICBpbnQ2NHgxX3QgX19yZXRfNDE7IFwKKyAgX19yZXRfNDEgPSBfX25vc3dhcF92c2V0X2xhbmVfczY0KF9fbm9zd2FwX3ZnZXRfbGFuZV9zNjQoX19zMl80MSwgX19wM180MSksIF9fczBfNDEsIF9fcDFfNDEpOyBcCisgIF9fcmV0XzQxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3MxNihfX3AwXzQyLCBfX3AxXzQyLCBfX3AyXzQyLCBfX3AzXzQyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfNDIgPSBfX3AwXzQyOyBcCisgIGludDE2eDRfdCBfX3MyXzQyID0gX19wMl80MjsgXAorICBpbnQxNng0X3QgX19yZXRfNDI7IFwKKyAgX19yZXRfNDIgPSB2c2V0X2xhbmVfczE2KHZnZXRfbGFuZV9zMTYoX19zMl80MiwgX19wM180MiksIF9fczBfNDIsIF9fcDFfNDIpOyBcCisgIF9fcmV0XzQyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9zMTYoX19wMF80MywgX19wMV80MywgX19wMl80MywgX19wM180MykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzQzID0gX19wMF80MzsgXAorICBpbnQxNng0X3QgX19zMl80MyA9IF9fcDJfNDM7IFwKKyAgaW50MTZ4NF90IF9fcmV2MF80MzsgIF9fcmV2MF80MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNDMsIF9fczBfNDMsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjJfNDM7ICBfX3JldjJfNDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzQzLCBfX3MyXzQzLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXRfNDM7IFwKKyAgX19yZXRfNDMgPSBfX25vc3dhcF92c2V0X2xhbmVfczE2KF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoX19yZXYyXzQzLCBfX3AzXzQzKSwgX19yZXYwXzQzLCBfX3AxXzQzKTsgXAorICBfX3JldF80MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzQzLCBfX3JldF80MywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNDM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9wOChfX3AwXzQ0LCBfX3AxXzQ0LCBfX3AyXzQ0LCBfX3AzXzQ0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwXzQ0ID0gX19wMF80NDsgXAorICBwb2x5OHgxNl90IF9fczJfNDQgPSBfX3AyXzQ0OyBcCisgIHBvbHk4eDE2X3QgX19yZXRfNDQ7IFwKKyAgX19yZXRfNDQgPSB2c2V0cV9sYW5lX3A4KHZnZXRxX2xhbmVfcDgoX19zMl80NCwgX19wM180NCksIF9fczBfNDQsIF9fcDFfNDQpOyBcCisgIF9fcmV0XzQ0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3A4KF9fcDBfNDUsIF9fcDFfNDUsIF9fcDJfNDUsIF9fcDNfNDUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczBfNDUgPSBfX3AwXzQ1OyBcCisgIHBvbHk4eDE2X3QgX19zMl80NSA9IF9fcDJfNDU7IFwKKyAgcG9seTh4MTZfdCBfX3JldjBfNDU7ICBfX3JldjBfNDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzQ1LCBfX3MwXzQ1LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV2Ml80NTsgIF9fcmV2Ml80NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNDUsIF9fczJfNDUsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2X3QgX19yZXRfNDU7IFwKKyAgX19yZXRfNDUgPSBfX25vc3dhcF92c2V0cV9sYW5lX3A4KF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDgoX19yZXYyXzQ1LCBfX3AzXzQ1KSwgX19yZXYwXzQ1LCBfX3AxXzQ1KTsgXAorICBfX3JldF80NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzQ1LCBfX3JldF80NSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNDU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9wMTYoX19wMF80NiwgX19wMV80NiwgX19wMl80NiwgX19wM180NikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMF80NiA9IF9fcDBfNDY7IFwKKyAgcG9seTE2eDhfdCBfX3MyXzQ2ID0gX19wMl80NjsgXAorICBwb2x5MTZ4OF90IF9fcmV0XzQ2OyBcCisgIF9fcmV0XzQ2ID0gdnNldHFfbGFuZV9wMTYodmdldHFfbGFuZV9wMTYoX19zMl80NiwgX19wM180NiksIF9fczBfNDYsIF9fcDFfNDYpOyBcCisgIF9fcmV0XzQ2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3AxNihfX3AwXzQ3LCBfX3AxXzQ3LCBfX3AyXzQ3LCBfX3AzXzQ3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MwXzQ3ID0gX19wMF80NzsgXAorICBwb2x5MTZ4OF90IF9fczJfNDcgPSBfX3AyXzQ3OyBcCisgIHBvbHkxNng4X3QgX19yZXYwXzQ3OyAgX19yZXYwXzQ3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF80NywgX19zMF80NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldjJfNDc7ICBfX3JldjJfNDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzQ3LCBfX3MyXzQ3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OF90IF9fcmV0XzQ3OyBcCisgIF9fcmV0XzQ3ID0gX19ub3N3YXBfdnNldHFfbGFuZV9wMTYoX19ub3N3YXBfdmdldHFfbGFuZV9wMTYoX19yZXYyXzQ3LCBfX3AzXzQ3KSwgX19yZXYwXzQ3LCBfX3AxXzQ3KTsgXAorICBfX3JldF80NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzQ3LCBfX3JldF80NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNDc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91OChfX3AwXzQ4LCBfX3AxXzQ4LCBfX3AyXzQ4LCBfX3AzXzQ4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwXzQ4ID0gX19wMF80ODsgXAorICB1aW50OHgxNl90IF9fczJfNDggPSBfX3AyXzQ4OyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfNDg7IFwKKyAgX19yZXRfNDggPSB2c2V0cV9sYW5lX3U4KHZnZXRxX2xhbmVfdTgoX19zMl80OCwgX19wM180OCksIF9fczBfNDgsIF9fcDFfNDgpOyBcCisgIF9fcmV0XzQ4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3U4KF9fcDBfNDksIF9fcDFfNDksIF9fcDJfNDksIF9fcDNfNDkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczBfNDkgPSBfX3AwXzQ5OyBcCisgIHVpbnQ4eDE2X3QgX19zMl80OSA9IF9fcDJfNDk7IFwKKyAgdWludDh4MTZfdCBfX3JldjBfNDk7ICBfX3JldjBfNDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzQ5LCBfX3MwXzQ5LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV2Ml80OTsgIF9fcmV2Ml80OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNDksIF9fczJfNDksIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfNDk7IFwKKyAgX19yZXRfNDkgPSBfX25vc3dhcF92c2V0cV9sYW5lX3U4KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTgoX19yZXYyXzQ5LCBfX3AzXzQ5KSwgX19yZXYwXzQ5LCBfX3AxXzQ5KTsgXAorICBfX3JldF80OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzQ5LCBfX3JldF80OSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNDk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91MzIoX19wMF81MCwgX19wMV81MCwgX19wMl81MCwgX19wM181MCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMF81MCA9IF9fcDBfNTA7IFwKKyAgdWludDMyeDRfdCBfX3MyXzUwID0gX19wMl81MDsgXAorICB1aW50MzJ4NF90IF9fcmV0XzUwOyBcCisgIF9fcmV0XzUwID0gdnNldHFfbGFuZV91MzIodmdldHFfbGFuZV91MzIoX19zMl81MCwgX19wM181MCksIF9fczBfNTAsIF9fcDFfNTApOyBcCisgIF9fcmV0XzUwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3UzMihfX3AwXzUxLCBfX3AxXzUxLCBfX3AyXzUxLCBfX3AzXzUxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwXzUxID0gX19wMF81MTsgXAorICB1aW50MzJ4NF90IF9fczJfNTEgPSBfX3AyXzUxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwXzUxOyAgX19yZXYwXzUxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF81MSwgX19zMF81MSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjJfNTE7ICBfX3JldjJfNTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzUxLCBfX3MyXzUxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0XzUxOyBcCisgIF9fcmV0XzUxID0gX19ub3N3YXBfdnNldHFfbGFuZV91MzIoX19ub3N3YXBfdmdldHFfbGFuZV91MzIoX19yZXYyXzUxLCBfX3AzXzUxKSwgX19yZXYwXzUxLCBfX3AxXzUxKTsgXAorICBfX3JldF81MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzUxLCBfX3JldF81MSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNTE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91NjQoX19wMF81MiwgX19wMV81MiwgX19wMl81MiwgX19wM181MikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMF81MiA9IF9fcDBfNTI7IFwKKyAgdWludDY0eDJfdCBfX3MyXzUyID0gX19wMl81MjsgXAorICB1aW50NjR4Ml90IF9fcmV0XzUyOyBcCisgIF9fcmV0XzUyID0gdnNldHFfbGFuZV91NjQodmdldHFfbGFuZV91NjQoX19zMl81MiwgX19wM181MiksIF9fczBfNTIsIF9fcDFfNTIpOyBcCisgIF9fcmV0XzUyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3U2NChfX3AwXzUzLCBfX3AxXzUzLCBfX3AyXzUzLCBfX3AzXzUzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwXzUzID0gX19wMF81MzsgXAorICB1aW50NjR4Ml90IF9fczJfNTMgPSBfX3AyXzUzOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwXzUzOyAgX19yZXYwXzUzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF81MywgX19zMF81MywgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldjJfNTM7ICBfX3JldjJfNTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzUzLCBfX3MyXzUzLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0XzUzOyBcCisgIF9fcmV0XzUzID0gX19ub3N3YXBfdnNldHFfbGFuZV91NjQoX19ub3N3YXBfdmdldHFfbGFuZV91NjQoX19yZXYyXzUzLCBfX3AzXzUzKSwgX19yZXYwXzUzLCBfX3AxXzUzKTsgXAorICBfX3JldF81MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzUzLCBfX3JldF81MywgMSwgMCk7IFwKKyAgX19yZXRfNTM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91MTYoX19wMF81NCwgX19wMV81NCwgX19wMl81NCwgX19wM181NCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMF81NCA9IF9fcDBfNTQ7IFwKKyAgdWludDE2eDhfdCBfX3MyXzU0ID0gX19wMl81NDsgXAorICB1aW50MTZ4OF90IF9fcmV0XzU0OyBcCisgIF9fcmV0XzU0ID0gdnNldHFfbGFuZV91MTYodmdldHFfbGFuZV91MTYoX19zMl81NCwgX19wM181NCksIF9fczBfNTQsIF9fcDFfNTQpOyBcCisgIF9fcmV0XzU0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3UxNihfX3AwXzU1LCBfX3AxXzU1LCBfX3AyXzU1LCBfX3AzXzU1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwXzU1ID0gX19wMF81NTsgXAorICB1aW50MTZ4OF90IF9fczJfNTUgPSBfX3AyXzU1OyBcCisgIHVpbnQxNng4X3QgX19yZXYwXzU1OyAgX19yZXYwXzU1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF81NSwgX19zMF81NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjJfNTU7ICBfX3JldjJfNTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzU1LCBfX3MyXzU1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0XzU1OyBcCisgIF9fcmV0XzU1ID0gX19ub3N3YXBfdnNldHFfbGFuZV91MTYoX19ub3N3YXBfdmdldHFfbGFuZV91MTYoX19yZXYyXzU1LCBfX3AzXzU1KSwgX19yZXYwXzU1LCBfX3AxXzU1KTsgXAorICBfX3JldF81NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzU1LCBfX3JldF81NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNTU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9zOChfX3AwXzU2LCBfX3AxXzU2LCBfX3AyXzU2LCBfX3AzXzU2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczBfNTYgPSBfX3AwXzU2OyBcCisgIGludDh4MTZfdCBfX3MyXzU2ID0gX19wMl81NjsgXAorICBpbnQ4eDE2X3QgX19yZXRfNTY7IFwKKyAgX19yZXRfNTYgPSB2c2V0cV9sYW5lX3M4KHZnZXRxX2xhbmVfczgoX19zMl81NiwgX19wM181NiksIF9fczBfNTYsIF9fcDFfNTYpOyBcCisgIF9fcmV0XzU2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3M4KF9fcDBfNTcsIF9fcDFfNTcsIF9fcDJfNTcsIF9fcDNfNTcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMF81NyA9IF9fcDBfNTc7IFwKKyAgaW50OHgxNl90IF9fczJfNTcgPSBfX3AyXzU3OyBcCisgIGludDh4MTZfdCBfX3JldjBfNTc7ICBfX3JldjBfNTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzU3LCBfX3MwXzU3LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXYyXzU3OyAgX19yZXYyXzU3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl81NywgX19zMl81NywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0XzU3OyBcCisgIF9fcmV0XzU3ID0gX19ub3N3YXBfdnNldHFfbGFuZV9zOChfX25vc3dhcF92Z2V0cV9sYW5lX3M4KF9fcmV2Ml81NywgX19wM181NyksIF9fcmV2MF81NywgX19wMV81Nyk7IFwKKyAgX19yZXRfNTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF81NywgX19yZXRfNTcsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzU3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfZjMyKF9fcDBfNTgsIF9fcDFfNTgsIF9fcDJfNTgsIF9fcDNfNTgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwXzU4ID0gX19wMF81ODsgXAorICBmbG9hdDMyeDRfdCBfX3MyXzU4ID0gX19wMl81ODsgXAorICBmbG9hdDMyeDRfdCBfX3JldF81ODsgXAorICBfX3JldF81OCA9IHZzZXRxX2xhbmVfZjMyKHZnZXRxX2xhbmVfZjMyKF9fczJfNTgsIF9fcDNfNTgpLCBfX3MwXzU4LCBfX3AxXzU4KTsgXAorICBfX3JldF81ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9mMzIoX19wMF81OSwgX19wMV81OSwgX19wMl81OSwgX19wM181OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczBfNTkgPSBfX3AwXzU5OyBcCisgIGZsb2F0MzJ4NF90IF9fczJfNTkgPSBfX3AyXzU5OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MF81OTsgIF9fcmV2MF81OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNTksIF9fczBfNTksIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2Ml81OTsgIF9fcmV2Ml81OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNTksIF9fczJfNTksIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0XzU5OyBcCisgIF9fcmV0XzU5ID0gX19ub3N3YXBfdnNldHFfbGFuZV9mMzIoX19ub3N3YXBfdmdldHFfbGFuZV9mMzIoX19yZXYyXzU5LCBfX3AzXzU5KSwgX19yZXYwXzU5LCBfX3AxXzU5KTsgXAorICBfX3JldF81OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzU5LCBfX3JldF81OSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNTk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9zMzIoX19wMF82MCwgX19wMV82MCwgX19wMl82MCwgX19wM182MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwXzYwID0gX19wMF82MDsgXAorICBpbnQzMng0X3QgX19zMl82MCA9IF9fcDJfNjA7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzYwOyBcCisgIF9fcmV0XzYwID0gdnNldHFfbGFuZV9zMzIodmdldHFfbGFuZV9zMzIoX19zMl82MCwgX19wM182MCksIF9fczBfNjAsIF9fcDFfNjApOyBcCisgIF9fcmV0XzYwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3MzMihfX3AwXzYxLCBfX3AxXzYxLCBfX3AyXzYxLCBfX3AzXzYxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczBfNjEgPSBfX3AwXzYxOyBcCisgIGludDMyeDRfdCBfX3MyXzYxID0gX19wMl82MTsgXAorICBpbnQzMng0X3QgX19yZXYwXzYxOyAgX19yZXYwXzYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF82MSwgX19zMF82MSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2Ml82MTsgIF9fcmV2Ml82MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNjEsIF9fczJfNjEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldF82MTsgXAorICBfX3JldF82MSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczMyKF9fbm9zd2FwX3ZnZXRxX2xhbmVfczMyKF9fcmV2Ml82MSwgX19wM182MSksIF9fcmV2MF82MSwgX19wMV82MSk7IFwKKyAgX19yZXRfNjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF82MSwgX19yZXRfNjEsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzYxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfczY0KF9fcDBfNjIsIF9fcDFfNjIsIF9fcDJfNjIsIF9fcDNfNjIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMF82MiA9IF9fcDBfNjI7IFwKKyAgaW50NjR4Ml90IF9fczJfNjIgPSBfX3AyXzYyOyBcCisgIGludDY0eDJfdCBfX3JldF82MjsgXAorICBfX3JldF82MiA9IHZzZXRxX2xhbmVfczY0KHZnZXRxX2xhbmVfczY0KF9fczJfNjIsIF9fcDNfNjIpLCBfX3MwXzYyLCBfX3AxXzYyKTsgXAorICBfX3JldF82MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9zNjQoX19wMF82MywgX19wMV82MywgX19wMl82MywgX19wM182MykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwXzYzID0gX19wMF82MzsgXAorICBpbnQ2NHgyX3QgX19zMl82MyA9IF9fcDJfNjM7IFwKKyAgaW50NjR4Ml90IF9fcmV2MF82MzsgIF9fcmV2MF82MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNjMsIF9fczBfNjMsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldjJfNjM7ICBfX3JldjJfNjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzYzLCBfX3MyXzYzLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXRfNjM7IFwKKyAgX19yZXRfNjMgPSBfX25vc3dhcF92c2V0cV9sYW5lX3M2NChfX25vc3dhcF92Z2V0cV9sYW5lX3M2NChfX3JldjJfNjMsIF9fcDNfNjMpLCBfX3JldjBfNjMsIF9fcDFfNjMpOyBcCisgIF9fcmV0XzYzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNjMsIF9fcmV0XzYzLCAxLCAwKTsgXAorICBfX3JldF82MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3MxNihfX3AwXzY0LCBfX3AxXzY0LCBfX3AyXzY0LCBfX3AzXzY0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczBfNjQgPSBfX3AwXzY0OyBcCisgIGludDE2eDhfdCBfX3MyXzY0ID0gX19wMl82NDsgXAorICBpbnQxNng4X3QgX19yZXRfNjQ7IFwKKyAgX19yZXRfNjQgPSB2c2V0cV9sYW5lX3MxNih2Z2V0cV9sYW5lX3MxNihfX3MyXzY0LCBfX3AzXzY0KSwgX19zMF82NCwgX19wMV82NCk7IFwKKyAgX19yZXRfNjQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZXFfczE2KF9fcDBfNjUsIF9fcDFfNjUsIF9fcDJfNjUsIF9fcDNfNjUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMF82NSA9IF9fcDBfNjU7IFwKKyAgaW50MTZ4OF90IF9fczJfNjUgPSBfX3AyXzY1OyBcCisgIGludDE2eDhfdCBfX3JldjBfNjU7ICBfX3JldjBfNjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzY1LCBfX3MwXzY1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyXzY1OyAgX19yZXYyXzY1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl82NSwgX19zMl82NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzY1OyBcCisgIF9fcmV0XzY1ID0gX19ub3N3YXBfdnNldHFfbGFuZV9zMTYoX19ub3N3YXBfdmdldHFfbGFuZV9zMTYoX19yZXYyXzY1LCBfX3AzXzY1KSwgX19yZXYwXzY1LCBfX3AxXzY1KTsgXAorICBfX3JldF82NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzY1LCBfX3JldF82NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNjU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX3A4KF9fcDBfNjYsIF9fcDFfNjYsIF9fcDJfNjYsIF9fcDNfNjYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMF82NiA9IF9fcDBfNjY7IFwKKyAgcG9seTh4MTZfdCBfX3MyXzY2ID0gX19wMl82NjsgXAorICBwb2x5OHg4X3QgX19yZXRfNjY7IFwKKyAgX19yZXRfNjYgPSB2c2V0X2xhbmVfcDgodmdldHFfbGFuZV9wOChfX3MyXzY2LCBfX3AzXzY2KSwgX19zMF82NiwgX19wMV82Nik7IFwKKyAgX19yZXRfNjY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV9wOChfX3AwXzY3LCBfX3AxXzY3LCBfX3AyXzY3LCBfX3AzXzY3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczBfNjcgPSBfX3AwXzY3OyBcCisgIHBvbHk4eDE2X3QgX19zMl82NyA9IF9fcDJfNjc7IFwKKyAgcG9seTh4OF90IF9fcmV2MF82NzsgIF9fcmV2MF82NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNjcsIF9fczBfNjcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2X3QgX19yZXYyXzY3OyAgX19yZXYyXzY3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl82NywgX19zMl82NywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV0XzY3OyBcCisgIF9fcmV0XzY3ID0gX19ub3N3YXBfdnNldF9sYW5lX3A4KF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDgoX19yZXYyXzY3LCBfX3AzXzY3KSwgX19yZXYwXzY3LCBfX3AxXzY3KTsgXAorICBfX3JldF82NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzY3LCBfX3JldF82NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNjc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX3AxNihfX3AwXzY4LCBfX3AxXzY4LCBfX3AyXzY4LCBfX3AzXzY4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwXzY4ID0gX19wMF82ODsgXAorICBwb2x5MTZ4OF90IF9fczJfNjggPSBfX3AyXzY4OyBcCisgIHBvbHkxNng0X3QgX19yZXRfNjg7IFwKKyAgX19yZXRfNjggPSB2c2V0X2xhbmVfcDE2KHZnZXRxX2xhbmVfcDE2KF9fczJfNjgsIF9fcDNfNjgpLCBfX3MwXzY4LCBfX3AxXzY4KTsgXAorICBfX3JldF82ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVxX3AxNihfX3AwXzY5LCBfX3AxXzY5LCBfX3AyXzY5LCBfX3AzXzY5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwXzY5ID0gX19wMF82OTsgXAorICBwb2x5MTZ4OF90IF9fczJfNjkgPSBfX3AyXzY5OyBcCisgIHBvbHkxNng0X3QgX19yZXYwXzY5OyAgX19yZXYwXzY5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF82OSwgX19zMF82OSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldjJfNjk7ICBfX3JldjJfNjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzY5LCBfX3MyXzY5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0XzY5OyBcCisgIF9fcmV0XzY5ID0gX19ub3N3YXBfdnNldF9sYW5lX3AxNihfX25vc3dhcF92Z2V0cV9sYW5lX3AxNihfX3JldjJfNjksIF9fcDNfNjkpLCBfX3JldjBfNjksIF9fcDFfNjkpOyBcCisgIF9fcmV0XzY5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNjksIF9fcmV0XzY5LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF82OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfdTgoX19wMF83MCwgX19wMV83MCwgX19wMl83MCwgX19wM183MCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzcwID0gX19wMF83MDsgXAorICB1aW50OHgxNl90IF9fczJfNzAgPSBfX3AyXzcwOyBcCisgIHVpbnQ4eDhfdCBfX3JldF83MDsgXAorICBfX3JldF83MCA9IHZzZXRfbGFuZV91OCh2Z2V0cV9sYW5lX3U4KF9fczJfNzAsIF9fcDNfNzApLCBfX3MwXzcwLCBfX3AxXzcwKTsgXAorICBfX3JldF83MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVxX3U4KF9fcDBfNzEsIF9fcDFfNzEsIF9fcDJfNzEsIF9fcDNfNzEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF83MSA9IF9fcDBfNzE7IFwKKyAgdWludDh4MTZfdCBfX3MyXzcxID0gX19wMl83MTsgXAorICB1aW50OHg4X3QgX19yZXYwXzcxOyAgX19yZXYwXzcxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF83MSwgX19zMF83MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldjJfNzE7ICBfX3JldjJfNzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzcxLCBfX3MyXzcxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXRfNzE7IFwKKyAgX19yZXRfNzEgPSBfX25vc3dhcF92c2V0X2xhbmVfdTgoX19ub3N3YXBfdmdldHFfbGFuZV91OChfX3JldjJfNzEsIF9fcDNfNzEpLCBfX3JldjBfNzEsIF9fcDFfNzEpOyBcCisgIF9fcmV0XzcxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNzEsIF9fcmV0XzcxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF83MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfdTMyKF9fcDBfNzIsIF9fcDFfNzIsIF9fcDJfNzIsIF9fcDNfNzIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfNzIgPSBfX3AwXzcyOyBcCisgIHVpbnQzMng0X3QgX19zMl83MiA9IF9fcDJfNzI7IFwKKyAgdWludDMyeDJfdCBfX3JldF83MjsgXAorICBfX3JldF83MiA9IHZzZXRfbGFuZV91MzIodmdldHFfbGFuZV91MzIoX19zMl83MiwgX19wM183MiksIF9fczBfNzIsIF9fcDFfNzIpOyBcCisgIF9fcmV0XzcyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfdTMyKF9fcDBfNzMsIF9fcDFfNzMsIF9fcDJfNzMsIF9fcDNfNzMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfNzMgPSBfX3AwXzczOyBcCisgIHVpbnQzMng0X3QgX19zMl83MyA9IF9fcDJfNzM7IFwKKyAgdWludDMyeDJfdCBfX3JldjBfNzM7ICBfX3JldjBfNzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzczLCBfX3MwXzczLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2Ml83MzsgIF9fcmV2Ml83MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNzMsIF9fczJfNzMsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXRfNzM7IFwKKyAgX19yZXRfNzMgPSBfX25vc3dhcF92c2V0X2xhbmVfdTMyKF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTMyKF9fcmV2Ml83MywgX19wM183MyksIF9fcmV2MF83MywgX19wMV83Myk7IFwKKyAgX19yZXRfNzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF83MywgX19yZXRfNzMsIDEsIDApOyBcCisgIF9fcmV0XzczOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV91NjQoX19wMF83NCwgX19wMV83NCwgX19wMl83NCwgX19wM183NCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMF83NCA9IF9fcDBfNzQ7IFwKKyAgdWludDY0eDJfdCBfX3MyXzc0ID0gX19wMl83NDsgXAorICB1aW50NjR4MV90IF9fcmV0Xzc0OyBcCisgIF9fcmV0Xzc0ID0gdnNldF9sYW5lX3U2NCh2Z2V0cV9sYW5lX3U2NChfX3MyXzc0LCBfX3AzXzc0KSwgX19zMF83NCwgX19wMV83NCk7IFwKKyAgX19yZXRfNzQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV91NjQoX19wMF83NSwgX19wMV83NSwgX19wMl83NSwgX19wM183NSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMF83NSA9IF9fcDBfNzU7IFwKKyAgdWludDY0eDJfdCBfX3MyXzc1ID0gX19wMl83NTsgXAorICB1aW50NjR4Ml90IF9fcmV2Ml83NTsgIF9fcmV2Ml83NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNzUsIF9fczJfNzUsIDEsIDApOyBcCisgIHVpbnQ2NHgxX3QgX19yZXRfNzU7IFwKKyAgX19yZXRfNzUgPSBfX25vc3dhcF92c2V0X2xhbmVfdTY0KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTY0KF9fcmV2Ml83NSwgX19wM183NSksIF9fczBfNzUsIF9fcDFfNzUpOyBcCisgIF9fcmV0Xzc1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV91MTYoX19wMF83NiwgX19wMV83NiwgX19wMl83NiwgX19wM183NikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF83NiA9IF9fcDBfNzY7IFwKKyAgdWludDE2eDhfdCBfX3MyXzc2ID0gX19wMl83NjsgXAorICB1aW50MTZ4NF90IF9fcmV0Xzc2OyBcCisgIF9fcmV0Xzc2ID0gdnNldF9sYW5lX3UxNih2Z2V0cV9sYW5lX3UxNihfX3MyXzc2LCBfX3AzXzc2KSwgX19zMF83NiwgX19wMV83Nik7IFwKKyAgX19yZXRfNzY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV91MTYoX19wMF83NywgX19wMV83NywgX19wMl83NywgX19wM183NykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF83NyA9IF9fcDBfNzc7IFwKKyAgdWludDE2eDhfdCBfX3MyXzc3ID0gX19wMl83NzsgXAorICB1aW50MTZ4NF90IF9fcmV2MF83NzsgIF9fcmV2MF83NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNzcsIF9fczBfNzcsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYyXzc3OyAgX19yZXYyXzc3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl83NywgX19zMl83NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldF83NzsgXAorICBfX3JldF83NyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV91MTYoX19ub3N3YXBfdmdldHFfbGFuZV91MTYoX19yZXYyXzc3LCBfX3AzXzc3KSwgX19yZXYwXzc3LCBfX3AxXzc3KTsgXAorICBfX3JldF83NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0Xzc3LCBfX3JldF83NywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNzc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX3M4KF9fcDBfNzgsIF9fcDFfNzgsIF9fcDJfNzgsIF9fcDNfNzgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzc4ID0gX19wMF83ODsgXAorICBpbnQ4eDE2X3QgX19zMl83OCA9IF9fcDJfNzg7IFwKKyAgaW50OHg4X3QgX19yZXRfNzg7IFwKKyAgX19yZXRfNzggPSB2c2V0X2xhbmVfczgodmdldHFfbGFuZV9zOChfX3MyXzc4LCBfX3AzXzc4KSwgX19zMF83OCwgX19wMV83OCk7IFwKKyAgX19yZXRfNzg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV9zOChfX3AwXzc5LCBfX3AxXzc5LCBfX3AyXzc5LCBfX3AzXzc5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF83OSA9IF9fcDBfNzk7IFwKKyAgaW50OHgxNl90IF9fczJfNzkgPSBfX3AyXzc5OyBcCisgIGludDh4OF90IF9fcmV2MF83OTsgIF9fcmV2MF83OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNzksIF9fczBfNzksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldjJfNzk7ICBfX3JldjJfNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzc5LCBfX3MyXzc5LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldF83OTsgXAorICBfX3JldF83OSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9zOChfX25vc3dhcF92Z2V0cV9sYW5lX3M4KF9fcmV2Ml83OSwgX19wM183OSksIF9fcmV2MF83OSwgX19wMV83OSk7IFwKKyAgX19yZXRfNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF83OSwgX19yZXRfNzksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0Xzc5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV9mMzIoX19wMF84MCwgX19wMV84MCwgX19wMl84MCwgX19wM184MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczBfODAgPSBfX3AwXzgwOyBcCisgIGZsb2F0MzJ4NF90IF9fczJfODAgPSBfX3AyXzgwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0XzgwOyBcCisgIF9fcmV0XzgwID0gdnNldF9sYW5lX2YzMih2Z2V0cV9sYW5lX2YzMihfX3MyXzgwLCBfX3AzXzgwKSwgX19zMF84MCwgX19wMV84MCk7IFwKKyAgX19yZXRfODA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV9mMzIoX19wMF84MSwgX19wMV84MSwgX19wMl84MSwgX19wM184MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczBfODEgPSBfX3AwXzgxOyBcCisgIGZsb2F0MzJ4NF90IF9fczJfODEgPSBfX3AyXzgxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MF84MTsgIF9fcmV2MF84MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfODEsIF9fczBfODEsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2Ml84MTsgIF9fcmV2Ml84MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfODEsIF9fczJfODEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0XzgxOyBcCisgIF9fcmV0XzgxID0gX19ub3N3YXBfdnNldF9sYW5lX2YzMihfX25vc3dhcF92Z2V0cV9sYW5lX2YzMihfX3JldjJfODEsIF9fcDNfODEpLCBfX3JldjBfODEsIF9fcDFfODEpOyBcCisgIF9fcmV0XzgxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfODEsIF9fcmV0XzgxLCAxLCAwKTsgXAorICBfX3JldF84MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfczMyKF9fcDBfODIsIF9fcDFfODIsIF9fcDJfODIsIF9fcDNfODIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF84MiA9IF9fcDBfODI7IFwKKyAgaW50MzJ4NF90IF9fczJfODIgPSBfX3AyXzgyOyBcCisgIGludDMyeDJfdCBfX3JldF84MjsgXAorICBfX3JldF84MiA9IHZzZXRfbGFuZV9zMzIodmdldHFfbGFuZV9zMzIoX19zMl84MiwgX19wM184MiksIF9fczBfODIsIF9fcDFfODIpOyBcCisgIF9fcmV0XzgyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfczMyKF9fcDBfODMsIF9fcDFfODMsIF9fcDJfODMsIF9fcDNfODMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF84MyA9IF9fcDBfODM7IFwKKyAgaW50MzJ4NF90IF9fczJfODMgPSBfX3AyXzgzOyBcCisgIGludDMyeDJfdCBfX3JldjBfODM7ICBfX3JldjBfODMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzgzLCBfX3MwXzgzLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyXzgzOyAgX19yZXYyXzgzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl84MywgX19zMl84MywgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0XzgzOyBcCisgIF9fcmV0XzgzID0gX19ub3N3YXBfdnNldF9sYW5lX3MzMihfX25vc3dhcF92Z2V0cV9sYW5lX3MzMihfX3JldjJfODMsIF9fcDNfODMpLCBfX3JldjBfODMsIF9fcDFfODMpOyBcCisgIF9fcmV0XzgzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfODMsIF9fcmV0XzgzLCAxLCAwKTsgXAorICBfX3JldF84MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfczY0KF9fcDBfODQsIF9fcDFfODQsIF9fcDJfODQsIF9fcDNfODQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMF84NCA9IF9fcDBfODQ7IFwKKyAgaW50NjR4Ml90IF9fczJfODQgPSBfX3AyXzg0OyBcCisgIGludDY0eDFfdCBfX3JldF84NDsgXAorICBfX3JldF84NCA9IHZzZXRfbGFuZV9zNjQodmdldHFfbGFuZV9zNjQoX19zMl84NCwgX19wM184NCksIF9fczBfODQsIF9fcDFfODQpOyBcCisgIF9fcmV0Xzg0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfczY0KF9fcDBfODUsIF9fcDFfODUsIF9fcDJfODUsIF9fcDNfODUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMF84NSA9IF9fcDBfODU7IFwKKyAgaW50NjR4Ml90IF9fczJfODUgPSBfX3AyXzg1OyBcCisgIGludDY0eDJfdCBfX3JldjJfODU7ICBfX3JldjJfODUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzg1LCBfX3MyXzg1LCAxLCAwKTsgXAorICBpbnQ2NHgxX3QgX19yZXRfODU7IFwKKyAgX19yZXRfODUgPSBfX25vc3dhcF92c2V0X2xhbmVfczY0KF9fbm9zd2FwX3ZnZXRxX2xhbmVfczY0KF9fcmV2Ml84NSwgX19wM184NSksIF9fczBfODUsIF9fcDFfODUpOyBcCisgIF9fcmV0Xzg1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV9zMTYoX19wMF84NiwgX19wMV84NiwgX19wMl84NiwgX19wM184NikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzg2ID0gX19wMF84NjsgXAorICBpbnQxNng4X3QgX19zMl84NiA9IF9fcDJfODY7IFwKKyAgaW50MTZ4NF90IF9fcmV0Xzg2OyBcCisgIF9fcmV0Xzg2ID0gdnNldF9sYW5lX3MxNih2Z2V0cV9sYW5lX3MxNihfX3MyXzg2LCBfX3AzXzg2KSwgX19zMF84NiwgX19wMV84Nik7IFwKKyAgX19yZXRfODY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV9zMTYoX19wMF84NywgX19wMV84NywgX19wMl84NywgX19wM184NykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzg3ID0gX19wMF84NzsgXAorICBpbnQxNng4X3QgX19zMl84NyA9IF9fcDJfODc7IFwKKyAgaW50MTZ4NF90IF9fcmV2MF84NzsgIF9fcmV2MF84NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfODcsIF9fczBfODcsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjJfODc7ICBfX3JldjJfODcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzg3LCBfX3MyXzg3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXRfODc7IFwKKyAgX19yZXRfODcgPSBfX25vc3dhcF92c2V0X2xhbmVfczE2KF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KF9fcmV2Ml84NywgX19wM184NyksIF9fcmV2MF84NywgX19wMV84Nyk7IFwKKyAgX19yZXRfODcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF84NywgX19yZXRfODcsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0Xzg3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZjcmVhdGVfcDY0KHVpbnQ2NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdmNyZWF0ZV9wNjQodWludDY0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2Y3JlYXRlX2Y2NCh1aW50NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZjcmVhdGVfZjY0KHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdmN2dHNfZjMyX3MzMihpbnQzMl90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX2YzMl9zMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2Y3Z0c19mMzJfczMyKGludDMyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfZjMyX3MzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdmN2dHNfZjMyX3UzMih1aW50MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19mMzJfdTMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdmN2dHNfZjMyX3UzMih1aW50MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19mMzJfdTMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnRfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mMzJfZjY0KChpbnQ4eDE2X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnRfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX2Y2NCgoaW50OHgxNl90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDMyeDJfdCBfX25vc3dhcF92Y3Z0X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX2Y2NCgoaW50OHgxNl90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2Y3Z0ZF9mNjRfczY0KGludDY0X3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfZjY0X3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZjdnRkX2Y2NF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9mNjRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2Y3Z0ZF9mNjRfdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX2Y2NF91NjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2Y3Z0ZF9mNjRfdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX2Y2NF91NjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmN2dHFfZjY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9mNjRfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmN2dHFfZjY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9mNjRfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmN2dHFfZjY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX2Y2NF92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2Y3Z0cV9mNjRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9mNjRfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmN2dF9mNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmN2dF9mNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2Y3Z0X2Y2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2Y2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmN2dF9mNjRfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9mNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmN2dF9mNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2Y2NF9mMzIoKGludDh4OF90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmN2dF9mNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mNjRfZjMyKChpbnQ4eDhfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0NjR4Ml90IF9fbm9zd2FwX3ZjdnRfZjY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mNjRfZjMyKChpbnQ4eDhfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdmN2dF9oaWdoX2YxNl9mMzIoZmxvYXQxNng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9mMTYoX19wMCwgdmN2dF9mMTZfZjMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdmN2dF9oaWdoX2YxNl9mMzIoZmxvYXQxNng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX2YxNihfX3JldjAsIF9fbm9zd2FwX3ZjdnRfZjE2X2YzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRfaGlnaF9mMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmN2dF9mMzJfZjE2KHZnZXRfaGlnaF9mMTYoX19wMCkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2hpZ2hfZjMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y3Z0X2YzMl9mMTYoX19ub3N3YXBfdmdldF9oaWdoX2YxNihfX3JldjApKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRfaGlnaF9mMzJfZjY0KGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfZjMyKF9fcDAsIHZjdnRfZjMyX2Y2NChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRfaGlnaF9mMzJfZjY0KGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9mMzIoX19yZXYwLCBfX25vc3dhcF92Y3Z0X2YzMl9mNjQoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2Y3Z0X2hpZ2hfZjY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZjdnRfZjY0X2YzMih2Z2V0X2hpZ2hfZjMyKF9fcDApKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmN2dF9oaWdoX2Y2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmN2dF9mNjRfZjMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9mMzIoX19yZXYwKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0c19uX2YzMl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fZjMyX3UzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRzX25fZjMyX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfbl9mMzJfdTMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0c19uX2YzMl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfbl9mMzJfczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHNfbl9mMzJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fZjMyX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHFfbl9mNjRfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2Y2NF92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHFfbl9mNjRfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fZjY0X3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRxX25fZjY0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2Y2NF92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHFfbl9mNjRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2Y2NF92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0X25fZjY0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX2Y2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fZjY0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX2Y2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRfbl9mNjRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9mNjRfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fZjY0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjY0X3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0ZF9uX2Y2NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fZjY0X3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRkX25fZjY0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfbl9mNjRfdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0ZF9uX2Y2NF9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfbl9mNjRfczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dGRfbl9mNjRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fZjY0X3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHNfbl9zMzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19uX3MzMl9mMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0c19uX3MzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fczMyX2YzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHFfbl9zNjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX3M2NF92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHFfbl9zNjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX3M2NF92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0X25fczY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3M2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRfbl9zNjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fczY0X3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0ZF9uX3M2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fczY0X2Y2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRkX25fczY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfbl9zNjRfZjY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0c19uX3UzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfbl91MzJfZjMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHNfbl91MzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fdTMyX2YzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHFfbl91NjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fdTY0X3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0cV9uX3U2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl91NjRfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dF9uX3U2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3U2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fdTY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fdTY0X3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dGRfbl91NjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fdTY0X2Y2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRkX25fdTY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9uX3U2NF9mNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdmN2dHNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZjdnRzX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfczMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjdnRkX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfczY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y3Z0ZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZjdnRxX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfczY0X3YoKGludDh4MTZfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2Y3Z0cV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9zNjRfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZjdnRfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZjdnRfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y3Z0c191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmN2dHNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX3UzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmN2dGRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX3U2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjdnRkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmN2dHFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3U2NF92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjdnRxX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfdTY0X3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmN2dF91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjdnRfdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZjdnRhc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhc19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZjdnRhc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhc19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmN2dGFkX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGFkX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmN2dGFkX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGFkX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmN2dGFzX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmN2dGFzX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y3Z0YWRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y3Z0YWRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdmN2dG1zX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG1zX3MzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdmN2dG1zX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG1zX3MzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y3Z0bWRfczY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bWRfczY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y3Z0bWRfczY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bWRfczY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y3Z0bXNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtc191MzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y3Z0bXNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtc191MzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjdnRtZF91NjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG1kX3U2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjdnRtZF91NjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG1kX3U2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2Y3Z0bnNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnNfczMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2Y3Z0bnNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnNfczMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjdnRuZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuZF9zNjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjdnRuZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuZF9zNjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjdnRuc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG5zX3UzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjdnRuc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG5zX3UzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmN2dG5kX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bmRfdTY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmN2dG5kX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bmRfdTY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZjdnRwc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwc19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZjdnRwc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwc19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmN2dHBkX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dHBkX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmN2dHBkX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dHBkX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmN2dHBzX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmN2dHBzX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y3Z0cGRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y3Z0cGRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2Y3Z0eGRfZjMyX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHhkX2YzMl9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2Y3Z0eGRfZjMyX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHhkX2YzMl9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdmN2dHhfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dHhfZjMyX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnR4X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0eF9mMzJfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMngyX3QgX19ub3N3YXBfdmN2dHhfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dHhfZjMyX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmN2dHhfaGlnaF9mMzJfZjY0KGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfZjMyKF9fcDAsIHZjdnR4X2YzMl9mNjQoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Y3Z0eF9oaWdoX2YzMl9mNjQoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX2YzMihfX3JldjAsIF9fbm9zd2FwX3ZjdnR4X2YzMl9mNjQoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2ZGl2cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC8gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmRpdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2ZGl2cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC8gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmRpdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2ZGl2X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2ZGl2X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZkaXZfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAvIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZkaXZfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwYl9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seThfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBiX2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seThfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwaF9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGhfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBiX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGJfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVfaTgoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBzX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lX2kzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwc19sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lX2kzMigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGRfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBkX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBoX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwaF9sYW5lX2kxNigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwaF9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwaF9sYW5lX2kxNigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGJfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwYl9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwZF9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZV9mNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGRfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVfZjY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHNfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVfZjMyKChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBzX2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lX2YzMigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHNfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVfaTMyKChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBzX2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZV9pMzIoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBkX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwZF9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwaF9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGhfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwaF9sYW5lX2kxNigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBiX2xhbmVxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZXFfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBiX2xhbmVxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seThfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lcV9pOCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBoX2xhbmVxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwaF9sYW5lcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGJfbGFuZXFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lcV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGJfbGFuZXFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVxX2k4KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHNfbGFuZXFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lcV9pMzIoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBzX2xhbmVxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lcV9pMzIoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwZF9sYW5lcV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVxX2k2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGRfbGFuZXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVxX2k2NCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBoX2xhbmVxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwaF9sYW5lcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGJfbGFuZXFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lcV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGJfbGFuZXFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZXFfaTgoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwZF9sYW5lcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVxX2Y2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGRfbGFuZXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9mNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwc19sYW5lcV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVxX2YzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHNfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lcV9mMzIoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwc19sYW5lcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVxX2kzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHNfbGFuZXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZXFfaTMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGRfbGFuZXFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBkX2xhbmVxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVxX2k2NCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBoX2xhbmVxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwaF9sYW5lcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwaF9sYW5lcV9pMTYoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZXFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdmR1cF9uX3A2NChwb2x5NjRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2ZHVwX25fcDY0KHBvbHk2NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdmR1cHFfbl9wNjQocG9seTY0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KSB7X19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdmR1cHFfbl9wNjQocG9seTY0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2ZHVwcV9uX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmR1cHFfbl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2ZHVwX25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2ZHVwX25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZmbWFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtYXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZmbWFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtYXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDY0eDJfdCBfX25vc3dhcF92Zm1hcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZmbWFfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEsIGZsb2F0NjR4MV90IF9fcDIpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2Zm1hX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDY0eDFfdCBfX25vc3dhcF92Zm1hX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1hZF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hZF9sYW5lX2Y2NChfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hZF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hZF9sYW5lX2Y2NChfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFkX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFkX2xhbmVfZjY0KF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYXNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmZtYXNfbGFuZV9mMzIoX19zMCwgX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYXNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmZtYXNfbGFuZV9mMzIoX19zMCwgX19zMSwgKGludDh4OF90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVfZjMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYXFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA0Mik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Zm1hcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYXFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMsIDQxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMywgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1hX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMywgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMsIDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1hZF9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmZtYWRfbGFuZXFfZjY0KF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hZF9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmZtYWRfbGFuZXFfZjY0KF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYWRfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFkX2xhbmVxX2Y2NChfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1hc19sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmZtYXNfbGFuZXFfZjMyKF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hc19sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmZtYXNfbGFuZXFfZjMyKF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYXNfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVxX2YzMihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1hcV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lcV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbWFxX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMywgNDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYXFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZXFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbWFxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMywgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYXFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzLCA0MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Zm1hcV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lcV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVxX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbWFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVxX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVxX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMsIDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVxX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2Zm1hcV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0X3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2Zm1hcV9mNjQoX19wMCwgX19wMSwgKGZsb2F0NjR4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2Zm1hcV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0X3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZmbWFxX2Y2NChfX3JldjAsIF9fcmV2MSwgKGZsb2F0NjR4Ml90KSB7X19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmZtYXFfbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmZtYXFfZjMyKF9fcDAsIF9fcDEsIChmbG9hdDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmZtYXFfbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Zm1hcV9mMzIoX19yZXYwLCBfX3JldjEsIChmbG9hdDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZmbWFfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gdmZtYV9mMzIoX19wMCwgX19wMSwgKGZsb2F0MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Zm1hX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmZtYV9mMzIoX19yZXYwLCBfX3JldjEsIChmbG9hdDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZmbXNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZmbWFxX2Y2NChfX3AwLCAtX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZmbXNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZmbWFxX2Y2NChfX3JldjAsIC1fX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2Zm1zX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IHZmbWFfZjY0KF9fcDAsIC1fX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmZtc19mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Zm1hX2Y2NChfX3AwLCAtX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc2RfbGFuZV9mNjQoX19wMF84OCwgX19wMV84OCwgX19wMl84OCwgX19wM184OCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzg4ID0gX19wMF84ODsgXAorICBmbG9hdDY0X3QgX19zMV84OCA9IF9fcDFfODg7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMl84OCA9IF9fcDJfODg7IFwKKyAgZmxvYXQ2NF90IF9fcmV0Xzg4OyBcCisgIF9fcmV0Xzg4ID0gdmZtYWRfbGFuZV9mNjQoX19zMF84OCwgLV9fczFfODgsIF9fczJfODgsIF9fcDNfODgpOyBcCisgIF9fcmV0Xzg4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc2RfbGFuZV9mNjQoX19wMF84OSwgX19wMV84OSwgX19wMl84OSwgX19wM184OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzg5ID0gX19wMF84OTsgXAorICBmbG9hdDY0X3QgX19zMV84OSA9IF9fcDFfODk7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMl84OSA9IF9fcDJfODk7IFwKKyAgZmxvYXQ2NF90IF9fcmV0Xzg5OyBcCisgIF9fcmV0Xzg5ID0gX19ub3N3YXBfdmZtYWRfbGFuZV9mNjQoX19zMF84OSwgLV9fczFfODksIF9fczJfODksIF9fcDNfODkpOyBcCisgIF9fcmV0Xzg5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zc19sYW5lX2YzMihfX3AwXzkwLCBfX3AxXzkwLCBfX3AyXzkwLCBfX3AzXzkwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfOTAgPSBfX3AwXzkwOyBcCisgIGZsb2F0MzJfdCBfX3MxXzkwID0gX19wMV85MDsgXAorICBmbG9hdDMyeDJfdCBfX3MyXzkwID0gX19wMl85MDsgXAorICBmbG9hdDMyX3QgX19yZXRfOTA7IFwKKyAgX19yZXRfOTAgPSB2Zm1hc19sYW5lX2YzMihfX3MwXzkwLCAtX19zMV85MCwgX19zMl85MCwgX19wM185MCk7IFwKKyAgX19yZXRfOTA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zc19sYW5lX2YzMihfX3AwXzkxLCBfX3AxXzkxLCBfX3AyXzkxLCBfX3AzXzkxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfOTEgPSBfX3AwXzkxOyBcCisgIGZsb2F0MzJfdCBfX3MxXzkxID0gX19wMV85MTsgXAorICBmbG9hdDMyeDJfdCBfX3MyXzkxID0gX19wMl85MTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjJfOTE7ICBfX3JldjJfOTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzkxLCBfX3MyXzkxLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXRfOTE7IFwKKyAgX19yZXRfOTEgPSBfX25vc3dhcF92Zm1hc19sYW5lX2YzMihfX3MwXzkxLCAtX19zMV85MSwgX19yZXYyXzkxLCBfX3AzXzkxKTsgXAorICBfX3JldF85MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc3FfbGFuZV9mNjQoX19wMF85MiwgX19wMV85MiwgX19wMl85MiwgX19wM185MikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczBfOTIgPSBfX3AwXzkyOyBcCisgIGZsb2F0NjR4Ml90IF9fczFfOTIgPSBfX3AxXzkyOyBcCisgIGZsb2F0NjR4MV90IF9fczJfOTIgPSBfX3AyXzkyOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0XzkyOyBcCisgIF9fcmV0XzkyID0gdmZtYXFfbGFuZV9mNjQoX19zMF85MiwgLV9fczFfOTIsIF9fczJfOTIsIF9fcDNfOTIpOyBcCisgIF9fcmV0XzkyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc3FfbGFuZV9mNjQoX19wMF85MywgX19wMV85MywgX19wMl85MywgX19wM185MykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczBfOTMgPSBfX3AwXzkzOyBcCisgIGZsb2F0NjR4Ml90IF9fczFfOTMgPSBfX3AxXzkzOyBcCisgIGZsb2F0NjR4MV90IF9fczJfOTMgPSBfX3AyXzkzOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MF85MzsgIF9fcmV2MF85MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfOTMsIF9fczBfOTMsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MV85MzsgIF9fcmV2MV85MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfOTMsIF9fczFfOTMsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0XzkzOyBcCisgIF9fcmV0XzkzID0gX19ub3N3YXBfdmZtYXFfbGFuZV9mNjQoX19yZXYwXzkzLCAtX19yZXYxXzkzLCBfX3MyXzkzLCBfX3AzXzkzKTsgXAorICBfX3JldF85MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzkzLCBfX3JldF85MywgMSwgMCk7IFwKKyAgX19yZXRfOTM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNxX2xhbmVfZjMyKF9fcDBfOTQsIF9fcDFfOTQsIF9fcDJfOTQsIF9fcDNfOTQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwXzk0ID0gX19wMF85NDsgXAorICBmbG9hdDMyeDRfdCBfX3MxXzk0ID0gX19wMV85NDsgXAorICBmbG9hdDMyeDJfdCBfX3MyXzk0ID0gX19wMl85NDsgXAorICBmbG9hdDMyeDRfdCBfX3JldF85NDsgXAorICBfX3JldF85NCA9IHZmbWFxX2xhbmVfZjMyKF9fczBfOTQsIC1fX3MxXzk0LCBfX3MyXzk0LCBfX3AzXzk0KTsgXAorICBfX3JldF85NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNxX2xhbmVfZjMyKF9fcDBfOTUsIF9fcDFfOTUsIF9fcDJfOTUsIF9fcDNfOTUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwXzk1ID0gX19wMF85NTsgXAorICBmbG9hdDMyeDRfdCBfX3MxXzk1ID0gX19wMV85NTsgXAorICBmbG9hdDMyeDJfdCBfX3MyXzk1ID0gX19wMl85NTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjBfOTU7ICBfX3JldjBfOTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzk1LCBfX3MwXzk1LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjFfOTU7ICBfX3JldjFfOTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzk1LCBfX3MxXzk1LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjJfOTU7ICBfX3JldjJfOTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzk1LCBfX3MyXzk1LCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldF85NTsgXAorICBfX3JldF85NSA9IF9fbm9zd2FwX3ZmbWFxX2xhbmVfZjMyKF9fcmV2MF85NSwgLV9fcmV2MV85NSwgX19yZXYyXzk1LCBfX3AzXzk1KTsgXAorICBfX3JldF85NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0Xzk1LCBfX3JldF85NSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfOTU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNfbGFuZV9mNjQoX19wMF85NiwgX19wMV85NiwgX19wMl85NiwgX19wM185NikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfOTYgPSBfX3AwXzk2OyBcCisgIGZsb2F0NjR4MV90IF9fczFfOTYgPSBfX3AxXzk2OyBcCisgIGZsb2F0NjR4MV90IF9fczJfOTYgPSBfX3AyXzk2OyBcCisgIGZsb2F0NjR4MV90IF9fcmV0Xzk2OyBcCisgIF9fcmV0Xzk2ID0gdmZtYV9sYW5lX2Y2NChfX3MwXzk2LCAtX19zMV85NiwgX19zMl85NiwgX19wM185Nik7IFwKKyAgX19yZXRfOTY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zX2xhbmVfZjY0KF9fcDBfOTcsIF9fcDFfOTcsIF9fcDJfOTcsIF9fcDNfOTcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzk3ID0gX19wMF85NzsgXAorICBmbG9hdDY0eDFfdCBfX3MxXzk3ID0gX19wMV85NzsgXAorICBmbG9hdDY0eDFfdCBfX3MyXzk3ID0gX19wMl85NzsgXAorICBmbG9hdDY0eDFfdCBfX3JldF85NzsgXAorICBfX3JldF85NyA9IF9fbm9zd2FwX3ZmbWFfbGFuZV9mNjQoX19zMF85NywgLV9fczFfOTcsIF9fczJfOTcsIF9fcDNfOTcpOyBcCisgIF9fcmV0Xzk3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zX2xhbmVfZjMyKF9fcDBfOTgsIF9fcDFfOTgsIF9fcDJfOTgsIF9fcDNfOTgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwXzk4ID0gX19wMF85ODsgXAorICBmbG9hdDMyeDJfdCBfX3MxXzk4ID0gX19wMV85ODsgXAorICBmbG9hdDMyeDJfdCBfX3MyXzk4ID0gX19wMl85ODsgXAorICBmbG9hdDMyeDJfdCBfX3JldF85ODsgXAorICBfX3JldF85OCA9IHZmbWFfbGFuZV9mMzIoX19zMF85OCwgLV9fczFfOTgsIF9fczJfOTgsIF9fcDNfOTgpOyBcCisgIF9fcmV0Xzk4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc19sYW5lX2YzMihfX3AwXzk5LCBfX3AxXzk5LCBfX3AyXzk5LCBfX3AzXzk5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMF85OSA9IF9fcDBfOTk7IFwKKyAgZmxvYXQzMngyX3QgX19zMV85OSA9IF9fcDFfOTk7IFwKKyAgZmxvYXQzMngyX3QgX19zMl85OSA9IF9fcDJfOTk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwXzk5OyAgX19yZXYwXzk5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF85OSwgX19zMF85OSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxXzk5OyAgX19yZXYxXzk5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV85OSwgX19zMV85OSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyXzk5OyAgX19yZXYyXzk5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl85OSwgX19zMl85OSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXRfOTk7IFwKKyAgX19yZXRfOTkgPSBfX25vc3dhcF92Zm1hX2xhbmVfZjMyKF9fcmV2MF85OSwgLV9fcmV2MV85OSwgX19yZXYyXzk5LCBfX3AzXzk5KTsgXAorICBfX3JldF85OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0Xzk5LCBfX3JldF85OSwgMSwgMCk7IFwKKyAgX19yZXRfOTk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNkX2xhbmVxX2Y2NChfX3AwXzEwMCwgX19wMV8xMDAsIF9fcDJfMTAwLCBfX3AzXzEwMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzEwMCA9IF9fcDBfMTAwOyBcCisgIGZsb2F0NjRfdCBfX3MxXzEwMCA9IF9fcDFfMTAwOyBcCisgIGZsb2F0NjR4Ml90IF9fczJfMTAwID0gX19wMl8xMDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0XzEwMDsgXAorICBfX3JldF8xMDAgPSB2Zm1hZF9sYW5lcV9mNjQoX19zMF8xMDAsIC1fX3MxXzEwMCwgX19zMl8xMDAsIF9fcDNfMTAwKTsgXAorICBfX3JldF8xMDA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zZF9sYW5lcV9mNjQoX19wMF8xMDEsIF9fcDFfMTAxLCBfX3AyXzEwMSwgX19wM18xMDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF8xMDEgPSBfX3AwXzEwMTsgXAorICBmbG9hdDY0X3QgX19zMV8xMDEgPSBfX3AxXzEwMTsgXAorICBmbG9hdDY0eDJfdCBfX3MyXzEwMSA9IF9fcDJfMTAxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2Ml8xMDE7ICBfX3JldjJfMTAxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8xMDEsIF9fczJfMTAxLCAxLCAwKTsgXAorICBmbG9hdDY0X3QgX19yZXRfMTAxOyBcCisgIF9fcmV0XzEwMSA9IF9fbm9zd2FwX3ZmbWFkX2xhbmVxX2Y2NChfX3MwXzEwMSwgLV9fczFfMTAxLCBfX3JldjJfMTAxLCBfX3AzXzEwMSk7IFwKKyAgX19yZXRfMTAxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zc19sYW5lcV9mMzIoX19wMF8xMDIsIF9fcDFfMTAyLCBfX3AyXzEwMiwgX19wM18xMDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF8xMDIgPSBfX3AwXzEwMjsgXAorICBmbG9hdDMyX3QgX19zMV8xMDIgPSBfX3AxXzEwMjsgXAorICBmbG9hdDMyeDRfdCBfX3MyXzEwMiA9IF9fcDJfMTAyOyBcCisgIGZsb2F0MzJfdCBfX3JldF8xMDI7IFwKKyAgX19yZXRfMTAyID0gdmZtYXNfbGFuZXFfZjMyKF9fczBfMTAyLCAtX19zMV8xMDIsIF9fczJfMTAyLCBfX3AzXzEwMik7IFwKKyAgX19yZXRfMTAyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc3NfbGFuZXFfZjMyKF9fcDBfMTAzLCBfX3AxXzEwMywgX19wMl8xMDMsIF9fcDNfMTAzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfMTAzID0gX19wMF8xMDM7IFwKKyAgZmxvYXQzMl90IF9fczFfMTAzID0gX19wMV8xMDM7IFwKKyAgZmxvYXQzMng0X3QgX19zMl8xMDMgPSBfX3AyXzEwMzsgXAorICBmbG9hdDMyeDRfdCBfX3JldjJfMTAzOyAgX19yZXYyXzEwMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTAzLCBfX3MyXzEwMywgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzEwMzsgXAorICBfX3JldF8xMDMgPSBfX25vc3dhcF92Zm1hc19sYW5lcV9mMzIoX19zMF8xMDMsIC1fX3MxXzEwMywgX19yZXYyXzEwMywgX19wM18xMDMpOyBcCisgIF9fcmV0XzEwMzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc3FfbGFuZXFfZjY0KF9fcDBfMTA0LCBfX3AxXzEwNCwgX19wMl8xMDQsIF9fcDNfMTA0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMF8xMDQgPSBfX3AwXzEwNDsgXAorICBmbG9hdDY0eDJfdCBfX3MxXzEwNCA9IF9fcDFfMTA0OyBcCisgIGZsb2F0NjR4Ml90IF9fczJfMTA0ID0gX19wMl8xMDQ7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXRfMTA0OyBcCisgIF9fcmV0XzEwNCA9IHZmbWFxX2xhbmVxX2Y2NChfX3MwXzEwNCwgLV9fczFfMTA0LCBfX3MyXzEwNCwgX19wM18xMDQpOyBcCisgIF9fcmV0XzEwNDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNxX2xhbmVxX2Y2NChfX3AwXzEwNSwgX19wMV8xMDUsIF9fcDJfMTA1LCBfX3AzXzEwNSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczBfMTA1ID0gX19wMF8xMDU7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMV8xMDUgPSBfX3AxXzEwNTsgXAorICBmbG9hdDY0eDJfdCBfX3MyXzEwNSA9IF9fcDJfMTA1OyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MF8xMDU7ICBfX3JldjBfMTA1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xMDUsIF9fczBfMTA1LCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjFfMTA1OyAgX19yZXYxXzEwNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTA1LCBfX3MxXzEwNSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYyXzEwNTsgIF9fcmV2Ml8xMDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzEwNSwgX19zMl8xMDUsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0XzEwNTsgXAorICBfX3JldF8xMDUgPSBfX25vc3dhcF92Zm1hcV9sYW5lcV9mNjQoX19yZXYwXzEwNSwgLV9fcmV2MV8xMDUsIF9fcmV2Ml8xMDUsIF9fcDNfMTA1KTsgXAorICBfX3JldF8xMDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMDUsIF9fcmV0XzEwNSwgMSwgMCk7IFwKKyAgX19yZXRfMTA1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zcV9sYW5lcV9mMzIoX19wMF8xMDYsIF9fcDFfMTA2LCBfX3AyXzEwNiwgX19wM18xMDYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwXzEwNiA9IF9fcDBfMTA2OyBcCisgIGZsb2F0MzJ4NF90IF9fczFfMTA2ID0gX19wMV8xMDY7IFwKKyAgZmxvYXQzMng0X3QgX19zMl8xMDYgPSBfX3AyXzEwNjsgXAorICBmbG9hdDMyeDRfdCBfX3JldF8xMDY7IFwKKyAgX19yZXRfMTA2ID0gdmZtYXFfbGFuZXFfZjMyKF9fczBfMTA2LCAtX19zMV8xMDYsIF9fczJfMTA2LCBfX3AzXzEwNik7IFwKKyAgX19yZXRfMTA2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc3FfbGFuZXFfZjMyKF9fcDBfMTA3LCBfX3AxXzEwNywgX19wMl8xMDcsIF9fcDNfMTA3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMF8xMDcgPSBfX3AwXzEwNzsgXAorICBmbG9hdDMyeDRfdCBfX3MxXzEwNyA9IF9fcDFfMTA3OyBcCisgIGZsb2F0MzJ4NF90IF9fczJfMTA3ID0gX19wMl8xMDc7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwXzEwNzsgIF9fcmV2MF8xMDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzEwNywgX19zMF8xMDcsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MV8xMDc7ICBfX3JldjFfMTA3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xMDcsIF9fczFfMTA3LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjJfMTA3OyAgX19yZXYyXzEwNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTA3LCBfX3MyXzEwNywgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXRfMTA3OyBcCisgIF9fcmV0XzEwNyA9IF9fbm9zd2FwX3ZmbWFxX2xhbmVxX2YzMihfX3JldjBfMTA3LCAtX19yZXYxXzEwNywgX19yZXYyXzEwNywgX19wM18xMDcpOyBcCisgIF9fcmV0XzEwNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzEwNywgX19yZXRfMTA3LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xMDc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNfbGFuZXFfZjY0KF9fcDBfMTA4LCBfX3AxXzEwOCwgX19wMl8xMDgsIF9fcDNfMTA4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF8xMDggPSBfX3AwXzEwODsgXAorICBmbG9hdDY0eDFfdCBfX3MxXzEwOCA9IF9fcDFfMTA4OyBcCisgIGZsb2F0NjR4Ml90IF9fczJfMTA4ID0gX19wMl8xMDg7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfMTA4OyBcCisgIF9fcmV0XzEwOCA9IHZmbWFfbGFuZXFfZjY0KF9fczBfMTA4LCAtX19zMV8xMDgsIF9fczJfMTA4LCBfX3AzXzEwOCk7IFwKKyAgX19yZXRfMTA4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc19sYW5lcV9mNjQoX19wMF8xMDksIF9fcDFfMTA5LCBfX3AyXzEwOSwgX19wM18xMDkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzEwOSA9IF9fcDBfMTA5OyBcCisgIGZsb2F0NjR4MV90IF9fczFfMTA5ID0gX19wMV8xMDk7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMl8xMDkgPSBfX3AyXzEwOTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjJfMTA5OyAgX19yZXYyXzEwOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTA5LCBfX3MyXzEwOSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfMTA5OyBcCisgIF9fcmV0XzEwOSA9IF9fbm9zd2FwX3ZmbWFfbGFuZXFfZjY0KF9fczBfMTA5LCAtX19zMV8xMDksIF9fcmV2Ml8xMDksIF9fcDNfMTA5KTsgXAorICBfX3JldF8xMDk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNfbGFuZXFfZjMyKF9fcDBfMTEwLCBfX3AxXzExMCwgX19wMl8xMTAsIF9fcDNfMTEwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMF8xMTAgPSBfX3AwXzExMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxXzExMCA9IF9fcDFfMTEwOyBcCisgIGZsb2F0MzJ4NF90IF9fczJfMTEwID0gX19wMl8xMTA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXRfMTEwOyBcCisgIF9fcmV0XzExMCA9IHZmbWFfbGFuZXFfZjMyKF9fczBfMTEwLCAtX19zMV8xMTAsIF9fczJfMTEwLCBfX3AzXzExMCk7IFwKKyAgX19yZXRfMTEwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc19sYW5lcV9mMzIoX19wMF8xMTEsIF9fcDFfMTExLCBfX3AyXzExMSwgX19wM18xMTEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwXzExMSA9IF9fcDBfMTExOyBcCisgIGZsb2F0MzJ4Ml90IF9fczFfMTExID0gX19wMV8xMTE7IFwKKyAgZmxvYXQzMng0X3QgX19zMl8xMTEgPSBfX3AyXzExMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjBfMTExOyAgX19yZXYwXzExMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTExLCBfX3MwXzExMSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxXzExMTsgIF9fcmV2MV8xMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzExMSwgX19zMV8xMTEsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2Ml8xMTE7ICBfX3JldjJfMTExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8xMTEsIF9fczJfMTExLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldF8xMTE7IFwKKyAgX19yZXRfMTExID0gX19ub3N3YXBfdmZtYV9sYW5lcV9mMzIoX19yZXYwXzExMSwgLV9fcmV2MV8xMTEsIF9fcmV2Ml8xMTEsIF9fcDNfMTExKTsgXAorICBfX3JldF8xMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMTEsIF9fcmV0XzExMSwgMSwgMCk7IFwKKyAgX19yZXRfMTExOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2Zm1zcV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0X3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2Zm1hcV9mNjQoX19wMCwgLV9fcDEsIChmbG9hdDY0eDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmZtc3Ffbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Zm1hcV9mNjQoX19yZXYwLCAtX19yZXYxLCAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Zm1zcV9uX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Zm1hcV9mMzIoX19wMCwgLV9fcDEsIChmbG9hdDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmZtc3Ffbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Zm1hcV9mMzIoX19yZXYwLCAtX19yZXYxLCAoZmxvYXQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2Zm1zX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IHZmbWFfZjMyKF9fcDAsIC1fX3AxLCAoZmxvYXQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZmbXNfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Zm1hX2YzMihfX3JldjAsIC1fX3JldjEsIChmbG9hdDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdmdldF9oaWdoX3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2Z2V0X2hpZ2hfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBwb2x5NjR4MV90IF9fbm9zd2FwX3ZnZXRfaGlnaF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmdldF9oaWdoX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2Z2V0X2hpZ2hfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0X2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTY0KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHBvbHk2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9mNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2Y2NCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2Y2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0X2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfZjY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9mNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfZjY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2Z2V0X2xvd19wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdmdldF9sb3dfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2Z2V0X2xvd19mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmdldF9sb3dfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0Mik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfcDhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wOF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfcDY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3A2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3AxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3AxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3U4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3U4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdTMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3UzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3U2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91NjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91MTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdTE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zOF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZjY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9mNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZjMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9mMzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZjE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9mMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3MxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3MxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91OF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91OF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3UzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3U2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3UxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3M4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zOF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2YzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZjMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2YxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZjE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3MzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3MzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3A4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfcDhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfcDY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfcDE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3AxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3A2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3U4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3U4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3UzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91MzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdTY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3U2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91MTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdTE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3M4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2Y2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZjMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9mMzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2YxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zMzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zMzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3U4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3U4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3UzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91NjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3U2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91MTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3UxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3M4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2YzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZjMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2YxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wOF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3A4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3A2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfcDE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDhfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDhfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3A2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9wNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3AxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9wMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3U4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3U4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91MzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdTMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91NjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdTY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91MTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdTE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zOF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3M4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2Y2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZjMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9mMzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2YxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3MzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3MzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdThfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdThfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3UzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91NjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91MTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zOF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczhfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2YzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZjMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zMzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zMzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBwb2x5NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDQ4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIGludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgdWludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgaW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDQ4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgaW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZHJxX3AxMjgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxMjhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTI4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZHJxX3AxMjgoX19wMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGRycV9wMTI4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTI4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTEyOF90KSBfX2J1aWx0aW5fbmVvbl92bGRycV9wMTI4KF9fcDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bWF4cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm1heHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2bWF4X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2bWF4X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2bWF4bm12cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm1heG5tdnFfZjY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2bWF4bm12cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXZxX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZtYXhubXZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm12cV9mMzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZtYXhubXZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1heG5tdnFfZjMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3Qgdm1heG5tdl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1heG5tdl9mMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3Qgdm1heG5tdl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXZfZjMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3Qgdm1heHZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfdTgoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2bWF4dnFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV91OCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3Qgdm1heHZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfdTMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZtYXh2cV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZxX3UzMigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3Qgdm1heHZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfdTE2KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZtYXh2cV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZxX3UxNigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZtYXh2cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1heHZxX3M4KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2bWF4dnFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1heHZxX3M4KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3Qgdm1heHZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfZjY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2bWF4dnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3Qgdm1heHZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfZjMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2bWF4dnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfZjMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZtYXh2cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZxX3MzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZtYXh2cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfczMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZtYXh2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZxX3MxNigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZtYXh2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfczE2KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OF90IHZtYXh2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3U4KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2bWF4dl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3U4KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZtYXh2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl91MzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2bWF4dl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZfdTMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZtYXh2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl91MTYoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2bWF4dl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZfdTE2KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2bWF4dl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9zOCgoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2bWF4dl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1heHZfczgoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZtYXh2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9mMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3Qgdm1heHZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9mMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2bWF4dl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZfczMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2bWF4dl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9zMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2bWF4dl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZfczE2KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2bWF4dl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9zMTYoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm1pbnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtaW5xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3Qgdm1pbl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3Qgdm1pbl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3Qgdm1pbm5tdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXZxX2Y2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3Qgdm1pbm5tdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bWlubm12cV9mNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2bWlubm12cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbm5tdnFfZjMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2bWlubm12cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXZxX2YzMigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZtaW5ubXZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXZfZjMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZtaW5ubXZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWlubm12X2YzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OF90IHZtaW52cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3U4KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4X3Qgdm1pbnZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfdTgoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZtaW52cV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3UzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2bWludnFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV91MzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZtaW52cV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3UxNigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2bWludnFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV91MTYoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2bWludnFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9zOCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3Qgdm1pbnZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9zOCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZtaW52cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm1pbnZxX2Y2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3Qgdm1pbnZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm1pbnZxX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZtaW52cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZxX2YzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3Qgdm1pbnZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZxX2YzMigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2bWludnFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9zMzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2bWludnFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3MzMigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2bWludnFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9zMTYoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2bWludnFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3MxNigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2bWludl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWludl91OCgoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4X3Qgdm1pbnZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWludl91OCgoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2bWludl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZfdTMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3Qgdm1pbnZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3UzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2bWludl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZfdTE2KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3Qgdm1pbnZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3UxNigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3Qgdm1pbnZfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1pbnZfczgoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3Qgdm1pbnZfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3M4KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2bWludl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZfZjMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZtaW52X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZfZjMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3Qgdm1pbnZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3MzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3Qgdm1pbnZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZfczMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3Qgdm1pbnZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3MxNigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3Qgdm1pbnZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZfczE2KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtbGFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm1sYXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjR4Ml90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3Qgdm1sYV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZtbGFfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEsIGZsb2F0NjR4MV90IF9fcDIpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhcV9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhcV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYXFfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYXFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhcV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYXFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYXFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhcV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhcV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm1sYXFfbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm1sYXFfbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfdTMyKHZnZXRfaGlnaF91MzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF91MTYodmdldF9oaWdoX3UxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF91MzIodmdldF9oaWdoX3UzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfdTE2KHZnZXRfaGlnaF91MTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfdTMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfdTE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtbHNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm1sc3FfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjR4Ml90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3Qgdm1sc19mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZtbHNfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEsIGZsb2F0NjR4MV90IF9fcDIpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNxX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzcV9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc3FfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc3FfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzcV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc3FfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc3FfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzcV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc19sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc19sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc19sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc19sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc19sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm1sc3Ffbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm1sc3Ffbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTMyKHZnZXRfaGlnaF91MzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF91MTYodmdldF9oaWdoX3UxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF91MzIodmdldF9oaWdoX3UzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTE2KHZnZXRfaGlnaF91MTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3Qgdm1vdl9uX3A2NChwb2x5NjRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2bW92X25fcDY0KHBvbHk2NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3Qgdm1vdnFfbl9wNjQocG9seTY0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KSB7X19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3Qgdm1vdnFfbl9wNjQocG9seTY0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bW92cV9uX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm1vdnFfbl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2bW92X25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2bW92X25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1vdmxfaGlnaF91OCh1aW50OHgxNl90IF9fcDBfMTEyKSB7CisgIHVpbnQxNng4X3QgX19yZXRfMTEyOworICB1aW50OHg4X3QgX19hMV8xMTIgPSB2Z2V0X2hpZ2hfdTgoX19wMF8xMTIpOworICBfX3JldF8xMTIgPSAodWludDE2eDhfdCkodnNobGxfbl91OChfX2ExXzExMiwgMCkpOworICByZXR1cm4gX19yZXRfMTEyOworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bW92bF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMF8xMTMpIHsKKyAgdWludDh4MTZfdCBfX3JldjBfMTEzOyAgX19yZXYwXzExMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDBfMTEzLCBfX3AwXzExMywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXRfMTEzOworICB1aW50OHg4X3QgX19hMV8xMTMgPSBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYwXzExMyk7CisgIF9fcmV0XzExMyA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92c2hsbF9uX3U4KF9fYTFfMTEzLCAwKSk7CisgIF9fcmV0XzExMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzExMywgX19yZXRfMTEzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0XzExMzsKK30KK19fYWkgdWludDE2eDhfdCBfX25vc3dhcF92bW92bF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMF8xMTQpIHsKKyAgdWludDE2eDhfdCBfX3JldF8xMTQ7CisgIHVpbnQ4eDhfdCBfX2ExXzExNCA9IF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3AwXzExNCk7CisgIF9fcmV0XzExNCA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92c2hsbF9uX3U4KF9fYTFfMTE0LCAwKSk7CisgIHJldHVybiBfX3JldF8xMTQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm1vdmxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwXzExNSkgeworICB1aW50NjR4Ml90IF9fcmV0XzExNTsKKyAgdWludDMyeDJfdCBfX2ExXzExNSA9IHZnZXRfaGlnaF91MzIoX19wMF8xMTUpOworICBfX3JldF8xMTUgPSAodWludDY0eDJfdCkodnNobGxfbl91MzIoX19hMV8xMTUsIDApKTsKKyAgcmV0dXJuIF9fcmV0XzExNTsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm1vdmxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwXzExNikgeworICB1aW50MzJ4NF90IF9fcmV2MF8xMTY7ICBfX3JldjBfMTE2ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMF8xMTYsIF9fcDBfMTE2LCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldF8xMTY7CisgIHVpbnQzMngyX3QgX19hMV8xMTYgPSBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MF8xMTYpOworICBfX3JldF8xMTYgPSAodWludDY0eDJfdCkoX19ub3N3YXBfdnNobGxfbl91MzIoX19hMV8xMTYsIDApKTsKKyAgX19yZXRfMTE2ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTE2LCBfX3JldF8xMTYsIDEsIDApOworICByZXR1cm4gX19yZXRfMTE2OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMF8xMTcpIHsKKyAgdWludDY0eDJfdCBfX3JldF8xMTc7CisgIHVpbnQzMngyX3QgX19hMV8xMTcgPSBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcDBfMTE3KTsKKyAgX19yZXRfMTE3ID0gKHVpbnQ2NHgyX3QpKF9fbm9zd2FwX3ZzaGxsX25fdTMyKF9fYTFfMTE3LCAwKSk7CisgIHJldHVybiBfX3JldF8xMTc7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1vdmxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwXzExOCkgeworICB1aW50MzJ4NF90IF9fcmV0XzExODsKKyAgdWludDE2eDRfdCBfX2ExXzExOCA9IHZnZXRfaGlnaF91MTYoX19wMF8xMTgpOworICBfX3JldF8xMTggPSAodWludDMyeDRfdCkodnNobGxfbl91MTYoX19hMV8xMTgsIDApKTsKKyAgcmV0dXJuIF9fcmV0XzExODsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1vdmxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwXzExOSkgeworICB1aW50MTZ4OF90IF9fcmV2MF8xMTk7ICBfX3JldjBfMTE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMF8xMTksIF9fcDBfMTE5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldF8xMTk7CisgIHVpbnQxNng0X3QgX19hMV8xMTkgPSBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MF8xMTkpOworICBfX3JldF8xMTkgPSAodWludDMyeDRfdCkoX19ub3N3YXBfdnNobGxfbl91MTYoX19hMV8xMTksIDApKTsKKyAgX19yZXRfMTE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTE5LCBfX3JldF8xMTksIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXRfMTE5OworfQorX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMF8xMjApIHsKKyAgdWludDMyeDRfdCBfX3JldF8xMjA7CisgIHVpbnQxNng0X3QgX19hMV8xMjAgPSBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcDBfMTIwKTsKKyAgX19yZXRfMTIwID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3ZzaGxsX25fdTE2KF9fYTFfMTIwLCAwKSk7CisgIHJldHVybiBfX3JldF8xMjA7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bW92bF9oaWdoX3M4KGludDh4MTZfdCBfX3AwXzEyMSkgeworICBpbnQxNng4X3QgX19yZXRfMTIxOworICBpbnQ4eDhfdCBfX2ExXzEyMSA9IHZnZXRfaGlnaF9zOChfX3AwXzEyMSk7CisgIF9fcmV0XzEyMSA9IChpbnQxNng4X3QpKHZzaGxsX25fczgoX19hMV8xMjEsIDApKTsKKyAgcmV0dXJuIF9fcmV0XzEyMTsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bW92bF9oaWdoX3M4KGludDh4MTZfdCBfX3AwXzEyMikgeworICBpbnQ4eDE2X3QgX19yZXYwXzEyMjsgIF9fcmV2MF8xMjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwXzEyMiwgX19wMF8xMjIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXRfMTIyOworICBpbnQ4eDhfdCBfX2ExXzEyMiA9IF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjBfMTIyKTsKKyAgX19yZXRfMTIyID0gKGludDE2eDhfdCkoX19ub3N3YXBfdnNobGxfbl9zOChfX2ExXzEyMiwgMCkpOworICBfX3JldF8xMjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMjIsIF9fcmV0XzEyMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldF8xMjI7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92bW92bF9oaWdoX3M4KGludDh4MTZfdCBfX3AwXzEyMykgeworICBpbnQxNng4X3QgX19yZXRfMTIzOworICBpbnQ4eDhfdCBfX2ExXzEyMyA9IF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3AwXzEyMyk7CisgIF9fcmV0XzEyMyA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3ZzaGxsX25fczgoX19hMV8xMjMsIDApKTsKKyAgcmV0dXJuIF9fcmV0XzEyMzsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtb3ZsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwXzEyNCkgeworICBpbnQ2NHgyX3QgX19yZXRfMTI0OworICBpbnQzMngyX3QgX19hMV8xMjQgPSB2Z2V0X2hpZ2hfczMyKF9fcDBfMTI0KTsKKyAgX19yZXRfMTI0ID0gKGludDY0eDJfdCkodnNobGxfbl9zMzIoX19hMV8xMjQsIDApKTsKKyAgcmV0dXJuIF9fcmV0XzEyNDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bW92bF9oaWdoX3MzMihpbnQzMng0X3QgX19wMF8xMjUpIHsKKyAgaW50MzJ4NF90IF9fcmV2MF8xMjU7ICBfX3JldjBfMTI1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMF8xMjUsIF9fcDBfMTI1LCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0XzEyNTsKKyAgaW50MzJ4Ml90IF9fYTFfMTI1ID0gX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjBfMTI1KTsKKyAgX19yZXRfMTI1ID0gKGludDY0eDJfdCkoX19ub3N3YXBfdnNobGxfbl9zMzIoX19hMV8xMjUsIDApKTsKKyAgX19yZXRfMTI1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTI1LCBfX3JldF8xMjUsIDEsIDApOworICByZXR1cm4gX19yZXRfMTI1OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDBfMTI2KSB7CisgIGludDY0eDJfdCBfX3JldF8xMjY7CisgIGludDMyeDJfdCBfX2ExXzEyNiA9IF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19wMF8xMjYpOworICBfX3JldF8xMjYgPSAoaW50NjR4Ml90KShfX25vc3dhcF92c2hsbF9uX3MzMihfX2ExXzEyNiwgMCkpOworICByZXR1cm4gX19yZXRfMTI2OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1vdmxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDBfMTI3KSB7CisgIGludDMyeDRfdCBfX3JldF8xMjc7CisgIGludDE2eDRfdCBfX2ExXzEyNyA9IHZnZXRfaGlnaF9zMTYoX19wMF8xMjcpOworICBfX3JldF8xMjcgPSAoaW50MzJ4NF90KSh2c2hsbF9uX3MxNihfX2ExXzEyNywgMCkpOworICByZXR1cm4gX19yZXRfMTI3OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtb3ZsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwXzEyOCkgeworICBpbnQxNng4X3QgX19yZXYwXzEyODsgIF9fcmV2MF8xMjggPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwXzEyOCwgX19wMF8xMjgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXRfMTI4OworICBpbnQxNng0X3QgX19hMV8xMjggPSBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MF8xMjgpOworICBfX3JldF8xMjggPSAoaW50MzJ4NF90KShfX25vc3dhcF92c2hsbF9uX3MxNihfX2ExXzEyOCwgMCkpOworICBfX3JldF8xMjggPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMjgsIF9fcmV0XzEyOCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldF8xMjg7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92bW92bF9oaWdoX3MxNihpbnQxNng4X3QgX19wMF8xMjkpIHsKKyAgaW50MzJ4NF90IF9fcmV0XzEyOTsKKyAgaW50MTZ4NF90IF9fYTFfMTI5ID0gX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3AwXzEyOSk7CisgIF9fcmV0XzEyOSA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3ZzaGxsX25fczE2KF9fYTFfMTI5LCAwKSk7CisgIHJldHVybiBfX3JldF8xMjk7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1vdm5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MTYoX19wMCwgdm1vdm5fdTMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bW92bl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UxNihfX3JldjAsIF9fbm9zd2FwX3Ztb3ZuX3UzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1vdm5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MzIoX19wMCwgdm1vdm5fdTY0KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bW92bl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UzMihfX3JldjAsIF9fbm9zd2FwX3Ztb3ZuX3U2NChfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm1vdm5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3U4KF9fcDAsIHZtb3ZuX3UxNihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3Qgdm1vdm5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTgoX19yZXYwLCBfX25vc3dhcF92bW92bl91MTYoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1vdm5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMTYoX19wMCwgdm1vdm5fczMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtb3ZuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihfX3JldjAsIF9fbm9zd2FwX3Ztb3ZuX3MzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bW92bl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3MzMihfX3AwLCB2bW92bl9zNjQoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1vdm5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczMyKF9fcmV2MCwgX19ub3N3YXBfdm1vdm5fczY0KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZtb3ZuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zOChfX3AwLCB2bW92bl9zMTYoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3Qgdm1vdm5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3M4KF9fcmV2MCwgX19ub3N3YXBfdm1vdm5fczE2KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm11bHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtdWxxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3Qgdm11bF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3Qgdm11bF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsZF9sYW5lX2Y2NChfX3AwXzEzMCwgX19wMV8xMzAsIF9fcDJfMTMwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfMTMwID0gX19wMF8xMzA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMV8xMzAgPSBfX3AxXzEzMDsgXAorICBmbG9hdDY0X3QgX19yZXRfMTMwOyBcCisgIF9fcmV0XzEzMCA9IF9fczBfMTMwICogdmdldF9sYW5lX2Y2NChfX3MxXzEzMCwgX19wMl8xMzApOyBcCisgIF9fcmV0XzEzMDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxkX2xhbmVfZjY0KF9fcDBfMTMxLCBfX3AxXzEzMSwgX19wMl8xMzEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF8xMzEgPSBfX3AwXzEzMTsgXAorICBmbG9hdDY0eDFfdCBfX3MxXzEzMSA9IF9fcDFfMTMxOyBcCisgIGZsb2F0NjRfdCBfX3JldF8xMzE7IFwKKyAgX19yZXRfMTMxID0gX19zMF8xMzEgKiBfX25vc3dhcF92Z2V0X2xhbmVfZjY0KF9fczFfMTMxLCBfX3AyXzEzMSk7IFwKKyAgX19yZXRfMTMxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsc19sYW5lX2YzMihfX3AwXzEzMiwgX19wMV8xMzIsIF9fcDJfMTMyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfMTMyID0gX19wMF8xMzI7IFwKKyAgZmxvYXQzMngyX3QgX19zMV8xMzIgPSBfX3AxXzEzMjsgXAorICBmbG9hdDMyX3QgX19yZXRfMTMyOyBcCisgIF9fcmV0XzEzMiA9IF9fczBfMTMyICogdmdldF9sYW5lX2YzMihfX3MxXzEzMiwgX19wMl8xMzIpOyBcCisgIF9fcmV0XzEzMjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxzX2xhbmVfZjMyKF9fcDBfMTMzLCBfX3AxXzEzMywgX19wMl8xMzMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF8xMzMgPSBfX3AwXzEzMzsgXAorICBmbG9hdDMyeDJfdCBfX3MxXzEzMyA9IF9fcDFfMTMzOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MV8xMzM7ICBfX3JldjFfMTMzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xMzMsIF9fczFfMTMzLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXRfMTMzOyBcCisgIF9fcmV0XzEzMyA9IF9fczBfMTMzICogX19ub3N3YXBfdmdldF9sYW5lX2YzMihfX3JldjFfMTMzLCBfX3AyXzEzMyk7IFwKKyAgX19yZXRfMTMzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bF9sYW5lX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bF9sYW5lX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGRfbGFuZXFfZjY0KF9fcDBfMTM0LCBfX3AxXzEzNCwgX19wMl8xMzQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF8xMzQgPSBfX3AwXzEzNDsgXAorICBmbG9hdDY0eDJfdCBfX3MxXzEzNCA9IF9fcDFfMTM0OyBcCisgIGZsb2F0NjRfdCBfX3JldF8xMzQ7IFwKKyAgX19yZXRfMTM0ID0gX19zMF8xMzQgKiB2Z2V0cV9sYW5lX2Y2NChfX3MxXzEzNCwgX19wMl8xMzQpOyBcCisgIF9fcmV0XzEzNDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxkX2xhbmVxX2Y2NChfX3AwXzEzNSwgX19wMV8xMzUsIF9fcDJfMTM1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfMTM1ID0gX19wMF8xMzU7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMV8xMzUgPSBfX3AxXzEzNTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjFfMTM1OyAgX19yZXYxXzEzNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTM1LCBfX3MxXzEzNSwgMSwgMCk7IFwKKyAgZmxvYXQ2NF90IF9fcmV0XzEzNTsgXAorICBfX3JldF8xMzUgPSBfX3MwXzEzNSAqIF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjY0KF9fcmV2MV8xMzUsIF9fcDJfMTM1KTsgXAorICBfX3JldF8xMzU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxzX2xhbmVxX2YzMihfX3AwXzEzNiwgX19wMV8xMzYsIF9fcDJfMTM2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfMTM2ID0gX19wMF8xMzY7IFwKKyAgZmxvYXQzMng0X3QgX19zMV8xMzYgPSBfX3AxXzEzNjsgXAorICBmbG9hdDMyX3QgX19yZXRfMTM2OyBcCisgIF9fcmV0XzEzNiA9IF9fczBfMTM2ICogdmdldHFfbGFuZV9mMzIoX19zMV8xMzYsIF9fcDJfMTM2KTsgXAorICBfX3JldF8xMzY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsc19sYW5lcV9mMzIoX19wMF8xMzcsIF9fcDFfMTM3LCBfX3AyXzEzNykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzEzNyA9IF9fcDBfMTM3OyBcCisgIGZsb2F0MzJ4NF90IF9fczFfMTM3ID0gX19wMV8xMzc7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxXzEzNzsgIF9fcmV2MV8xMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzEzNywgX19zMV8xMzcsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJfdCBfX3JldF8xMzc7IFwKKyAgX19yZXRfMTM3ID0gX19zMF8xMzcgKiBfX25vc3dhcF92Z2V0cV9sYW5lX2YzMihfX3JldjFfMTM3LCBfX3AyXzEzNyk7IFwKKyAgX19yZXRfMTM3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfbGFuZXFfdigoaW50OHg4X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfbGFuZXFfdigoaW50OHg4X3QpX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVscV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVscV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVscV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3Qgdm11bF9uX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfbl9mNjQoKGludDh4OF90KV9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2bXVsX25fZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bF9uX2Y2NCgoaW50OHg4X3QpX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm11bHFfbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIChmbG9hdDY0eDJfdCkge19fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bXVscV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKGZsb2F0NjR4Ml90KSB7X19wMSwgX19wMX07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3Qgdm11bGxfcDY0KHBvbHk2NF90IF9fcDAsIHBvbHk2NF90IF9fcDEpIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3A2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZtdWxsX3A2NChwb2x5NjRfdCBfX3AwLCBwb2x5NjRfdCBfX3AxKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF9wNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgcG9seTEyOF90IF9fbm9zd2FwX3ZtdWxsX3A2NChwb2x5NjRfdCBfX3AwLCBwb2x5NjRfdCBfX3AxKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF9wNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2bXVsbF9oaWdoX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfcDgodmdldF9oaWdoX3A4KF9fcDApLCB2Z2V0X2hpZ2hfcDgoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZtdWxsX2hpZ2hfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9wOChfX25vc3dhcF92Z2V0X2hpZ2hfcDgoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3A4KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bXVsbF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfdTgodmdldF9oaWdoX3U4KF9fcDApLCB2Z2V0X2hpZ2hfdTgoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtdWxsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91OChfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bXVsbF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX3UzMih2Z2V0X2hpZ2hfdTMyKF9fcDApLCB2Z2V0X2hpZ2hfdTMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bXVsbF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtdWxsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfdTE2KHZnZXRfaGlnaF91MTYoX19wMCksIHZnZXRfaGlnaF91MTYoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtdWxsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bXVsbF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfczgodmdldF9oaWdoX3M4KF9fcDApLCB2Z2V0X2hpZ2hfczgoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm11bGxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zOChfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtdWxsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19wMCksIHZnZXRfaGlnaF9zMzIoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm11bGxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bXVsbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fcDApLCB2Z2V0X2hpZ2hfczE2KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtdWxsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3Qgdm11bGxfaGlnaF9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX3A2NCgocG9seTY0X3QpKHZnZXRfaGlnaF9wNjQoX19wMCkpLCAocG9seTY0X3QpKHZnZXRfaGlnaF9wNjQoX19wMSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZtdWxsX2hpZ2hfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9wNjQoKHBvbHk2NF90KShfX25vc3dhcF92Z2V0X2hpZ2hfcDY0KF9fcmV2MCkpLCAocG9seTY0X3QpKF9fbm9zd2FwX3ZnZXRfaGlnaF9wNjQoX19yZXYxKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfdTMyKHZnZXRfaGlnaF91MzIoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3UxNih2Z2V0X2hpZ2hfdTE2KF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3UzMih2Z2V0X2hpZ2hfdTMyKF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3UxNih2Z2V0X2hpZ2hfdTE2KF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3MzMih2Z2V0X2hpZ2hfczMyKF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bXVsbF9oaWdoX25fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX25fdTMyKHZnZXRfaGlnaF91MzIoX19wMCksIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtdWxsX2hpZ2hfbl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfbl91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjApLCBfX3AxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfaGlnaF9uX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF9uX3UxNih2Z2V0X2hpZ2hfdTE2KF9fcDApLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bXVsbF9oaWdoX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX25fdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYwKSwgX19wMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm11bGxfaGlnaF9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF9uX3MzMih2Z2V0X2hpZ2hfczMyKF9fcDApLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtdWxsX2hpZ2hfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9uX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fcDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtdWxsX2hpZ2hfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfbl9zMTYodmdldF9oaWdoX3MxNihfX3AwKSwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bXVsbF9oaWdoX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfbl9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX3AxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF91MzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3UxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bXVseHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVseHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bXVseHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQ2NHgyX3QgX19ub3N3YXBfdm11bHhxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bHhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2bXVseHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVseHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2bXVseHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMng0X3QgX19ub3N3YXBfdm11bHhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm11bHhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2bXVseF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZtdWx4X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bHhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bXVseF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm11bHhfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDMyeDJfdCBfX25vc3dhcF92bXVseF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3Qgdm11bHhkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4ZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2bXVseGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm11bHhkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDY0X3QgX19ub3N3YXBfdm11bHhkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4ZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZtdWx4c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bXVseHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3Qgdm11bHhzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4c19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMl90IF9fbm9zd2FwX3ZtdWx4c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bXVseHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4ZF9sYW5lX2Y2NChfX3AwXzEzOCwgX19wMV8xMzgsIF9fcDJfMTM4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfMTM4ID0gX19wMF8xMzg7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMV8xMzggPSBfX3AxXzEzODsgXAorICBmbG9hdDY0X3QgX19yZXRfMTM4OyBcCisgIF9fcmV0XzEzOCA9IHZtdWx4ZF9mNjQoX19zMF8xMzgsIHZnZXRfbGFuZV9mNjQoX19zMV8xMzgsIF9fcDJfMTM4KSk7IFwKKyAgX19yZXRfMTM4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhkX2xhbmVfZjY0KF9fcDBfMTM5LCBfX3AxXzEzOSwgX19wMl8xMzkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF8xMzkgPSBfX3AwXzEzOTsgXAorICBmbG9hdDY0eDFfdCBfX3MxXzEzOSA9IF9fcDFfMTM5OyBcCisgIGZsb2F0NjRfdCBfX3JldF8xMzk7IFwKKyAgX19yZXRfMTM5ID0gX19ub3N3YXBfdm11bHhkX2Y2NChfX3MwXzEzOSwgX19ub3N3YXBfdmdldF9sYW5lX2Y2NChfX3MxXzEzOSwgX19wMl8xMzkpKTsgXAorICBfX3JldF8xMzk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4c19sYW5lX2YzMihfX3AwXzE0MCwgX19wMV8xNDAsIF9fcDJfMTQwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfMTQwID0gX19wMF8xNDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMV8xNDAgPSBfX3AxXzE0MDsgXAorICBmbG9hdDMyX3QgX19yZXRfMTQwOyBcCisgIF9fcmV0XzE0MCA9IHZtdWx4c19mMzIoX19zMF8xNDAsIHZnZXRfbGFuZV9mMzIoX19zMV8xNDAsIF9fcDJfMTQwKSk7IFwKKyAgX19yZXRfMTQwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhzX2xhbmVfZjMyKF9fcDBfMTQxLCBfX3AxXzE0MSwgX19wMl8xNDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF8xNDEgPSBfX3AwXzE0MTsgXAorICBmbG9hdDMyeDJfdCBfX3MxXzE0MSA9IF9fcDFfMTQxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MV8xNDE7ICBfX3JldjFfMTQxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNDEsIF9fczFfMTQxLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXRfMTQxOyBcCisgIF9fcmV0XzE0MSA9IF9fbm9zd2FwX3ZtdWx4c19mMzIoX19zMF8xNDEsIF9fbm9zd2FwX3ZnZXRfbGFuZV9mMzIoX19yZXYxXzE0MSwgX19wMl8xNDEpKTsgXAorICBfX3JldF8xNDE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVseHFfZjY0KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVseHFfZjY0KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWx4cV9mMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWx4cV9mMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bHhfZjMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4X2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWx4X2YzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseGRfbGFuZXFfZjY0KF9fcDBfMTQyLCBfX3AxXzE0MiwgX19wMl8xNDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF8xNDIgPSBfX3AwXzE0MjsgXAorICBmbG9hdDY0eDJfdCBfX3MxXzE0MiA9IF9fcDFfMTQyOyBcCisgIGZsb2F0NjRfdCBfX3JldF8xNDI7IFwKKyAgX19yZXRfMTQyID0gdm11bHhkX2Y2NChfX3MwXzE0MiwgdmdldHFfbGFuZV9mNjQoX19zMV8xNDIsIF9fcDJfMTQyKSk7IFwKKyAgX19yZXRfMTQyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhkX2xhbmVxX2Y2NChfX3AwXzE0MywgX19wMV8xNDMsIF9fcDJfMTQzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfMTQzID0gX19wMF8xNDM7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMV8xNDMgPSBfX3AxXzE0MzsgXAorICBmbG9hdDY0eDJfdCBfX3JldjFfMTQzOyAgX19yZXYxXzE0MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTQzLCBfX3MxXzE0MywgMSwgMCk7IFwKKyAgZmxvYXQ2NF90IF9fcmV0XzE0MzsgXAorICBfX3JldF8xNDMgPSBfX25vc3dhcF92bXVseGRfZjY0KF9fczBfMTQzLCBfX25vc3dhcF92Z2V0cV9sYW5lX2Y2NChfX3JldjFfMTQzLCBfX3AyXzE0MykpOyBcCisgIF9fcmV0XzE0MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhzX2xhbmVxX2YzMihfX3AwXzE0NCwgX19wMV8xNDQsIF9fcDJfMTQ0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfMTQ0ID0gX19wMF8xNDQ7IFwKKyAgZmxvYXQzMng0X3QgX19zMV8xNDQgPSBfX3AxXzE0NDsgXAorICBmbG9hdDMyX3QgX19yZXRfMTQ0OyBcCisgIF9fcmV0XzE0NCA9IHZtdWx4c19mMzIoX19zMF8xNDQsIHZnZXRxX2xhbmVfZjMyKF9fczFfMTQ0LCBfX3AyXzE0NCkpOyBcCisgIF9fcmV0XzE0NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4c19sYW5lcV9mMzIoX19wMF8xNDUsIF9fcDFfMTQ1LCBfX3AyXzE0NSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzE0NSA9IF9fcDBfMTQ1OyBcCisgIGZsb2F0MzJ4NF90IF9fczFfMTQ1ID0gX19wMV8xNDU7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxXzE0NTsgIF9fcmV2MV8xNDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE0NSwgX19zMV8xNDUsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJfdCBfX3JldF8xNDU7IFwKKyAgX19yZXRfMTQ1ID0gX19ub3N3YXBfdm11bHhzX2YzMihfX3MwXzE0NSwgX19ub3N3YXBfdmdldHFfbGFuZV9mMzIoX19yZXYxXzE0NSwgX19wMl8xNDUpKTsgXAorICBfX3JldF8xNDU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4cV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bHhxX2Y2NChfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseHFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWx4cV9mNjQoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVseHFfZjMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4cV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bHhxX2YzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseF9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bHhfZjMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4X2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVseF9mMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm5lZ3FfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZuZWdxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAtX19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZuZWdxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bmVncV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZuZWdfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZuZWdfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZuZWdfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAtX19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZuZWdfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAtX19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZuZWdkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdm5lZ2RfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZuZWdkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdm5lZ2RfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnBhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnBhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cGFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnBhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnBhZGRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZwYWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZwYWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cGFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZwYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cGFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cGFkZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cGFkZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnBhZGRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnBhZGRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cGFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZwYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnBhZGRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cGFkZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZwYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnBhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZwYWRkZF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnBhZGRkX3U2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2cGFkZGRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkZF91NjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2cGFkZGRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkZF9mNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZwYWRkZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkZF9mNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnBhZGRkX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGRfczY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnBhZGRkX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkZF9zNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2cGFkZHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkc19mMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdnBhZGRzX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBhZGRzX2YzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZwbWF4cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZwbWF4cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnBtYXhxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZwbWF4cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZwbWF4cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cG1heHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZwbWF4cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cG1heHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cG1heHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cG1heHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnBtYXhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnBtYXhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cG1heHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZwbWF4cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnBtYXhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cG1heHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZwbWF4cWRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cWRfZjY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2cG1heHFkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtYXhxZF9mNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2cG1heHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4c19mMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdnBtYXhzX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtYXhzX2YzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cG1heG5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnBtYXhubXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cG1heG5tcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnBtYXhubXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cG1heG5tX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtYXhubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZwbWF4bm1fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2cG1heG5tcWRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xZF9mNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZwbWF4bm1xZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xZF9mNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2cG1heG5tc19mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtYXhubXNfZjMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZwbWF4bm1zX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtYXhubXNfZjMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnBtaW5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnBtaW5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cG1pbnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnBtaW5xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnBtaW5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZwbWlucV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnBtaW5xX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZwbWlucV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZwbWlucV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZwbWlucV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cG1pbnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cG1pbnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZwbWlucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnBtaW5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cG1pbnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZwbWlucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdnBtaW5xZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtaW5xZF9mNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZwbWlucWRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFkX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZwbWluc19mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtaW5zX2YzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2cG1pbnNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnNfZjMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZwbWlubm1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cG1pbm5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZwbWlubm1xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cG1pbm5tcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZwbWlubm1fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnBtaW5ubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtaW5ubV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZwbWlubm1xZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFkX2Y2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdnBtaW5ubXFkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFkX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZwbWlubm1zX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tc19mMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdnBtaW5ubXNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tc19mMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxYWJzcV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFhYnNxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZxYWJzX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFhYnNfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cWFic19zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzX3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2cWFic2JfczgoaW50OF90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzYl9zOChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZxYWJzYl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFhYnNiX3M4KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFhYnNzX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFhYnNzX3MzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cWFic3NfczMyKGludDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWFic3NfczMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnFhYnNkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFhYnNkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2cWFic2RfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWFic2RfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFhYnNoX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFhYnNoX3MxNihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cWFic2hfczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFic2hfczE2KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3QgdnFhZGRiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkYl91OChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2cWFkZGJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFhZGRiX3U4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZxYWRkc191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkc191MzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZxYWRkc191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkc191MzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdnFhZGRkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFhZGRkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdnFhZGRkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFhZGRkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2cWFkZGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGhfdTE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2cWFkZGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGhfdTE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2cWFkZGJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGJfczgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2cWFkZGJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGJfczgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cWFkZHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFhZGRzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyX3QgX19ub3N3YXBfdnFhZGRzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnFhZGRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZxYWRkZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFhZGRkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxYWRkaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFhZGRoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cWFkZGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZfdCBfX25vc3dhcF92cWFkZGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2cWRtbGFsc19zMzIoaW50NjRfdCBfX3AwLCBpbnQzMl90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsc19zMzIoX19wMCwgX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnFkbWxhbHNfczMyKGludDY0X3QgX19wMCwgaW50MzJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbHNfczMyKF9fcDAsIF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFkbWxhbGhfczE2KGludDMyX3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbGhfczE2KF9fcDAsIF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxZG1sYWxoX3MxNihpbnQzMl90IF9fcDAsIGludDE2X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxoX3MxNihfX3AwLCBfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbWxhbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtbGFsX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCB2Z2V0X2hpZ2hfczMyKF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxZG1sYWxfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbWxhbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtbGFsX3MxNihfX3AwLCB2Z2V0X2hpZ2hfczE2KF9fcDEpLCB2Z2V0X2hpZ2hfczE2KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG1sYWxfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sYWxfczMyKF9fczAsIHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sYWxfczE2KF9fczAsIHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbGFsX3MzMihfX3MwLCB2Z2V0X2hpZ2hfczMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sYWxfczE2KF9fczAsIHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG1sYWxfaGlnaF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbWxhbF9uX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxZG1sYWxfaGlnaF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfbl9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxZG1sYWxfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbWxhbF9uX3MxNihfX3AwLCB2Z2V0X2hpZ2hfczE2KF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG1sYWxfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfbl9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxhbHNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsc19sYW5lX3MzMihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsc19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsc19sYW5lX3MzMihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxhbGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsaF9sYW5lX3MxNihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsaF9sYW5lX3MxNihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxhbHNfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbHNfbGFuZXFfczMyKF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsc19sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbHNfbGFuZXFfczMyKF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxhbGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbGhfbGFuZXFfczE2KF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbGhfbGFuZXFfczE2KF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxhbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sYWxfczMyKF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MzMihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbGFsX3MxNihfX3MwLCBfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMTYoX19yZXYwLCBfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZxZG1sc2xzX3MzMihpbnQ2NF90IF9fcDAsIGludDMyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xzX3MzMihfX3AwLCBfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2cWRtbHNsc19zMzIoaW50NjRfdCBfX3AwLCBpbnQzMl90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsc19zMzIoX19wMCwgX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cWRtbHNsaF9zMTYoaW50MzJfdCBfX3AwLCBpbnQxNl90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsaF9zMTYoX19wMCwgX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFkbWxzbGhfczE2KGludDMyX3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbGhfczE2KF9fcDAsIF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWRtbHNsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZxZG1sc2xfczMyKF9fcDAsIHZnZXRfaGlnaF9zMzIoX19wMSksIHZnZXRfaGlnaF9zMzIoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFkbWxzbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtbHNsX2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZxZG1sc2xfczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIHZnZXRfaGlnaF9zMTYoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFkbWxzbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxzbF9zMzIoX19zMCwgdmdldF9oaWdoX3MzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxzbF9zMTYoX19zMCwgdmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sc2xfczMyKF9fczAsIHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxzbF9zMTYoX19zMCwgdmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbWxzbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtbHNsX25fczMyKF9fcDAsIHZnZXRfaGlnaF9zMzIoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFkbWxzbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9uX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbWxzbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtbHNsX25fczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFkbWxzbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9uX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbHNsc19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xzX2xhbmVfczMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xzX2xhbmVfczMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbHNsaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xoX2xhbmVfczE2KF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xoX2xhbmVfczE2KF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbHNsc19sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsc19sYW5lcV9zMzIoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xzX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsc19sYW5lcV9zMzIoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbHNsaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsaF9sYW5lcV9zMTYoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsaF9sYW5lcV9zMTYoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbHNsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxzbF9zMzIoX19zMCwgX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczMyKF9fcmV2MCwgX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sc2xfczE2KF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MxNihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFkbXVsaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cWRtdWxoc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyX3QgX19ub3N3YXBfdnFkbXVsaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxZG11bGhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFkbXVsaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNl90IF9fbm9zd2FwX3ZxZG11bGhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsaHNfbGFuZV9zMzIoX19wMF8xNDYsIF9fcDFfMTQ2LCBfX3AyXzE0NikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNDYgPSBfX3AwXzE0NjsgXAorICBpbnQzMngyX3QgX19zMV8xNDYgPSBfX3AxXzE0NjsgXAorICBpbnQzMl90IF9fcmV0XzE0NjsgXAorICBfX3JldF8xNDYgPSB2cWRtdWxoc19zMzIoX19zMF8xNDYsIHZnZXRfbGFuZV9zMzIoX19zMV8xNDYsIF9fcDJfMTQ2KSk7IFwKKyAgX19yZXRfMTQ2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaHNfbGFuZV9zMzIoX19wMF8xNDcsIF9fcDFfMTQ3LCBfX3AyXzE0NykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNDcgPSBfX3AwXzE0NzsgXAorICBpbnQzMngyX3QgX19zMV8xNDcgPSBfX3AxXzE0NzsgXAorICBpbnQzMngyX3QgX19yZXYxXzE0NzsgIF9fcmV2MV8xNDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE0NywgX19zMV8xNDcsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXRfMTQ3OyBcCisgIF9fcmV0XzE0NyA9IF9fbm9zd2FwX3ZxZG11bGhzX3MzMihfX3MwXzE0NywgX19ub3N3YXBfdmdldF9sYW5lX3MzMihfX3JldjFfMTQ3LCBfX3AyXzE0NykpOyBcCisgIF9fcmV0XzE0NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsaGhfbGFuZV9zMTYoX19wMF8xNDgsIF9fcDFfMTQ4LCBfX3AyXzE0OCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNDggPSBfX3AwXzE0ODsgXAorICBpbnQxNng0X3QgX19zMV8xNDggPSBfX3AxXzE0ODsgXAorICBpbnQxNl90IF9fcmV0XzE0ODsgXAorICBfX3JldF8xNDggPSB2cWRtdWxoaF9zMTYoX19zMF8xNDgsIHZnZXRfbGFuZV9zMTYoX19zMV8xNDgsIF9fcDJfMTQ4KSk7IFwKKyAgX19yZXRfMTQ4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaGhfbGFuZV9zMTYoX19wMF8xNDksIF9fcDFfMTQ5LCBfX3AyXzE0OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNDkgPSBfX3AwXzE0OTsgXAorICBpbnQxNng0X3QgX19zMV8xNDkgPSBfX3AxXzE0OTsgXAorICBpbnQxNng0X3QgX19yZXYxXzE0OTsgIF9fcmV2MV8xNDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE0OSwgX19zMV8xNDksIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXRfMTQ5OyBcCisgIF9fcmV0XzE0OSA9IF9fbm9zd2FwX3ZxZG11bGhoX3MxNihfX3MwXzE0OSwgX19ub3N3YXBfdmdldF9sYW5lX3MxNihfX3JldjFfMTQ5LCBfX3AyXzE0OSkpOyBcCisgIF9fcmV0XzE0OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsaHNfbGFuZXFfczMyKF9fcDBfMTUwLCBfX3AxXzE1MCwgX19wMl8xNTApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTUwID0gX19wMF8xNTA7IFwKKyAgaW50MzJ4NF90IF9fczFfMTUwID0gX19wMV8xNTA7IFwKKyAgaW50MzJfdCBfX3JldF8xNTA7IFwKKyAgX19yZXRfMTUwID0gdnFkbXVsaHNfczMyKF9fczBfMTUwLCB2Z2V0cV9sYW5lX3MzMihfX3MxXzE1MCwgX19wMl8xNTApKTsgXAorICBfX3JldF8xNTA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxoc19sYW5lcV9zMzIoX19wMF8xNTEsIF9fcDFfMTUxLCBfX3AyXzE1MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNTEgPSBfX3AwXzE1MTsgXAorICBpbnQzMng0X3QgX19zMV8xNTEgPSBfX3AxXzE1MTsgXAorICBpbnQzMng0X3QgX19yZXYxXzE1MTsgIF9fcmV2MV8xNTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE1MSwgX19zMV8xNTEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXRfMTUxOyBcCisgIF9fcmV0XzE1MSA9IF9fbm9zd2FwX3ZxZG11bGhzX3MzMihfX3MwXzE1MSwgX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19yZXYxXzE1MSwgX19wMl8xNTEpKTsgXAorICBfX3JldF8xNTE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhoX2xhbmVxX3MxNihfX3AwXzE1MiwgX19wMV8xNTIsIF9fcDJfMTUyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE1MiA9IF9fcDBfMTUyOyBcCisgIGludDE2eDhfdCBfX3MxXzE1MiA9IF9fcDFfMTUyOyBcCisgIGludDE2X3QgX19yZXRfMTUyOyBcCisgIF9fcmV0XzE1MiA9IHZxZG11bGhoX3MxNihfX3MwXzE1MiwgdmdldHFfbGFuZV9zMTYoX19zMV8xNTIsIF9fcDJfMTUyKSk7IFwKKyAgX19yZXRfMTUyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaGhfbGFuZXFfczE2KF9fcDBfMTUzLCBfX3AxXzE1MywgX19wMl8xNTMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTUzID0gX19wMF8xNTM7IFwKKyAgaW50MTZ4OF90IF9fczFfMTUzID0gX19wMV8xNTM7IFwKKyAgaW50MTZ4OF90IF9fcmV2MV8xNTM7ICBfX3JldjFfMTUzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNTMsIF9fczFfMTUzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNl90IF9fcmV0XzE1MzsgXAorICBfX3JldF8xNTMgPSBfX25vc3dhcF92cWRtdWxoaF9zMTYoX19zMF8xNTMsIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KF9fcmV2MV8xNTMsIF9fcDJfMTUzKSk7IFwKKyAgX19yZXRfMTUzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsaHFfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhxX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsaHFfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhxX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxoX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGhfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsaF9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2cWRtdWxsc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbXVsbHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZxZG11bGxzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjRfdCBfX25vc3dhcF92cWRtdWxsc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbXVsbHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFkbXVsbGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cWRtdWxsaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyX3QgX19ub3N3YXBfdnFkbXVsbGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZxZG11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19wMCksIHZnZXRfaGlnaF9zMzIoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbXVsbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZxZG11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19wMCksIHZnZXRfaGlnaF9zMTYoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFkbXVsbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGxfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWRtdWxsX2hpZ2hfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbXVsbF9uX3MzMih2Z2V0X2hpZ2hfczMyKF9fcDApLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxZG11bGxfaGlnaF9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfbl9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX3AxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtdWxsX2hpZ2hfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbXVsbF9uX3MxNih2Z2V0X2hpZ2hfczE2KF9fcDApLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG11bGxfaGlnaF9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfbl9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX3AxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxzX2xhbmVfczMyKF9fcDBfMTU0LCBfX3AxXzE1NCwgX19wMl8xNTQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTU0ID0gX19wMF8xNTQ7IFwKKyAgaW50MzJ4Ml90IF9fczFfMTU0ID0gX19wMV8xNTQ7IFwKKyAgaW50NjRfdCBfX3JldF8xNTQ7IFwKKyAgX19yZXRfMTU0ID0gdnFkbXVsbHNfczMyKF9fczBfMTU0LCB2Z2V0X2xhbmVfczMyKF9fczFfMTU0LCBfX3AyXzE1NCkpOyBcCisgIF9fcmV0XzE1NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGxzX2xhbmVfczMyKF9fcDBfMTU1LCBfX3AxXzE1NSwgX19wMl8xNTUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTU1ID0gX19wMF8xNTU7IFwKKyAgaW50MzJ4Ml90IF9fczFfMTU1ID0gX19wMV8xNTU7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MV8xNTU7ICBfX3JldjFfMTU1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNTUsIF9fczFfMTU1LCAxLCAwKTsgXAorICBpbnQ2NF90IF9fcmV0XzE1NTsgXAorICBfX3JldF8xNTUgPSBfX25vc3dhcF92cWRtdWxsc19zMzIoX19zMF8xNTUsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYxXzE1NSwgX19wMl8xNTUpKTsgXAorICBfX3JldF8xNTU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxoX2xhbmVfczE2KF9fcDBfMTU2LCBfX3AxXzE1NiwgX19wMl8xNTYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTU2ID0gX19wMF8xNTY7IFwKKyAgaW50MTZ4NF90IF9fczFfMTU2ID0gX19wMV8xNTY7IFwKKyAgaW50MzJfdCBfX3JldF8xNTY7IFwKKyAgX19yZXRfMTU2ID0gdnFkbXVsbGhfczE2KF9fczBfMTU2LCB2Z2V0X2xhbmVfczE2KF9fczFfMTU2LCBfX3AyXzE1NikpOyBcCisgIF9fcmV0XzE1NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGxoX2xhbmVfczE2KF9fcDBfMTU3LCBfX3AxXzE1NywgX19wMl8xNTcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTU3ID0gX19wMF8xNTc7IFwKKyAgaW50MTZ4NF90IF9fczFfMTU3ID0gX19wMV8xNTc7IFwKKyAgaW50MTZ4NF90IF9fcmV2MV8xNTc7ICBfX3JldjFfMTU3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNTcsIF9fczFfMTU3LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0XzE1NzsgXAorICBfX3JldF8xNTcgPSBfX25vc3dhcF92cWRtdWxsaF9zMTYoX19zMF8xNTcsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoX19yZXYxXzE1NywgX19wMl8xNTcpKTsgXAorICBfX3JldF8xNTc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxzX2xhbmVxX3MzMihfX3AwXzE1OCwgX19wMV8xNTgsIF9fcDJfMTU4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE1OCA9IF9fcDBfMTU4OyBcCisgIGludDMyeDRfdCBfX3MxXzE1OCA9IF9fcDFfMTU4OyBcCisgIGludDY0X3QgX19yZXRfMTU4OyBcCisgIF9fcmV0XzE1OCA9IHZxZG11bGxzX3MzMihfX3MwXzE1OCwgdmdldHFfbGFuZV9zMzIoX19zMV8xNTgsIF9fcDJfMTU4KSk7IFwKKyAgX19yZXRfMTU4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbHNfbGFuZXFfczMyKF9fcDBfMTU5LCBfX3AxXzE1OSwgX19wMl8xNTkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTU5ID0gX19wMF8xNTk7IFwKKyAgaW50MzJ4NF90IF9fczFfMTU5ID0gX19wMV8xNTk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MV8xNTk7ICBfX3JldjFfMTU5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNTksIF9fczFfMTU5LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NF90IF9fcmV0XzE1OTsgXAorICBfX3JldF8xNTkgPSBfX25vc3dhcF92cWRtdWxsc19zMzIoX19zMF8xNTksIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczMyKF9fcmV2MV8xNTksIF9fcDJfMTU5KSk7IFwKKyAgX19yZXRfMTU5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxsaF9sYW5lcV9zMTYoX19wMF8xNjAsIF9fcDFfMTYwLCBfX3AyXzE2MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNjAgPSBfX3AwXzE2MDsgXAorICBpbnQxNng4X3QgX19zMV8xNjAgPSBfX3AxXzE2MDsgXAorICBpbnQzMl90IF9fcmV0XzE2MDsgXAorICBfX3JldF8xNjAgPSB2cWRtdWxsaF9zMTYoX19zMF8xNjAsIHZnZXRxX2xhbmVfczE2KF9fczFfMTYwLCBfX3AyXzE2MCkpOyBcCisgIF9fcmV0XzE2MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGxoX2xhbmVxX3MxNihfX3AwXzE2MSwgX19wMV8xNjEsIF9fcDJfMTYxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE2MSA9IF9fcDBfMTYxOyBcCisgIGludDE2eDhfdCBfX3MxXzE2MSA9IF9fcDFfMTYxOyBcCisgIGludDE2eDhfdCBfX3JldjFfMTYxOyAgX19yZXYxXzE2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTYxLCBfX3MxXzE2MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldF8xNjE7IFwKKyAgX19yZXRfMTYxID0gX19ub3N3YXBfdnFkbXVsbGhfczE2KF9fczBfMTYxLCBfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3JldjFfMTYxLCBfX3AyXzE2MSkpOyBcCisgIF9fcmV0XzE2MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsbF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxsX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFtb3Zuc19zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bnNfczMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxbW92bnNfczMyKGludDMyX3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5zX3MzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxbW92bmRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5kX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cW1vdm5kX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZxbW92bmhfczE2KGludDE2X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuaF9zMTYoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2cW1vdm5oX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bmhfczE2KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZxbW92bnNfdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5zX3UzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3QgdnFtb3Zuc191MzIodWludDMyX3QgX19wMCkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bnNfdTMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZxbW92bmRfdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5kX3U2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdnFtb3ZuZF91NjQodWludDY0X3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bmRfdTY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3QgdnFtb3ZuaF91MTYodWludDE2X3QgX19wMCkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5oX3UxNihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2cW1vdm5oX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bmhfdTE2KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnFtb3ZuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTE2KF9fcDAsIHZxbW92bl91MzIoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZxbW92bl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZxbW92bl91MzIoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZxbW92bl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UzMihfX3AwLCB2cW1vdm5fdTY0KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cW1vdm5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MzIoX19yZXYwLCBfX25vc3dhcF92cW1vdm5fdTY0KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cW1vdm5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3U4KF9fcDAsIHZxbW92bl91MTYoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxbW92bl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91OChfX3JldjAsIF9fbm9zd2FwX3ZxbW92bl91MTYoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFtb3ZuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczE2KF9fcDAsIHZxbW92bl9zMzIoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFtb3ZuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxbW92bl9zMzIoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFtb3ZuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczMyKF9fcDAsIHZxbW92bl9zNjQoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFtb3ZuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxbW92bl9zNjQoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnFtb3ZuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zOChfX3AwLCB2cW1vdm5fczE2KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxbW92bl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczgoX19yZXYwLCBfX25vc3dhcF92cW1vdm5fczE2KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cW1vdnVuc19zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5zX3MzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cW1vdnVuc19zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5zX3MzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxbW92dW5kX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bmRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxbW92dW5kX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bmRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2cW1vdnVuaF9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuaF9zMTYoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2cW1vdnVuaF9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuaF9zMTYoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cW1vdnVuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19wMCksIHZxbW92dW5fczMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cW1vdnVuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fcmV2MCksIF9fbm9zd2FwX3ZxbW92dW5fczMyKF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cW1vdnVuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19wMCksIHZxbW92dW5fczY0KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cW1vdnVuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fcmV2MCksIF9fbm9zd2FwX3ZxbW92dW5fczY0KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cW1vdnVuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19wMCksIHZxbW92dW5fczE2KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cW1vdnVuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19yZXYwKSwgX19ub3N3YXBfdnFtb3Z1bl9zMTYoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFuZWdxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFuZWdxX3YoKGludDh4MTZfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cW5lZ3FfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVncV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnFuZWdfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ192KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZxbmVnX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFuZWdfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZxbmVnYl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFuZWdiX3M4KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3QgdnFuZWdiX3M4KGludDhfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ2JfczgoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cW5lZ3NfczMyKGludDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3NfczMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxbmVnc19zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnc19zMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2cW5lZ2RfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ2RfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZxbmVnZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cW5lZ2hfczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ2hfczE2KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxbmVnaF9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnaF9zMTYoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cXJkbXVsaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFyZG11bGhzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyX3QgX19ub3N3YXBfdnFyZG11bGhzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFyZG11bGhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxcmRtdWxoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNl90IF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaHNfbGFuZV9zMzIoX19wMF8xNjIsIF9fcDFfMTYyLCBfX3AyXzE2MikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNjIgPSBfX3AwXzE2MjsgXAorICBpbnQzMngyX3QgX19zMV8xNjIgPSBfX3AxXzE2MjsgXAorICBpbnQzMl90IF9fcmV0XzE2MjsgXAorICBfX3JldF8xNjIgPSB2cXJkbXVsaHNfczMyKF9fczBfMTYyLCB2Z2V0X2xhbmVfczMyKF9fczFfMTYyLCBfX3AyXzE2MikpOyBcCisgIF9fcmV0XzE2MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtdWxoc19sYW5lX3MzMihfX3AwXzE2MywgX19wMV8xNjMsIF9fcDJfMTYzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE2MyA9IF9fcDBfMTYzOyBcCisgIGludDMyeDJfdCBfX3MxXzE2MyA9IF9fcDFfMTYzOyBcCisgIGludDMyeDJfdCBfX3JldjFfMTYzOyAgX19yZXYxXzE2MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTYzLCBfX3MxXzE2MywgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldF8xNjM7IFwKKyAgX19yZXRfMTYzID0gX19ub3N3YXBfdnFyZG11bGhzX3MzMihfX3MwXzE2MywgX19ub3N3YXBfdmdldF9sYW5lX3MzMihfX3JldjFfMTYzLCBfX3AyXzE2MykpOyBcCisgIF9fcmV0XzE2MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhoX2xhbmVfczE2KF9fcDBfMTY0LCBfX3AxXzE2NCwgX19wMl8xNjQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTY0ID0gX19wMF8xNjQ7IFwKKyAgaW50MTZ4NF90IF9fczFfMTY0ID0gX19wMV8xNjQ7IFwKKyAgaW50MTZfdCBfX3JldF8xNjQ7IFwKKyAgX19yZXRfMTY0ID0gdnFyZG11bGhoX3MxNihfX3MwXzE2NCwgdmdldF9sYW5lX3MxNihfX3MxXzE2NCwgX19wMl8xNjQpKTsgXAorICBfX3JldF8xNjQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaGhfbGFuZV9zMTYoX19wMF8xNjUsIF9fcDFfMTY1LCBfX3AyXzE2NSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNjUgPSBfX3AwXzE2NTsgXAorICBpbnQxNng0X3QgX19zMV8xNjUgPSBfX3AxXzE2NTsgXAorICBpbnQxNng0X3QgX19yZXYxXzE2NTsgIF9fcmV2MV8xNjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE2NSwgX19zMV8xNjUsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXRfMTY1OyBcCisgIF9fcmV0XzE2NSA9IF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19zMF8xNjUsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoX19yZXYxXzE2NSwgX19wMl8xNjUpKTsgXAorICBfX3JldF8xNjU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtdWxoc19sYW5lcV9zMzIoX19wMF8xNjYsIF9fcDFfMTY2LCBfX3AyXzE2NikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNjYgPSBfX3AwXzE2NjsgXAorICBpbnQzMng0X3QgX19zMV8xNjYgPSBfX3AxXzE2NjsgXAorICBpbnQzMl90IF9fcmV0XzE2NjsgXAorICBfX3JldF8xNjYgPSB2cXJkbXVsaHNfczMyKF9fczBfMTY2LCB2Z2V0cV9sYW5lX3MzMihfX3MxXzE2NiwgX19wMl8xNjYpKTsgXAorICBfX3JldF8xNjY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaHNfbGFuZXFfczMyKF9fcDBfMTY3LCBfX3AxXzE2NywgX19wMl8xNjcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTY3ID0gX19wMF8xNjc7IFwKKyAgaW50MzJ4NF90IF9fczFfMTY3ID0gX19wMV8xNjc7IFwKKyAgaW50MzJ4NF90IF9fcmV2MV8xNjc7ICBfX3JldjFfMTY3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNjcsIF9fczFfMTY3LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0XzE2NzsgXAorICBfX3JldF8xNjcgPSBfX25vc3dhcF92cXJkbXVsaHNfczMyKF9fczBfMTY3LCBfX25vc3dhcF92Z2V0cV9sYW5lX3MzMihfX3JldjFfMTY3LCBfX3AyXzE2NykpOyBcCisgIF9fcmV0XzE2NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhoX2xhbmVxX3MxNihfX3AwXzE2OCwgX19wMV8xNjgsIF9fcDJfMTY4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE2OCA9IF9fcDBfMTY4OyBcCisgIGludDE2eDhfdCBfX3MxXzE2OCA9IF9fcDFfMTY4OyBcCisgIGludDE2X3QgX19yZXRfMTY4OyBcCisgIF9fcmV0XzE2OCA9IHZxcmRtdWxoaF9zMTYoX19zMF8xNjgsIHZnZXRxX2xhbmVfczE2KF9fczFfMTY4LCBfX3AyXzE2OCkpOyBcCisgIF9fcmV0XzE2ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtdWxoaF9sYW5lcV9zMTYoX19wMF8xNjksIF9fcDFfMTY5LCBfX3AyXzE2OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNjkgPSBfX3AwXzE2OTsgXAorICBpbnQxNng4X3QgX19zMV8xNjkgPSBfX3AxXzE2OTsgXAorICBpbnQxNng4X3QgX19yZXYxXzE2OTsgIF9fcmV2MV8xNjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE2OSwgX19zMV8xNjksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXRfMTY5OyBcCisgIF9fcmV0XzE2OSA9IF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19zMF8xNjksIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KF9fcmV2MV8xNjksIF9fcDJfMTY5KSk7IFwKKyAgX19yZXRfMTY5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaHFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxcmRtdWxocV9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXJkbXVsaHFfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtdWxocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtdWxoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXJkbXVsaF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtdWxoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXJkbXVsaF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3QgdnFyc2hsYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxiX3U4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZxcnNobGJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsYl91OChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2cXJzaGxzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hsc191MzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZxcnNobHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxzX3UzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2cXJzaGxkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFyc2hsZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZxcnNobGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2cXJzaGxoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hsaF91MTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZxcnNobGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxoX3UxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3QgdnFyc2hsYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGJfczgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2cXJzaGxiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsYl9zOChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxcnNobHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxcnNobHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnFyc2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFyc2hsZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnFyc2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFyc2hsZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cXJzaGxoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cXJzaGxoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl91MzIoX19wMF8xNzAsIF9fcDFfMTcwLCBfX3AyXzE3MCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF8xNzAgPSBfX3AwXzE3MDsgXAorICB1aW50MzJ4NF90IF9fczFfMTcwID0gX19wMV8xNzA7IFwKKyAgdWludDE2eDhfdCBfX3JldF8xNzA7IFwKKyAgX19yZXRfMTcwID0gKHVpbnQxNng4X3QpKHZjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19zMF8xNzApLCAodWludDE2eDRfdCkodnFyc2hybl9uX3UzMihfX3MxXzE3MCwgX19wMl8xNzApKSkpOyBcCisgIF9fcmV0XzE3MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3UzMihfX3AwXzE3MSwgX19wMV8xNzEsIF9fcDJfMTcxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwXzE3MSA9IF9fcDBfMTcxOyBcCisgIHVpbnQzMng0X3QgX19zMV8xNzEgPSBfX3AxXzE3MTsgXAorICB1aW50MTZ4NF90IF9fcmV2MF8xNzE7ICBfX3JldjBfMTcxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xNzEsIF9fczBfMTcxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MV8xNzE7ICBfX3JldjFfMTcxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNzEsIF9fczFfMTcxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0XzE3MTsgXAorICBfX3JldF8xNzEgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3JldjBfMTcxKSwgKHVpbnQxNng0X3QpKF9fbm9zd2FwX3ZxcnNocm5fbl91MzIoX19yZXYxXzE3MSwgX19wMl8xNzEpKSkpOyBcCisgIF9fcmV0XzE3MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE3MSwgX19yZXRfMTcxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xNzE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3U2NChfX3AwXzE3MiwgX19wMV8xNzIsIF9fcDJfMTcyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzE3MiA9IF9fcDBfMTcyOyBcCisgIHVpbnQ2NHgyX3QgX19zMV8xNzIgPSBfX3AxXzE3MjsgXAorICB1aW50MzJ4NF90IF9fcmV0XzE3MjsgXAorICBfX3JldF8xNzIgPSAodWludDMyeDRfdCkodmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3MwXzE3MiksICh1aW50MzJ4Ml90KSh2cXJzaHJuX25fdTY0KF9fczFfMTcyLCBfX3AyXzE3MikpKSk7IFwKKyAgX19yZXRfMTcyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fdTY0KF9fcDBfMTczLCBfX3AxXzE3MywgX19wMl8xNzMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfMTczID0gX19wMF8xNzM7IFwKKyAgdWludDY0eDJfdCBfX3MxXzE3MyA9IF9fcDFfMTczOyBcCisgIHVpbnQzMngyX3QgX19yZXYwXzE3MzsgIF9fcmV2MF8xNzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE3MywgX19zMF8xNzMsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYxXzE3MzsgIF9fcmV2MV8xNzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE3MywgX19zMV8xNzMsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXRfMTczOyBcCisgIF9fcmV0XzE3MyA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fcmV2MF8xNzMpLCAodWludDMyeDJfdCkoX19ub3N3YXBfdnFyc2hybl9uX3U2NChfX3JldjFfMTczLCBfX3AyXzE3MykpKSk7IFwKKyAgX19yZXRfMTczID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTczLCBfX3JldF8xNzMsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE3MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fdTE2KF9fcDBfMTc0LCBfX3AxXzE3NCwgX19wMl8xNzQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF8xNzQgPSBfX3AwXzE3NDsgXAorICB1aW50MTZ4OF90IF9fczFfMTc0ID0gX19wMV8xNzQ7IFwKKyAgdWludDh4MTZfdCBfX3JldF8xNzQ7IFwKKyAgX19yZXRfMTc0ID0gKHVpbnQ4eDE2X3QpKHZjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fczBfMTc0KSwgKHVpbnQ4eDhfdCkodnFyc2hybl9uX3UxNihfX3MxXzE3NCwgX19wMl8xNzQpKSkpOyBcCisgIF9fcmV0XzE3NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3UxNihfX3AwXzE3NSwgX19wMV8xNzUsIF9fcDJfMTc1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczBfMTc1ID0gX19wMF8xNzU7IFwKKyAgdWludDE2eDhfdCBfX3MxXzE3NSA9IF9fcDFfMTc1OyBcCisgIHVpbnQ4eDhfdCBfX3JldjBfMTc1OyAgX19yZXYwXzE3NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTc1LCBfX3MwXzE3NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjFfMTc1OyAgX19yZXYxXzE3NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTc1LCBfX3MxXzE3NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldF8xNzU7IFwKKyAgX19yZXRfMTc1ID0gKHVpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fcmV2MF8xNzUpLCAodWludDh4OF90KShfX25vc3dhcF92cXJzaHJuX25fdTE2KF9fcmV2MV8xNzUsIF9fcDJfMTc1KSkpKTsgXAorICBfX3JldF8xNzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xNzUsIF9fcmV0XzE3NSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTc1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl9zMzIoX19wMF8xNzYsIF9fcDFfMTc2LCBfX3AyXzE3NikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzE3NiA9IF9fcDBfMTc2OyBcCisgIGludDMyeDRfdCBfX3MxXzE3NiA9IF9fcDFfMTc2OyBcCisgIGludDE2eDhfdCBfX3JldF8xNzY7IFwKKyAgX19yZXRfMTc2ID0gKGludDE2eDhfdCkodmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fczBfMTc2KSwgKGludDE2eDRfdCkodnFyc2hybl9uX3MzMihfX3MxXzE3NiwgX19wMl8xNzYpKSkpOyBcCisgIF9fcmV0XzE3NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3MzMihfX3AwXzE3NywgX19wMV8xNzcsIF9fcDJfMTc3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMTc3ID0gX19wMF8xNzc7IFwKKyAgaW50MzJ4NF90IF9fczFfMTc3ID0gX19wMV8xNzc7IFwKKyAgaW50MTZ4NF90IF9fcmV2MF8xNzc7ICBfX3JldjBfMTc3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xNzcsIF9fczBfMTc3LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxXzE3NzsgIF9fcmV2MV8xNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE3NywgX19zMV8xNzcsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldF8xNzc7IFwKKyAgX19yZXRfMTc3ID0gKGludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fcmV2MF8xNzcpLCAoaW50MTZ4NF90KShfX25vc3dhcF92cXJzaHJuX25fczMyKF9fcmV2MV8xNzcsIF9fcDJfMTc3KSkpKTsgXAorICBfX3JldF8xNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xNzcsIF9fcmV0XzE3NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTc3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl9zNjQoX19wMF8xNzgsIF9fcDFfMTc4LCBfX3AyXzE3OCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzE3OCA9IF9fcDBfMTc4OyBcCisgIGludDY0eDJfdCBfX3MxXzE3OCA9IF9fcDFfMTc4OyBcCisgIGludDMyeDRfdCBfX3JldF8xNzg7IFwKKyAgX19yZXRfMTc4ID0gKGludDMyeDRfdCkodmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fczBfMTc4KSwgKGludDMyeDJfdCkodnFyc2hybl9uX3M2NChfX3MxXzE3OCwgX19wMl8xNzgpKSkpOyBcCisgIF9fcmV0XzE3ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3M2NChfX3AwXzE3OSwgX19wMV8xNzksIF9fcDJfMTc5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMTc5ID0gX19wMF8xNzk7IFwKKyAgaW50NjR4Ml90IF9fczFfMTc5ID0gX19wMV8xNzk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MF8xNzk7ICBfX3JldjBfMTc5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xNzksIF9fczBfMTc5LCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXYxXzE3OTsgIF9fcmV2MV8xNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE3OSwgX19zMV8xNzksIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldF8xNzk7IFwKKyAgX19yZXRfMTc5ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fcmV2MF8xNzkpLCAoaW50MzJ4Ml90KShfX25vc3dhcF92cXJzaHJuX25fczY0KF9fcmV2MV8xNzksIF9fcDJfMTc5KSkpKTsgXAorICBfX3JldF8xNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xNzksIF9fcmV0XzE3OSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTc5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl9zMTYoX19wMF8xODAsIF9fcDFfMTgwLCBfX3AyXzE4MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMTgwID0gX19wMF8xODA7IFwKKyAgaW50MTZ4OF90IF9fczFfMTgwID0gX19wMV8xODA7IFwKKyAgaW50OHgxNl90IF9fcmV0XzE4MDsgXAorICBfX3JldF8xODAgPSAoaW50OHgxNl90KSh2Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fczBfMTgwKSwgKGludDh4OF90KSh2cXJzaHJuX25fczE2KF9fczFfMTgwLCBfX3AyXzE4MCkpKSk7IFwKKyAgX19yZXRfMTgwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fczE2KF9fcDBfMTgxLCBfX3AxXzE4MSwgX19wMl8xODEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzE4MSA9IF9fcDBfMTgxOyBcCisgIGludDE2eDhfdCBfX3MxXzE4MSA9IF9fcDFfMTgxOyBcCisgIGludDh4OF90IF9fcmV2MF8xODE7ICBfX3JldjBfMTgxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xODEsIF9fczBfMTgxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxXzE4MTsgIF9fcmV2MV8xODEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE4MSwgX19zMV8xODEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldF8xODE7IFwKKyAgX19yZXRfMTgxID0gKGludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfczgoKGludDh4OF90KShfX3JldjBfMTgxKSwgKGludDh4OF90KShfX25vc3dhcF92cXJzaHJuX25fczE2KF9fcmV2MV8xODEsIF9fcDJfMTgxKSkpKTsgXAorICBfX3JldF8xODEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xODEsIF9fcmV0XzE4MSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTgxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuc19uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5zX25fdTMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybnNfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuc19uX3UzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybmRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5kX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hybmRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5oX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5oX25fdTE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybmhfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybmhfbl91MTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hybnNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5zX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5kX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybmhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hydW5faGlnaF9uX3MzMihfX3AwXzE4MiwgX19wMV8xODIsIF9fcDJfMTgyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMTgyID0gX19wMF8xODI7IFwKKyAgaW50MzJ4NF90IF9fczFfMTgyID0gX19wMV8xODI7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzE4MjsgXAorICBfX3JldF8xODIgPSAoaW50MTZ4OF90KSh2Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19zMF8xODIpLCAoaW50MTZ4NF90KSh2cXJzaHJ1bl9uX3MzMihfX3MxXzE4MiwgX19wMl8xODIpKSkpOyBcCisgIF9fcmV0XzE4MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocnVuX2hpZ2hfbl9zMzIoX19wMF8xODMsIF9fcDFfMTgzLCBfX3AyXzE4MykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzE4MyA9IF9fcDBfMTgzOyBcCisgIGludDMyeDRfdCBfX3MxXzE4MyA9IF9fcDFfMTgzOyBcCisgIGludDE2eDRfdCBfX3JldjBfMTgzOyAgX19yZXYwXzE4MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTgzLCBfX3MwXzE4MywgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MV8xODM7ICBfX3JldjFfMTgzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xODMsIF9fczFfMTgzLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXRfMTgzOyBcCisgIF9fcmV0XzE4MyA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3JldjBfMTgzKSwgKGludDE2eDRfdCkoX19ub3N3YXBfdnFyc2hydW5fbl9zMzIoX19yZXYxXzE4MywgX19wMl8xODMpKSkpOyBcCisgIF9fcmV0XzE4MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE4MywgX19yZXRfMTgzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xODM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocnVuX2hpZ2hfbl9zNjQoX19wMF8xODQsIF9fcDFfMTg0LCBfX3AyXzE4NCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzE4NCA9IF9fcDBfMTg0OyBcCisgIGludDY0eDJfdCBfX3MxXzE4NCA9IF9fcDFfMTg0OyBcCisgIGludDMyeDRfdCBfX3JldF8xODQ7IFwKKyAgX19yZXRfMTg0ID0gKGludDMyeDRfdCkodmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fczBfMTg0KSwgKGludDMyeDJfdCkodnFyc2hydW5fbl9zNjQoX19zMV8xODQsIF9fcDJfMTg0KSkpKTsgXAorICBfX3JldF8xODQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJ1bl9oaWdoX25fczY0KF9fcDBfMTg1LCBfX3AxXzE4NSwgX19wMl8xODUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8xODUgPSBfX3AwXzE4NTsgXAorICBpbnQ2NHgyX3QgX19zMV8xODUgPSBfX3AxXzE4NTsgXAorICBpbnQzMngyX3QgX19yZXYwXzE4NTsgIF9fcmV2MF8xODUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE4NSwgX19zMF8xODUsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldjFfMTg1OyAgX19yZXYxXzE4NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTg1LCBfX3MxXzE4NSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzE4NTsgXAorICBfX3JldF8xODUgPSAoaW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19yZXYwXzE4NSksIChpbnQzMngyX3QpKF9fbm9zd2FwX3ZxcnNocnVuX25fczY0KF9fcmV2MV8xODUsIF9fcDJfMTg1KSkpKTsgXAorICBfX3JldF8xODUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xODUsIF9fcmV0XzE4NSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTg1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJ1bl9oaWdoX25fczE2KF9fcDBfMTg2LCBfX3AxXzE4NiwgX19wMl8xODYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzE4NiA9IF9fcDBfMTg2OyBcCisgIGludDE2eDhfdCBfX3MxXzE4NiA9IF9fcDFfMTg2OyBcCisgIGludDh4MTZfdCBfX3JldF8xODY7IFwKKyAgX19yZXRfMTg2ID0gKGludDh4MTZfdCkodmNvbWJpbmVfczgoKGludDh4OF90KShfX3MwXzE4NiksIChpbnQ4eDhfdCkodnFyc2hydW5fbl9zMTYoX19zMV8xODYsIF9fcDJfMTg2KSkpKTsgXAorICBfX3JldF8xODY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJ1bl9oaWdoX25fczE2KF9fcDBfMTg3LCBfX3AxXzE4NywgX19wMl8xODcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzE4NyA9IF9fcDBfMTg3OyBcCisgIGludDE2eDhfdCBfX3MxXzE4NyA9IF9fcDFfMTg3OyBcCisgIGludDh4OF90IF9fcmV2MF8xODc7ICBfX3JldjBfMTg3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xODcsIF9fczBfMTg3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxXzE4NzsgIF9fcmV2MV8xODcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE4NywgX19zMV8xODcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldF8xODc7IFwKKyAgX19yZXRfMTg3ID0gKGludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfczgoKGludDh4OF90KShfX3JldjBfMTg3KSwgKGludDh4OF90KShfX25vc3dhcF92cXJzaHJ1bl9uX3MxNihfX3JldjFfMTg3LCBfX3AyXzE4NykpKSk7IFwKKyAgX19yZXRfMTg3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTg3LCBfX3JldF8xODcsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE4NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hydW5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5zX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hydW5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5zX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJ1bmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJ1bmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocnVuaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bmhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJ1bmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5oX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OF90IHZxc2hsYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGJfdTgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4X3QgdnFzaGxiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsYl91OChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2cXNobHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfdTMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2cXNobHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfdTMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZxc2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZxc2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3QgdnFzaGxoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX3UxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3QgdnFzaGxoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX3UxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3QgdnFzaGxiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaGxiX3M4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3QgdnFzaGxiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaGxiX3M4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFzaGxzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxc2hsc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGxzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZxc2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGxkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2cXNobGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cXNobGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFzaGxoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsYl9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFzaGxiX25fdTgoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobGJfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsYl9uX3U4KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHNfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfbl91MzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHNfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfbl91MzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxoX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX25fdTE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxoX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX25fdTE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobGJfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsYl9uX3M4KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxiX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGJfbl9zOChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxzX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGxzX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxzX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGxzX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobGRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobGRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsaF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsaF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1Yl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1Yl9uX3M4KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1Yl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1Yl9uX3M4KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHVzX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGx1c19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsdXNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVzX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHVkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGx1ZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsdWRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVkX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHVoX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGx1aF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsdWhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVoX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5faGlnaF9uX3UzMihfX3AwXzE4OCwgX19wMV8xODgsIF9fcDJfMTg4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwXzE4OCA9IF9fcDBfMTg4OyBcCisgIHVpbnQzMng0X3QgX19zMV8xODggPSBfX3AxXzE4ODsgXAorICB1aW50MTZ4OF90IF9fcmV0XzE4ODsgXAorICBfX3JldF8xODggPSAodWludDE2eDhfdCkodmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3MwXzE4OCksICh1aW50MTZ4NF90KSh2cXNocm5fbl91MzIoX19zMV8xODgsIF9fcDJfMTg4KSkpKTsgXAorICBfX3JldF8xODg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5faGlnaF9uX3UzMihfX3AwXzE4OSwgX19wMV8xODksIF9fcDJfMTg5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwXzE4OSA9IF9fcDBfMTg5OyBcCisgIHVpbnQzMng0X3QgX19zMV8xODkgPSBfX3AxXzE4OTsgXAorICB1aW50MTZ4NF90IF9fcmV2MF8xODk7ICBfX3JldjBfMTg5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xODksIF9fczBfMTg5LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MV8xODk7ICBfX3JldjFfMTg5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xODksIF9fczFfMTg5LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0XzE4OTsgXAorICBfX3JldF8xODkgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3JldjBfMTg5KSwgKHVpbnQxNng0X3QpKF9fbm9zd2FwX3Zxc2hybl9uX3UzMihfX3JldjFfMTg5LCBfX3AyXzE4OSkpKSk7IFwKKyAgX19yZXRfMTg5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTg5LCBfX3JldF8xODksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE4OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl91NjQoX19wMF8xOTAsIF9fcDFfMTkwLCBfX3AyXzE5MCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMF8xOTAgPSBfX3AwXzE5MDsgXAorICB1aW50NjR4Ml90IF9fczFfMTkwID0gX19wMV8xOTA7IFwKKyAgdWludDMyeDRfdCBfX3JldF8xOTA7IFwKKyAgX19yZXRfMTkwID0gKHVpbnQzMng0X3QpKHZjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19zMF8xOTApLCAodWludDMyeDJfdCkodnFzaHJuX25fdTY0KF9fczFfMTkwLCBfX3AyXzE5MCkpKSk7IFwKKyAgX19yZXRfMTkwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl91NjQoX19wMF8xOTEsIF9fcDFfMTkxLCBfX3AyXzE5MSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMF8xOTEgPSBfX3AwXzE5MTsgXAorICB1aW50NjR4Ml90IF9fczFfMTkxID0gX19wMV8xOTE7IFwKKyAgdWludDMyeDJfdCBfX3JldjBfMTkxOyAgX19yZXYwXzE5MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTkxLCBfX3MwXzE5MSwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldjFfMTkxOyAgX19yZXYxXzE5MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTkxLCBfX3MxXzE5MSwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldF8xOTE7IFwKKyAgX19yZXRfMTkxID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19yZXYwXzE5MSksICh1aW50MzJ4Ml90KShfX25vc3dhcF92cXNocm5fbl91NjQoX19yZXYxXzE5MSwgX19wMl8xOTEpKSkpOyBcCisgIF9fcmV0XzE5MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE5MSwgX19yZXRfMTkxLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xOTE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9oaWdoX25fdTE2KF9fcDBfMTkyLCBfX3AxXzE5MiwgX19wMl8xOTIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF8xOTIgPSBfX3AwXzE5MjsgXAorICB1aW50MTZ4OF90IF9fczFfMTkyID0gX19wMV8xOTI7IFwKKyAgdWludDh4MTZfdCBfX3JldF8xOTI7IFwKKyAgX19yZXRfMTkyID0gKHVpbnQ4eDE2X3QpKHZjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fczBfMTkyKSwgKHVpbnQ4eDhfdCkodnFzaHJuX25fdTE2KF9fczFfMTkyLCBfX3AyXzE5MikpKSk7IFwKKyAgX19yZXRfMTkyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl91MTYoX19wMF8xOTMsIF9fcDFfMTkzLCBfX3AyXzE5MykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzE5MyA9IF9fcDBfMTkzOyBcCisgIHVpbnQxNng4X3QgX19zMV8xOTMgPSBfX3AxXzE5MzsgXAorICB1aW50OHg4X3QgX19yZXYwXzE5MzsgIF9fcmV2MF8xOTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE5MywgX19zMF8xOTMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxXzE5MzsgIF9fcmV2MV8xOTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE5MywgX19zMV8xOTMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfMTkzOyBcCisgIF9fcmV0XzE5MyA9ICh1aW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV91OCgodWludDh4OF90KShfX3JldjBfMTkzKSwgKHVpbnQ4eDhfdCkoX19ub3N3YXBfdnFzaHJuX25fdTE2KF9fcmV2MV8xOTMsIF9fcDJfMTkzKSkpKTsgXAorICBfX3JldF8xOTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xOTMsIF9fcmV0XzE5MywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTkzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5faGlnaF9uX3MzMihfX3AwXzE5NCwgX19wMV8xOTQsIF9fcDJfMTk0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMTk0ID0gX19wMF8xOTQ7IFwKKyAgaW50MzJ4NF90IF9fczFfMTk0ID0gX19wMV8xOTQ7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzE5NDsgXAorICBfX3JldF8xOTQgPSAoaW50MTZ4OF90KSh2Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19zMF8xOTQpLCAoaW50MTZ4NF90KSh2cXNocm5fbl9zMzIoX19zMV8xOTQsIF9fcDJfMTk0KSkpKTsgXAorICBfX3JldF8xOTQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5faGlnaF9uX3MzMihfX3AwXzE5NSwgX19wMV8xOTUsIF9fcDJfMTk1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMTk1ID0gX19wMF8xOTU7IFwKKyAgaW50MzJ4NF90IF9fczFfMTk1ID0gX19wMV8xOTU7IFwKKyAgaW50MTZ4NF90IF9fcmV2MF8xOTU7ICBfX3JldjBfMTk1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xOTUsIF9fczBfMTk1LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxXzE5NTsgIF9fcmV2MV8xOTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE5NSwgX19zMV8xOTUsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldF8xOTU7IFwKKyAgX19yZXRfMTk1ID0gKGludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fcmV2MF8xOTUpLCAoaW50MTZ4NF90KShfX25vc3dhcF92cXNocm5fbl9zMzIoX19yZXYxXzE5NSwgX19wMl8xOTUpKSkpOyBcCisgIF9fcmV0XzE5NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE5NSwgX19yZXRfMTk1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xOTU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9oaWdoX25fczY0KF9fcDBfMTk2LCBfX3AxXzE5NiwgX19wMl8xOTYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8xOTYgPSBfX3AwXzE5NjsgXAorICBpbnQ2NHgyX3QgX19zMV8xOTYgPSBfX3AxXzE5NjsgXAorICBpbnQzMng0X3QgX19yZXRfMTk2OyBcCisgIF9fcmV0XzE5NiA9IChpbnQzMng0X3QpKHZjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3MwXzE5NiksIChpbnQzMngyX3QpKHZxc2hybl9uX3M2NChfX3MxXzE5NiwgX19wMl8xOTYpKSkpOyBcCisgIF9fcmV0XzE5NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybl9oaWdoX25fczY0KF9fcDBfMTk3LCBfX3AxXzE5NywgX19wMl8xOTcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8xOTcgPSBfX3AwXzE5NzsgXAorICBpbnQ2NHgyX3QgX19zMV8xOTcgPSBfX3AxXzE5NzsgXAorICBpbnQzMngyX3QgX19yZXYwXzE5NzsgIF9fcmV2MF8xOTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE5NywgX19zMF8xOTcsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldjFfMTk3OyAgX19yZXYxXzE5NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTk3LCBfX3MxXzE5NywgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzE5NzsgXAorICBfX3JldF8xOTcgPSAoaW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19yZXYwXzE5NyksIChpbnQzMngyX3QpKF9fbm9zd2FwX3Zxc2hybl9uX3M2NChfX3JldjFfMTk3LCBfX3AyXzE5NykpKSk7IFwKKyAgX19yZXRfMTk3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTk3LCBfX3JldF8xOTcsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE5NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl9zMTYoX19wMF8xOTgsIF9fcDFfMTk4LCBfX3AyXzE5OCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMTk4ID0gX19wMF8xOTg7IFwKKyAgaW50MTZ4OF90IF9fczFfMTk4ID0gX19wMV8xOTg7IFwKKyAgaW50OHgxNl90IF9fcmV0XzE5ODsgXAorICBfX3JldF8xOTggPSAoaW50OHgxNl90KSh2Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fczBfMTk4KSwgKGludDh4OF90KSh2cXNocm5fbl9zMTYoX19zMV8xOTgsIF9fcDJfMTk4KSkpKTsgXAorICBfX3JldF8xOTg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5faGlnaF9uX3MxNihfX3AwXzE5OSwgX19wMV8xOTksIF9fcDJfMTk5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8xOTkgPSBfX3AwXzE5OTsgXAorICBpbnQxNng4X3QgX19zMV8xOTkgPSBfX3AxXzE5OTsgXAorICBpbnQ4eDhfdCBfX3JldjBfMTk5OyAgX19yZXYwXzE5OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTk5LCBfX3MwXzE5OSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MV8xOTk7ICBfX3JldjFfMTk5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xOTksIF9fczFfMTk5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXRfMTk5OyBcCisgIF9fcmV0XzE5OSA9IChpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19yZXYwXzE5OSksIChpbnQ4eDhfdCkoX19ub3N3YXBfdnFzaHJuX25fczE2KF9fcmV2MV8xOTksIF9fcDJfMTk5KSkpKTsgXAorICBfX3JldF8xOTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xOTksIF9fcmV0XzE5OSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTk5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5zX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaHJuc19uX3UzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybnNfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5zX25fdTMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5kX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaHJuZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybmRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5kX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5oX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybmhfbl91MTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5oX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybmhfbl91MTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybnNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5zX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybnNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5kX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJ1bl9oaWdoX25fczMyKF9fcDBfMjAwLCBfX3AxXzIwMCwgX19wMl8yMDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8yMDAgPSBfX3AwXzIwMDsgXAorICBpbnQzMng0X3QgX19zMV8yMDAgPSBfX3AxXzIwMDsgXAorICBpbnQxNng4X3QgX19yZXRfMjAwOyBcCisgIF9fcmV0XzIwMCA9IChpbnQxNng4X3QpKHZjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3MwXzIwMCksIChpbnQxNng0X3QpKHZxc2hydW5fbl9zMzIoX19zMV8yMDAsIF9fcDJfMjAwKSkpKTsgXAorICBfX3JldF8yMDA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocnVuX2hpZ2hfbl9zMzIoX19wMF8yMDEsIF9fcDFfMjAxLCBfX3AyXzIwMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzIwMSA9IF9fcDBfMjAxOyBcCisgIGludDMyeDRfdCBfX3MxXzIwMSA9IF9fcDFfMjAxOyBcCisgIGludDE2eDRfdCBfX3JldjBfMjAxOyAgX19yZXYwXzIwMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjAxLCBfX3MwXzIwMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MV8yMDE7ICBfX3JldjFfMjAxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMDEsIF9fczFfMjAxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXRfMjAxOyBcCisgIF9fcmV0XzIwMSA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3JldjBfMjAxKSwgKGludDE2eDRfdCkoX19ub3N3YXBfdnFzaHJ1bl9uX3MzMihfX3JldjFfMjAxLCBfX3AyXzIwMSkpKSk7IFwKKyAgX19yZXRfMjAxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjAxLCBfX3JldF8yMDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIwMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJ1bl9oaWdoX25fczY0KF9fcDBfMjAyLCBfX3AxXzIwMiwgX19wMl8yMDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8yMDIgPSBfX3AwXzIwMjsgXAorICBpbnQ2NHgyX3QgX19zMV8yMDIgPSBfX3AxXzIwMjsgXAorICBpbnQzMng0X3QgX19yZXRfMjAyOyBcCisgIF9fcmV0XzIwMiA9IChpbnQzMng0X3QpKHZjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3MwXzIwMiksIChpbnQzMngyX3QpKHZxc2hydW5fbl9zNjQoX19zMV8yMDIsIF9fcDJfMjAyKSkpKTsgXAorICBfX3JldF8yMDI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocnVuX2hpZ2hfbl9zNjQoX19wMF8yMDMsIF9fcDFfMjAzLCBfX3AyXzIwMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzIwMyA9IF9fcDBfMjAzOyBcCisgIGludDY0eDJfdCBfX3MxXzIwMyA9IF9fcDFfMjAzOyBcCisgIGludDMyeDJfdCBfX3JldjBfMjAzOyAgX19yZXYwXzIwMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjAzLCBfX3MwXzIwMywgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MV8yMDM7ICBfX3JldjFfMjAzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMDMsIF9fczFfMjAzLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXRfMjAzOyBcCisgIF9fcmV0XzIwMyA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3JldjBfMjAzKSwgKGludDMyeDJfdCkoX19ub3N3YXBfdnFzaHJ1bl9uX3M2NChfX3JldjFfMjAzLCBfX3AyXzIwMykpKSk7IFwKKyAgX19yZXRfMjAzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjAzLCBfX3JldF8yMDMsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIwMzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJ1bl9oaWdoX25fczE2KF9fcDBfMjA0LCBfX3AxXzIwNCwgX19wMl8yMDQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzIwNCA9IF9fcDBfMjA0OyBcCisgIGludDE2eDhfdCBfX3MxXzIwNCA9IF9fcDFfMjA0OyBcCisgIGludDh4MTZfdCBfX3JldF8yMDQ7IFwKKyAgX19yZXRfMjA0ID0gKGludDh4MTZfdCkodmNvbWJpbmVfczgoKGludDh4OF90KShfX3MwXzIwNCksIChpbnQ4eDhfdCkodnFzaHJ1bl9uX3MxNihfX3MxXzIwNCwgX19wMl8yMDQpKSkpOyBcCisgIF9fcmV0XzIwNDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hydW5faGlnaF9uX3MxNihfX3AwXzIwNSwgX19wMV8yMDUsIF9fcDJfMjA1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8yMDUgPSBfX3AwXzIwNTsgXAorICBpbnQxNng4X3QgX19zMV8yMDUgPSBfX3AxXzIwNTsgXAorICBpbnQ4eDhfdCBfX3JldjBfMjA1OyAgX19yZXYwXzIwNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjA1LCBfX3MwXzIwNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MV8yMDU7ICBfX3JldjFfMjA1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMDUsIF9fczFfMjA1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXRfMjA1OyBcCisgIF9fcmV0XzIwNSA9IChpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19yZXYwXzIwNSksIChpbnQ4eDhfdCkoX19ub3N3YXBfdnFzaHJ1bl9uX3MxNihfX3JldjFfMjA1LCBfX3AyXzIwNSkpKSk7IFwKKyAgX19yZXRfMjA1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjA1LCBfX3JldF8yMDUsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIwNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJ1bnNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuc19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hydW5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bnNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hydW5kX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocnVuZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5kX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocnVuaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hydW5oX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5oX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OF90IHZxc3ViYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmJfdTgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4X3QgdnFzdWJiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViYl91OChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2cXN1YnNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnNfdTMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2cXN1YnNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnNfdTMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZxc3ViZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZxc3ViZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3QgdnFzdWJoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzdWJoX3UxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3QgdnFzdWJoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzdWJoX3UxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3QgdnFzdWJiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzdWJiX3M4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3QgdnFzdWJiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzdWJiX3M4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFzdWJzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxc3Vic19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzdWJzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMl90IF9fbm9zd2FwX3Zxc3Vic19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzdWJzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZxc3ViZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFzdWJkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2cXN1YmRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cXN1YmhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFzdWJoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2X3QgX19ub3N3YXBfdnFzdWJoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cXRibDFfcDgocG9seTh4MTZfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cXRibDFfcDgocG9seTh4MTZfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZxdGJsMXFfcDgocG9seTh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnF0YmwxcV9wOChwb2x5OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxdGJsMXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnF0YmwxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnF0YmwxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnF0YmwxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnF0YmwxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxdGJsMV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cXRibDFfczgoaW50OHgxNl90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnF0YmwxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZxdGJsMl9wOChwb2x5OHgxNngyX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMl92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZxdGJsMl9wOChwb2x5OHgxNngyX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4MTZ4Ml90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZxdGJsMnFfcDgocG9seTh4MTZ4Ml90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnF0YmwycV9wOChwb2x5OHgxNngyX3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2eDJfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwycV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cXRibDJxX3U4KHVpbnQ4eDE2eDJfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwycV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxdGJsMnFfdTgodWludDh4MTZ4Ml90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNngyX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMnFfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cXRibDJxX3M4KGludDh4MTZ4Ml90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cXRibDJxX3M4KGludDh4MTZ4Ml90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZ4Ml90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnF0YmwyX3U4KHVpbnQ4eDE2eDJfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwyX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxdGJsMl91OCh1aW50OHgxNngyX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4MTZ4Ml90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnF0YmwyX3M4KGludDh4MTZ4Ml90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxdGJsMl9zOChpbnQ4eDE2eDJfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4MTZ4Ml90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnF0YmwzX3A4KHBvbHk4eDE2eDNfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwzX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDEsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnF0YmwzX3A4KHBvbHk4eDE2eDNfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHgxNngzX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnF0YmwzcV9wOChwb2x5OHgxNngzX3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM3FfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDEsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cXRibDNxX3A4KHBvbHk4eDE2eDNfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZ4M190IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwzcV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxdGJsM3FfdTgodWludDh4MTZ4M190IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnF0YmwzcV91OCh1aW50OHgxNngzX3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2eDNfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM3FfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxdGJsM3FfczgoaW50OHgxNngzX3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM3FfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxdGJsM3FfczgoaW50OHgxNngzX3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNngzX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cXRibDNfdTgodWludDh4MTZ4M190IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnF0YmwzX3U4KHVpbnQ4eDE2eDNfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHgxNngzX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cXRibDNfczgoaW50OHgxNngzX3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM192KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnF0YmwzX3M4KGludDh4MTZ4M190IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHgxNngzX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cXRibDRfcDgocG9seTh4MTZ4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDAudmFsWzNdLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cXRibDRfcDgocG9seTh4MTZ4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDE2eDRfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cXRibDRxX3A4KHBvbHk4eDE2eDRfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Ymw0cV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMC52YWxbM10sIChpbnQ4eDE2X3QpX19wMSwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZxdGJsNHFfcDgocG9seTh4MTZ4NF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNng0X3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbM10sIF9fcDAudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Ymw0cV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFszXSwgKGludDh4MTZfdClfX3JldjEsIDM2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnF0Ymw0cV91OCh1aW50OHgxNng0X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNHFfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDAudmFsWzNdLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cXRibDRxX3U4KHVpbnQ4eDE2eDRfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZ4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNHFfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbM10sIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnF0Ymw0cV9zOChpbnQ4eDE2eDRfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Ymw0cV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMC52YWxbM10sIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnF0Ymw0cV9zOChpbnQ4eDE2eDRfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2eDRfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjAudmFsWzNdLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxdGJsNF91OCh1aW50OHgxNng0X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNF92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMC52YWxbM10sIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cXRibDRfdTgodWludDh4MTZ4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDE2eDRfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxdGJsNF9zOChpbnQ4eDE2eDRfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0Ymw0X3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4MTZfdClfX3AwLnZhbFszXSwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cXRibDRfczgoaW50OHgxNng0X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDE2eDRfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZxdGJ4MV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnF0YngxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cXRieDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cXRieDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngxcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDM2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnF0YngxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnF0YngxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnF0YngxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnF0YngxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxdGJ4MV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxdGJ4MV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cXRieDFfczgoaW50OHg4X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxdGJ4MV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnF0YngyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHgxNngyX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4Ml92KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMiwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cXRieDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDE2eDJfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2eDJfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngyX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjIsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cXRieDJxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDIsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cXRieDJxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNngyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYyLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxdGJ4MnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNngyX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMiwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxdGJ4MnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNngyX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2eDJfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngycV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjIsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cXRieDJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2eDJfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngycV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AyLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cXRieDJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2eDJfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZ4Ml90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MiwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxdGJ4Ml91OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDIsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxdGJ4Ml91OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZ4Ml90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MiwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnF0YngyX3M4KGludDh4OF90IF9fcDAsIGludDh4MTZ4Ml90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cXRieDJfczgoaW50OHg4X3QgX19wMCwgaW50OHgxNngyX3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNngyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4Ml92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYyLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cXRieDNfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDE2eDNfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AyLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZxdGJ4M19wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4MTZ4M190IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZ4M190IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngzX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MiwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZxdGJ4M3FfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNngzX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M3FfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMiwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZxdGJ4M3FfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNngzX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2eDNfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjIsIDM2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnF0YngzcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2eDNfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngzcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AyLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnF0YngzcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2eDNfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZ4M190IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MiwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxdGJ4M3FfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZ4M190IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHgxNl90KV9fcDIsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxdGJ4M3FfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZ4M190IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNngzX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYyLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnF0YngzX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHgxNngzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M192KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMiwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnF0YngzX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHgxNngzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNngzX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYyLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cXRieDNfczgoaW50OHg4X3QgX19wMCwgaW50OHgxNngzX3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M192KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMiwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxdGJ4M19zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDE2eDNfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2eDNfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M192KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjIsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZxdGJ4NF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4MTZ4NF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLnZhbFszXSwgKGludDh4OF90KV9fcDIsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnF0Yng0X3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHgxNng0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNng0X3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0Yng0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnF0Yng0cV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2eDRfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Yng0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLnZhbFszXSwgKGludDh4MTZfdClfX3AyLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnF0Yng0cV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2eDRfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZ4NF90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAoaW50OHgxNl90KV9fcmV2MiwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cXRieDRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZ4NF90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHgxNl90KV9fcDEudmFsWzNdLCAoaW50OHgxNl90KV9fcDIsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cXRieDRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZ4NF90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNng0X3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Yng0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIChpbnQ4eDE2X3QpX19yZXYyLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnF0Yng0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNng0X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMS52YWxbM10sIChpbnQ4eDE2X3QpX19wMiwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnF0Yng0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNng0X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2eDRfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgKGludDh4MTZfdClfX3JldjIsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cXRieDRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDE2eDRfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0Yng0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMS52YWxbM10sIChpbnQ4eDhfdClfX3AyLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cXRieDRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDE2eDRfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2eDRfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIChpbnQ4eDhfdClfX3JldjIsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxdGJ4NF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDE2eDRfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0Yng0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMS52YWxbM10sIChpbnQ4eDhfdClfX3AyLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnF0Yng0X3M4KGludDh4OF90IF9fcDAsIGludDh4MTZ4NF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZ4NF90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgKGludDh4OF90KV9fcmV2MiwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyYWRkaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UxNihfX3AwLCB2cmFkZGhuX3UzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJhZGRobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTE2KF9fcmV2MCwgX19ub3N3YXBfdnJhZGRobl91MzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJhZGRobl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTMyKF9fcDAsIHZyYWRkaG5fdTY0KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmFkZGhuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MzIoX19yZXYwLCBfX25vc3dhcF92cmFkZGhuX3U2NChfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmFkZGhuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3U4KF9fcDAsIHZyYWRkaG5fdTE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmFkZGhuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTgoX19yZXYwLCBfX25vc3dhcF92cmFkZGhuX3UxNihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyYWRkaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczE2KF9fcDAsIHZyYWRkaG5fczMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyYWRkaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczE2KF9fcmV2MCwgX19ub3N3YXBfdnJhZGRobl9zMzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmFkZGhuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3MzMihfX3AwLCB2cmFkZGhuX3M2NChfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmFkZGhuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZyYWRkaG5fczY0KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJhZGRobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3M4KF9fcDAsIHZyYWRkaG5fczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyYWRkaG5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3M4KF9fcmV2MCwgX19ub3N3YXBfdnJhZGRobl9zMTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmJpdF9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnJiaXRfdigoaW50OHg4X3QpX19wMCwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmJpdF9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmJpdF92KChpbnQ4eDhfdClfX3JldjAsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmJpdHFfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0cV92KChpbnQ4eDE2X3QpX19wMCwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyYml0cV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnJiaXRxX3YoKGludDh4MTZfdClfX3JldjAsIDM2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJiaXRxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmJpdHFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmJpdHFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJiaXRxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmJpdHFfdigoaW50OHgxNl90KV9fcDAsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyYml0cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmJpdHFfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyYml0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmJpdF92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmJpdF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmJpdF92KChpbnQ4eDhfdClfX3JldjAsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyYml0X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmJpdF92KChpbnQ4eDhfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJiaXRfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmJpdF92KChpbnQ4eDhfdClfX3JldjAsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlY3BlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZXFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlY3BlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWNwZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZV92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWNwZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZV92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZyZWNwZWRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZyZWNwZWRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdnJlY3Blc19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZXNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdnJlY3Blc19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZXNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWNwc3FfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlY3BzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJlY3BzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlY3BzX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJlY3BzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWNwc19mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2cmVjcHNkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc2RfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdnJlY3BzZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdnJlY3Bzc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZyZWNwc3NfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJlY3Bzc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZyZWNweGRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHhkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZyZWNweGRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHhkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdnJlY3B4c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNweHNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdnJlY3B4c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNweHNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZyc2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZyc2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2cnNobGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnJzaGxkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hyZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hyZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnJzaHJkX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnJzaHJkX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5faGlnaF9uX3UzMihfX3AwXzIwNiwgX19wMV8yMDYsIF9fcDJfMjA2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwXzIwNiA9IF9fcDBfMjA2OyBcCisgIHVpbnQzMng0X3QgX19zMV8yMDYgPSBfX3AxXzIwNjsgXAorICB1aW50MTZ4OF90IF9fcmV0XzIwNjsgXAorICBfX3JldF8yMDYgPSAodWludDE2eDhfdCkodmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3MwXzIwNiksICh1aW50MTZ4NF90KSh2cnNocm5fbl91MzIoX19zMV8yMDYsIF9fcDJfMjA2KSkpKTsgXAorICBfX3JldF8yMDY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocm5faGlnaF9uX3UzMihfX3AwXzIwNywgX19wMV8yMDcsIF9fcDJfMjA3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwXzIwNyA9IF9fcDBfMjA3OyBcCisgIHVpbnQzMng0X3QgX19zMV8yMDcgPSBfX3AxXzIwNzsgXAorICB1aW50MTZ4NF90IF9fcmV2MF8yMDc7ICBfX3JldjBfMjA3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMDcsIF9fczBfMjA3LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MV8yMDc7ICBfX3JldjFfMjA3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMDcsIF9fczFfMjA3LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0XzIwNzsgXAorICBfX3JldF8yMDcgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3JldjBfMjA3KSwgKHVpbnQxNng0X3QpKF9fbm9zd2FwX3Zyc2hybl9uX3UzMihfX3JldjFfMjA3LCBfX3AyXzIwNykpKSk7IFwKKyAgX19yZXRfMjA3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjA3LCBfX3JldF8yMDcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIwNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl91NjQoX19wMF8yMDgsIF9fcDFfMjA4LCBfX3AyXzIwOCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMF8yMDggPSBfX3AwXzIwODsgXAorICB1aW50NjR4Ml90IF9fczFfMjA4ID0gX19wMV8yMDg7IFwKKyAgdWludDMyeDRfdCBfX3JldF8yMDg7IFwKKyAgX19yZXRfMjA4ID0gKHVpbnQzMng0X3QpKHZjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19zMF8yMDgpLCAodWludDMyeDJfdCkodnJzaHJuX25fdTY0KF9fczFfMjA4LCBfX3AyXzIwOCkpKSk7IFwKKyAgX19yZXRfMjA4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl91NjQoX19wMF8yMDksIF9fcDFfMjA5LCBfX3AyXzIwOSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMF8yMDkgPSBfX3AwXzIwOTsgXAorICB1aW50NjR4Ml90IF9fczFfMjA5ID0gX19wMV8yMDk7IFwKKyAgdWludDMyeDJfdCBfX3JldjBfMjA5OyAgX19yZXYwXzIwOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjA5LCBfX3MwXzIwOSwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldjFfMjA5OyAgX19yZXYxXzIwOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjA5LCBfX3MxXzIwOSwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldF8yMDk7IFwKKyAgX19yZXRfMjA5ID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19yZXYwXzIwOSksICh1aW50MzJ4Ml90KShfX25vc3dhcF92cnNocm5fbl91NjQoX19yZXYxXzIwOSwgX19wMl8yMDkpKSkpOyBcCisgIF9fcmV0XzIwOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIwOSwgX19yZXRfMjA5LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMDk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9oaWdoX25fdTE2KF9fcDBfMjEwLCBfX3AxXzIxMCwgX19wMl8yMTApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF8yMTAgPSBfX3AwXzIxMDsgXAorICB1aW50MTZ4OF90IF9fczFfMjEwID0gX19wMV8yMTA7IFwKKyAgdWludDh4MTZfdCBfX3JldF8yMTA7IFwKKyAgX19yZXRfMjEwID0gKHVpbnQ4eDE2X3QpKHZjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fczBfMjEwKSwgKHVpbnQ4eDhfdCkodnJzaHJuX25fdTE2KF9fczFfMjEwLCBfX3AyXzIxMCkpKSk7IFwKKyAgX19yZXRfMjEwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl91MTYoX19wMF8yMTEsIF9fcDFfMjExLCBfX3AyXzIxMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzIxMSA9IF9fcDBfMjExOyBcCisgIHVpbnQxNng4X3QgX19zMV8yMTEgPSBfX3AxXzIxMTsgXAorICB1aW50OHg4X3QgX19yZXYwXzIxMTsgIF9fcmV2MF8yMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIxMSwgX19zMF8yMTEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxXzIxMTsgIF9fcmV2MV8yMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIxMSwgX19zMV8yMTEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfMjExOyBcCisgIF9fcmV0XzIxMSA9ICh1aW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV91OCgodWludDh4OF90KShfX3JldjBfMjExKSwgKHVpbnQ4eDhfdCkoX19ub3N3YXBfdnJzaHJuX25fdTE2KF9fcmV2MV8yMTEsIF9fcDJfMjExKSkpKTsgXAorICBfX3JldF8yMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMTEsIF9fcmV0XzIxMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjExOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5faGlnaF9uX3MzMihfX3AwXzIxMiwgX19wMV8yMTIsIF9fcDJfMjEyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMjEyID0gX19wMF8yMTI7IFwKKyAgaW50MzJ4NF90IF9fczFfMjEyID0gX19wMV8yMTI7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzIxMjsgXAorICBfX3JldF8yMTIgPSAoaW50MTZ4OF90KSh2Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19zMF8yMTIpLCAoaW50MTZ4NF90KSh2cnNocm5fbl9zMzIoX19zMV8yMTIsIF9fcDJfMjEyKSkpKTsgXAorICBfX3JldF8yMTI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocm5faGlnaF9uX3MzMihfX3AwXzIxMywgX19wMV8yMTMsIF9fcDJfMjEzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMjEzID0gX19wMF8yMTM7IFwKKyAgaW50MzJ4NF90IF9fczFfMjEzID0gX19wMV8yMTM7IFwKKyAgaW50MTZ4NF90IF9fcmV2MF8yMTM7ICBfX3JldjBfMjEzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMTMsIF9fczBfMjEzLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxXzIxMzsgIF9fcmV2MV8yMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIxMywgX19zMV8yMTMsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldF8yMTM7IFwKKyAgX19yZXRfMjEzID0gKGludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fcmV2MF8yMTMpLCAoaW50MTZ4NF90KShfX25vc3dhcF92cnNocm5fbl9zMzIoX19yZXYxXzIxMywgX19wMl8yMTMpKSkpOyBcCisgIF9fcmV0XzIxMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIxMywgX19yZXRfMjEzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMTM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9oaWdoX25fczY0KF9fcDBfMjE0LCBfX3AxXzIxNCwgX19wMl8yMTQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8yMTQgPSBfX3AwXzIxNDsgXAorICBpbnQ2NHgyX3QgX19zMV8yMTQgPSBfX3AxXzIxNDsgXAorICBpbnQzMng0X3QgX19yZXRfMjE0OyBcCisgIF9fcmV0XzIxNCA9IChpbnQzMng0X3QpKHZjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3MwXzIxNCksIChpbnQzMngyX3QpKHZyc2hybl9uX3M2NChfX3MxXzIxNCwgX19wMl8yMTQpKSkpOyBcCisgIF9fcmV0XzIxNDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hybl9oaWdoX25fczY0KF9fcDBfMjE1LCBfX3AxXzIxNSwgX19wMl8yMTUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8yMTUgPSBfX3AwXzIxNTsgXAorICBpbnQ2NHgyX3QgX19zMV8yMTUgPSBfX3AxXzIxNTsgXAorICBpbnQzMngyX3QgX19yZXYwXzIxNTsgIF9fcmV2MF8yMTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIxNSwgX19zMF8yMTUsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldjFfMjE1OyAgX19yZXYxXzIxNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjE1LCBfX3MxXzIxNSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzIxNTsgXAorICBfX3JldF8yMTUgPSAoaW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19yZXYwXzIxNSksIChpbnQzMngyX3QpKF9fbm9zd2FwX3Zyc2hybl9uX3M2NChfX3JldjFfMjE1LCBfX3AyXzIxNSkpKSk7IFwKKyAgX19yZXRfMjE1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjE1LCBfX3JldF8yMTUsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIxNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl9zMTYoX19wMF8yMTYsIF9fcDFfMjE2LCBfX3AyXzIxNikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMjE2ID0gX19wMF8yMTY7IFwKKyAgaW50MTZ4OF90IF9fczFfMjE2ID0gX19wMV8yMTY7IFwKKyAgaW50OHgxNl90IF9fcmV0XzIxNjsgXAorICBfX3JldF8yMTYgPSAoaW50OHgxNl90KSh2Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fczBfMjE2KSwgKGludDh4OF90KSh2cnNocm5fbl9zMTYoX19zMV8yMTYsIF9fcDJfMjE2KSkpKTsgXAorICBfX3JldF8yMTY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocm5faGlnaF9uX3MxNihfX3AwXzIxNywgX19wMV8yMTcsIF9fcDJfMjE3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8yMTcgPSBfX3AwXzIxNzsgXAorICBpbnQxNng4X3QgX19zMV8yMTcgPSBfX3AxXzIxNzsgXAorICBpbnQ4eDhfdCBfX3JldjBfMjE3OyAgX19yZXYwXzIxNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjE3LCBfX3MwXzIxNywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MV8yMTc7ICBfX3JldjFfMjE3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMTcsIF9fczFfMjE3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXRfMjE3OyBcCisgIF9fcmV0XzIxNyA9IChpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19yZXYwXzIxNyksIChpbnQ4eDhfdCkoX19ub3N3YXBfdnJzaHJuX25fczE2KF9fcmV2MV8yMTcsIF9fcDJfMjE3KSkpKTsgXAorICBfX3JldF8yMTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMTcsIF9fcmV0XzIxNywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjE3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cnNxcnRlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyc3FydGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyc3FydGVfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJzcXJ0ZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2cnNxcnRlZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZyc3FydGVkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZWRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2cnNxcnRlc19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZyc3FydGVzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyc3FydHNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3FfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cnNxcnRzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyc3FydHNfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyc3FydHNfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZyc3FydHNkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZyc3FydHNkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdnJzcXJ0c3NfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3NfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdnJzcXJ0c3NfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3NfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFkX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYWRfbl9zNjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhZF9uX3M2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cnN1YmhuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MTYoX19wMCwgdnJzdWJobl91MzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyc3ViaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UxNihfX3JldjAsIF9fbm9zd2FwX3Zyc3ViaG5fdTMyKF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyc3ViaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UzMihfX3AwLCB2cnN1YmhuX3U2NChfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJzdWJobl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTMyKF9fcmV2MCwgX19ub3N3YXBfdnJzdWJobl91NjQoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJzdWJobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91OChfX3AwLCB2cnN1YmhuX3UxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJzdWJobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3U4KF9fcmV2MCwgX19ub3N3YXBfdnJzdWJobl91MTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cnN1YmhuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3MxNihfX3AwLCB2cnN1YmhuX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cnN1YmhuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihfX3JldjAsIF9fbm9zd2FwX3Zyc3ViaG5fczMyKF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJzdWJobl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMzIoX19wMCwgdnJzdWJobl9zNjQoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJzdWJobl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zMzIoX19yZXYwLCBfX25vc3dhcF92cnN1YmhuX3M2NChfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyc3ViaG5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zOChfX3AwLCB2cnN1YmhuX3MxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cnN1YmhuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zOChfX3JldjAsIF9fbm9zd2FwX3Zyc3ViaG5fczE2KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldHFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldHFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pNjQoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9mNjQoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfZjY0KF9fczAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfZjY0KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2Y2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9mNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9mNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2c2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdnNobGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2c2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNobGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZzaGxkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxkX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNobGRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNobGRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxkX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9oaWdoX25fdTgoX19wMF8yMTgsIF9fcDFfMjE4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwXzIxOCA9IF9fcDBfMjE4OyBcCisgIHVpbnQxNng4X3QgX19yZXRfMjE4OyBcCisgIF9fcmV0XzIxOCA9ICh1aW50MTZ4OF90KSh2c2hsbF9uX3U4KHZnZXRfaGlnaF91OChfX3MwXzIxOCksIF9fcDFfMjE4KSk7IFwKKyAgX19yZXRfMjE4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfaGlnaF9uX3U4KF9fcDBfMjE5LCBfX3AxXzIxOSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMF8yMTkgPSBfX3AwXzIxOTsgXAorICB1aW50OHgxNl90IF9fcmV2MF8yMTk7ICBfX3JldjBfMjE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMTksIF9fczBfMjE5LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0XzIxOTsgXAorICBfX3JldF8yMTkgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdnNobGxfbl91OChfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYwXzIxOSksIF9fcDFfMjE5KSk7IFwKKyAgX19yZXRfMjE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjE5LCBfX3JldF8yMTksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIxOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfaGlnaF9uX3UzMihfX3AwXzIyMCwgX19wMV8yMjApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczBfMjIwID0gX19wMF8yMjA7IFwKKyAgdWludDY0eDJfdCBfX3JldF8yMjA7IFwKKyAgX19yZXRfMjIwID0gKHVpbnQ2NHgyX3QpKHZzaGxsX25fdTMyKHZnZXRfaGlnaF91MzIoX19zMF8yMjApLCBfX3AxXzIyMCkpOyBcCisgIF9fcmV0XzIyMDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl91MzIoX19wMF8yMjEsIF9fcDFfMjIxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwXzIyMSA9IF9fcDBfMjIxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwXzIyMTsgIF9fcmV2MF8yMjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIyMSwgX19zMF8yMjEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXRfMjIxOyBcCisgIF9fcmV0XzIyMSA9ICh1aW50NjR4Ml90KShfX25vc3dhcF92c2hsbF9uX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MF8yMjEpLCBfX3AxXzIyMSkpOyBcCisgIF9fcmV0XzIyMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIyMSwgX19yZXRfMjIxLCAxLCAwKTsgXAorICBfX3JldF8yMjE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl91MTYoX19wMF8yMjIsIF9fcDFfMjIyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwXzIyMiA9IF9fcDBfMjIyOyBcCisgIHVpbnQzMng0X3QgX19yZXRfMjIyOyBcCisgIF9fcmV0XzIyMiA9ICh1aW50MzJ4NF90KSh2c2hsbF9uX3UxNih2Z2V0X2hpZ2hfdTE2KF9fczBfMjIyKSwgX19wMV8yMjIpKTsgXAorICBfX3JldF8yMjI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsbF9oaWdoX25fdTE2KF9fcDBfMjIzLCBfX3AxXzIyMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMF8yMjMgPSBfX3AwXzIyMzsgXAorICB1aW50MTZ4OF90IF9fcmV2MF8yMjM7ICBfX3JldjBfMjIzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMjMsIF9fczBfMjIzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0XzIyMzsgXAorICBfX3JldF8yMjMgPSAodWludDMyeDRfdCkoX19ub3N3YXBfdnNobGxfbl91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjBfMjIzKSwgX19wMV8yMjMpKTsgXAorICBfX3JldF8yMjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMjMsIF9fcmV0XzIyMywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjIzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9oaWdoX25fczgoX19wMF8yMjQsIF9fcDFfMjI0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczBfMjI0ID0gX19wMF8yMjQ7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzIyNDsgXAorICBfX3JldF8yMjQgPSAoaW50MTZ4OF90KSh2c2hsbF9uX3M4KHZnZXRfaGlnaF9zOChfX3MwXzIyNCksIF9fcDFfMjI0KSk7IFwKKyAgX19yZXRfMjI0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfaGlnaF9uX3M4KF9fcDBfMjI1LCBfX3AxXzIyNSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwXzIyNSA9IF9fcDBfMjI1OyBcCisgIGludDh4MTZfdCBfX3JldjBfMjI1OyAgX19yZXYwXzIyNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjI1LCBfX3MwXzIyNSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzIyNTsgXAorICBfX3JldF8yMjUgPSAoaW50MTZ4OF90KShfX25vc3dhcF92c2hsbF9uX3M4KF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjBfMjI1KSwgX19wMV8yMjUpKTsgXAorICBfX3JldF8yMjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMjUsIF9fcmV0XzIyNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjI1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9oaWdoX25fczMyKF9fcDBfMjI2LCBfX3AxXzIyNikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwXzIyNiA9IF9fcDBfMjI2OyBcCisgIGludDY0eDJfdCBfX3JldF8yMjY7IFwKKyAgX19yZXRfMjI2ID0gKGludDY0eDJfdCkodnNobGxfbl9zMzIodmdldF9oaWdoX3MzMihfX3MwXzIyNiksIF9fcDFfMjI2KSk7IFwKKyAgX19yZXRfMjI2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfaGlnaF9uX3MzMihfX3AwXzIyNywgX19wMV8yMjcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMF8yMjcgPSBfX3AwXzIyNzsgXAorICBpbnQzMng0X3QgX19yZXYwXzIyNzsgIF9fcmV2MF8yMjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIyNywgX19zMF8yMjcsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldF8yMjc7IFwKKyAgX19yZXRfMjI3ID0gKGludDY0eDJfdCkoX19ub3N3YXBfdnNobGxfbl9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjBfMjI3KSwgX19wMV8yMjcpKTsgXAorICBfX3JldF8yMjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMjcsIF9fcmV0XzIyNywgMSwgMCk7IFwKKyAgX19yZXRfMjI3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9oaWdoX25fczE2KF9fcDBfMjI4LCBfX3AxXzIyOCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwXzIyOCA9IF9fcDBfMjI4OyBcCisgIGludDMyeDRfdCBfX3JldF8yMjg7IFwKKyAgX19yZXRfMjI4ID0gKGludDMyeDRfdCkodnNobGxfbl9zMTYodmdldF9oaWdoX3MxNihfX3MwXzIyOCksIF9fcDFfMjI4KSk7IFwKKyAgX19yZXRfMjI4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfaGlnaF9uX3MxNihfX3AwXzIyOSwgX19wMV8yMjkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMF8yMjkgPSBfX3AwXzIyOTsgXAorICBpbnQxNng4X3QgX19yZXYwXzIyOTsgIF9fcmV2MF8yMjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIyOSwgX19zMF8yMjksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldF8yMjk7IFwKKyAgX19yZXRfMjI5ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdnNobGxfbl9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjBfMjI5KSwgX19wMV8yMjkpKTsgXAorICBfX3JldF8yMjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMjksIF9fcmV0XzIyOSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjI5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hyZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJkX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocmRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hyZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hyZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNocmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl91MzIoX19wMF8yMzAsIF9fcDFfMjMwLCBfX3AyXzIzMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF8yMzAgPSBfX3AwXzIzMDsgXAorICB1aW50MzJ4NF90IF9fczFfMjMwID0gX19wMV8yMzA7IFwKKyAgdWludDE2eDhfdCBfX3JldF8yMzA7IFwKKyAgX19yZXRfMjMwID0gKHVpbnQxNng4X3QpKHZjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19zMF8yMzApLCAodWludDE2eDRfdCkodnNocm5fbl91MzIoX19zMV8yMzAsIF9fcDJfMjMwKSkpKTsgXAorICBfX3JldF8yMzA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hybl9oaWdoX25fdTMyKF9fcDBfMjMxLCBfX3AxXzIzMSwgX19wMl8yMzEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfMjMxID0gX19wMF8yMzE7IFwKKyAgdWludDMyeDRfdCBfX3MxXzIzMSA9IF9fcDFfMjMxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwXzIzMTsgIF9fcmV2MF8yMzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIzMSwgX19zMF8yMzEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxXzIzMTsgIF9fcmV2MV8yMzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIzMSwgX19zMV8yMzEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXRfMjMxOyBcCisgIF9fcmV0XzIzMSA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fcmV2MF8yMzEpLCAodWludDE2eDRfdCkoX19ub3N3YXBfdnNocm5fbl91MzIoX19yZXYxXzIzMSwgX19wMl8yMzEpKSkpOyBcCisgIF9fcmV0XzIzMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIzMSwgX19yZXRfMjMxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMzE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl91NjQoX19wMF8yMzIsIF9fcDFfMjMyLCBfX3AyXzIzMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMF8yMzIgPSBfX3AwXzIzMjsgXAorICB1aW50NjR4Ml90IF9fczFfMjMyID0gX19wMV8yMzI7IFwKKyAgdWludDMyeDRfdCBfX3JldF8yMzI7IFwKKyAgX19yZXRfMjMyID0gKHVpbnQzMng0X3QpKHZjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19zMF8yMzIpLCAodWludDMyeDJfdCkodnNocm5fbl91NjQoX19zMV8yMzIsIF9fcDJfMjMyKSkpKTsgXAorICBfX3JldF8yMzI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hybl9oaWdoX25fdTY0KF9fcDBfMjMzLCBfX3AxXzIzMywgX19wMl8yMzMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfMjMzID0gX19wMF8yMzM7IFwKKyAgdWludDY0eDJfdCBfX3MxXzIzMyA9IF9fcDFfMjMzOyBcCisgIHVpbnQzMngyX3QgX19yZXYwXzIzMzsgIF9fcmV2MF8yMzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIzMywgX19zMF8yMzMsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYxXzIzMzsgIF9fcmV2MV8yMzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIzMywgX19zMV8yMzMsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXRfMjMzOyBcCisgIF9fcmV0XzIzMyA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fcmV2MF8yMzMpLCAodWludDMyeDJfdCkoX19ub3N3YXBfdnNocm5fbl91NjQoX19yZXYxXzIzMywgX19wMl8yMzMpKSkpOyBcCisgIF9fcmV0XzIzMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIzMywgX19yZXRfMjMzLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMzM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl91MTYoX19wMF8yMzQsIF9fcDFfMjM0LCBfX3AyXzIzNCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzIzNCA9IF9fcDBfMjM0OyBcCisgIHVpbnQxNng4X3QgX19zMV8yMzQgPSBfX3AxXzIzNDsgXAorICB1aW50OHgxNl90IF9fcmV0XzIzNDsgXAorICBfX3JldF8yMzQgPSAodWludDh4MTZfdCkodmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19zMF8yMzQpLCAodWludDh4OF90KSh2c2hybl9uX3UxNihfX3MxXzIzNCwgX19wMl8yMzQpKSkpOyBcCisgIF9fcmV0XzIzNDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl91MTYoX19wMF8yMzUsIF9fcDFfMjM1LCBfX3AyXzIzNSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzIzNSA9IF9fcDBfMjM1OyBcCisgIHVpbnQxNng4X3QgX19zMV8yMzUgPSBfX3AxXzIzNTsgXAorICB1aW50OHg4X3QgX19yZXYwXzIzNTsgIF9fcmV2MF8yMzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIzNSwgX19zMF8yMzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxXzIzNTsgIF9fcmV2MV8yMzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIzNSwgX19zMV8yMzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfMjM1OyBcCisgIF9fcmV0XzIzNSA9ICh1aW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV91OCgodWludDh4OF90KShfX3JldjBfMjM1KSwgKHVpbnQ4eDhfdCkoX19ub3N3YXBfdnNocm5fbl91MTYoX19yZXYxXzIzNSwgX19wMl8yMzUpKSkpOyBcCisgIF9fcmV0XzIzNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIzNSwgX19yZXRfMjM1LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMzU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl9zMzIoX19wMF8yMzYsIF9fcDFfMjM2LCBfX3AyXzIzNikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzIzNiA9IF9fcDBfMjM2OyBcCisgIGludDMyeDRfdCBfX3MxXzIzNiA9IF9fcDFfMjM2OyBcCisgIGludDE2eDhfdCBfX3JldF8yMzY7IFwKKyAgX19yZXRfMjM2ID0gKGludDE2eDhfdCkodmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fczBfMjM2KSwgKGludDE2eDRfdCkodnNocm5fbl9zMzIoX19zMV8yMzYsIF9fcDJfMjM2KSkpKTsgXAorICBfX3JldF8yMzY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hybl9oaWdoX25fczMyKF9fcDBfMjM3LCBfX3AxXzIzNywgX19wMl8yMzcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8yMzcgPSBfX3AwXzIzNzsgXAorICBpbnQzMng0X3QgX19zMV8yMzcgPSBfX3AxXzIzNzsgXAorICBpbnQxNng0X3QgX19yZXYwXzIzNzsgIF9fcmV2MF8yMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIzNywgX19zMF8yMzcsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjFfMjM3OyAgX19yZXYxXzIzNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjM3LCBfX3MxXzIzNywgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzIzNzsgXAorICBfX3JldF8yMzcgPSAoaW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19yZXYwXzIzNyksIChpbnQxNng0X3QpKF9fbm9zd2FwX3ZzaHJuX25fczMyKF9fcmV2MV8yMzcsIF9fcDJfMjM3KSkpKTsgXAorICBfX3JldF8yMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMzcsIF9fcmV0XzIzNywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjM3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9oaWdoX25fczY0KF9fcDBfMjM4LCBfX3AxXzIzOCwgX19wMl8yMzgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8yMzggPSBfX3AwXzIzODsgXAorICBpbnQ2NHgyX3QgX19zMV8yMzggPSBfX3AxXzIzODsgXAorICBpbnQzMng0X3QgX19yZXRfMjM4OyBcCisgIF9fcmV0XzIzOCA9IChpbnQzMng0X3QpKHZjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3MwXzIzOCksIChpbnQzMngyX3QpKHZzaHJuX25fczY0KF9fczFfMjM4LCBfX3AyXzIzOCkpKSk7IFwKKyAgX19yZXRfMjM4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocm5faGlnaF9uX3M2NChfX3AwXzIzOSwgX19wMV8yMzksIF9fcDJfMjM5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMjM5ID0gX19wMF8yMzk7IFwKKyAgaW50NjR4Ml90IF9fczFfMjM5ID0gX19wMV8yMzk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MF8yMzk7ICBfX3JldjBfMjM5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMzksIF9fczBfMjM5LCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXYxXzIzOTsgIF9fcmV2MV8yMzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIzOSwgX19zMV8yMzksIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldF8yMzk7IFwKKyAgX19yZXRfMjM5ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fcmV2MF8yMzkpLCAoaW50MzJ4Ml90KShfX25vc3dhcF92c2hybl9uX3M2NChfX3JldjFfMjM5LCBfX3AyXzIzOSkpKSk7IFwKKyAgX19yZXRfMjM5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjM5LCBfX3JldF8yMzksIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIzOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocm5faGlnaF9uX3MxNihfX3AwXzI0MCwgX19wMV8yNDAsIF9fcDJfMjQwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8yNDAgPSBfX3AwXzI0MDsgXAorICBpbnQxNng4X3QgX19zMV8yNDAgPSBfX3AxXzI0MDsgXAorICBpbnQ4eDE2X3QgX19yZXRfMjQwOyBcCisgIF9fcmV0XzI0MCA9IChpbnQ4eDE2X3QpKHZjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19zMF8yNDApLCAoaW50OHg4X3QpKHZzaHJuX25fczE2KF9fczFfMjQwLCBfX3AyXzI0MCkpKSk7IFwKKyAgX19yZXRfMjQwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocm5faGlnaF9uX3MxNihfX3AwXzI0MSwgX19wMV8yNDEsIF9fcDJfMjQxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8yNDEgPSBfX3AwXzI0MTsgXAorICBpbnQxNng4X3QgX19zMV8yNDEgPSBfX3AxXzI0MTsgXAorICBpbnQ4eDhfdCBfX3JldjBfMjQxOyAgX19yZXYwXzI0MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjQxLCBfX3MwXzI0MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MV8yNDE7ICBfX3JldjFfMjQxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yNDEsIF9fczFfMjQxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXRfMjQxOyBcCisgIF9fcmV0XzI0MSA9IChpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19yZXYwXzI0MSksIChpbnQ4eDhfdCkoX19ub3N3YXBfdnNocm5fbl9zMTYoX19yZXYxXzI0MSwgX19wMl8yNDEpKSkpOyBcCisgIF9fcmV0XzI0MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI0MSwgX19yZXRfMjQxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yNDE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlkX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNsaWRfbl91NjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlkX25fdTY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpZF9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNsaWRfbl9zNjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpZF9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNsaWRfbl9zNjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpX25fcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpcV9uX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpcV9uX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3QgdnNxYWRkYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRiX3U4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZzcWFkZGJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnNxYWRkYl91OChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2c3FhZGRzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnNxYWRkc191MzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZzcWFkZHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRzX3UzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2c3FhZGRkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNxYWRkZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZzcWFkZGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2c3FhZGRoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnNxYWRkaF91MTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZzcWFkZGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRoX3UxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZzcWFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnNxYWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzcWFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzcWFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnNxYWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnNxYWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c3FhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2c3FhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnNxYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2c3FhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2c3FhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZzcWFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2c3FhZGRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZzcWFkZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2c3FhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZzcWFkZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnNxcnRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnNxcnRxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZzcXJ0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3FydHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnNxcnRxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnNxcnRxX3YoKGludDh4MTZfdClfX3AwLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZzcXJ0cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3FydHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnNxcnRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3FydF92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZzcXJ0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnNxcnRfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZzcXJ0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnNxcnRfdigoaW50OHg4X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZzcXJ0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcXJ0X3YoKGludDh4OF90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFkX25fdTY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYWRfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlkX25fdTY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaWRfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpX25fcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCA2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCAzOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCAzOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDQyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAxMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAxMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0Mik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0Mik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3A4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9wOF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3A2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3A2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCA1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCA1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfcDhfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3A4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAzNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3A2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAzOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3AxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAzNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3U4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCA0OCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91OF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgNDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91MzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3UzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgNTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91NjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3U2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgNTEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91MTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDQ5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3UxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgNDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zOF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAzMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zOF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA0Mik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9mNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA0Mik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2YzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgNDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9mMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2YxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDQwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3M2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3M2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMzUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91OF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3U4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3UzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMTgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91MzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDE4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91NjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdTE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3UxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3M4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3M4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2Y2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAxMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2Y2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAxMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfZjMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9mMzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2YxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zMzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zMzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9wNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9wMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCA1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfcDhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3A4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDM2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfcDY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAzOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9wNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgMzgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3AxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAzNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3U4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCA0OCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91OF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA0OCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3UzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDUwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCA1MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91NjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgNTEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91MTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDQ5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3UxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3M4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3M4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2Y2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDQyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2Y2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDQyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgNDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9mMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9mMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3MzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zMzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDM0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3M2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgMzUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMzMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAzMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdThfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3U4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDE2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91MzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91MzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAxOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdTY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91MTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91MTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zOF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfZjY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAxMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2Y2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2YzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2YzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfZjE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zMzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3M2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3A4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDhfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3A2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9wNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCA2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCA1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgMzYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDhfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAzNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3A2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgMzgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgMzgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3AxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdThfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3U4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgNDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91MzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3UzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDUwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA1MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91NjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCA1MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3UxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgNDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgNDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2Y2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0Mik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9mNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0Mik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2YzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9mMzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2YxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9mMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3MzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3M2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3MxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdThfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdThfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDE2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91MzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3UzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAxOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdTY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91NjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdTE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91MTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3M4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2Y2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDEwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2YzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9mMzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2YxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9mMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3MzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3M2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3MxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAzOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNTEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA1MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgNDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgNDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDM1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCAzNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDM2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgMzgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMzgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA1MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCA1MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCAzMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCA0Mik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgMTkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAxMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAzOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgMzgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA1MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDQyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDQyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgMzUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDEwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDM4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMzgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA0OCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNTEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgMzIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA0Mik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgNDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDM1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDE5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAxMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDM4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDM4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA1MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCA1MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0Mik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0Mik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAxMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgMzYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCAzOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMzgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgNTEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgNDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDQyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMzUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMzUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDEwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDEwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3RycV9wMTI4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTI4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0cnFfcDEyOChfX3AwLCBfX3MxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdHJxX3AxMjgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxMjhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3RycV9wMTI4KF9fcDAsIF9fczEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2c3ViZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdnN1YmRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2c3ViZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnN1YmRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZzdWJkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnN1YnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZzdWJxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnN1Yl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnN1Yl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZzdWJobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTE2KF9fcDAsIHZzdWJobl91MzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZzdWJobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTE2KF9fcmV2MCwgX19ub3N3YXBfdnN1YmhuX3UzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c3ViaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UzMihfX3AwLCB2c3ViaG5fdTY0KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c3ViaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UzMihfX3JldjAsIF9fbm9zd2FwX3ZzdWJobl91NjQoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnN1YmhuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3U4KF9fcDAsIHZzdWJobl91MTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZzdWJobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3U4KF9fcmV2MCwgX19ub3N3YXBfdnN1YmhuX3UxNihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZzdWJobl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMTYoX19wMCwgdnN1YmhuX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2c3ViaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczE2KF9fcmV2MCwgX19ub3N3YXBfdnN1YmhuX3MzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZzdWJobl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMzIoX19wMCwgdnN1YmhuX3M2NChfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2c3ViaG5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczMyKF9fcmV2MCwgX19ub3N3YXBfdnN1YmhuX3M2NChfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZzdWJobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3M4KF9fcDAsIHZzdWJobl9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnN1YmhuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zOChfX3JldjAsIF9fbm9zd2FwX3ZzdWJobl9zMTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnN1YmxfaGlnaF91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfdTgoX19wMCkgLSB2bW92bF9oaWdoX3U4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZzdWJsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZzdWJsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF91MzIoX19wMCkgLSB2bW92bF9oaWdoX3UzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2c3VibF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTMyKF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9oaWdoX3UzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c3VibF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfdTE2KF9fcDApIC0gdm1vdmxfaGlnaF91MTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnN1YmxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3UxNihfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfaGlnaF91MTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2c3VibF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF9zOChfX3AwKSAtIHZtb3ZsX2hpZ2hfczgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2c3VibF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczgoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2c3VibF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfczMyKF9fcDApIC0gdm1vdmxfaGlnaF9zMzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2c3VibF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3MzMihfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2c3VibF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfczE2KF9fcDApIC0gdm1vdmxfaGlnaF9zMTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2c3VibF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3MxNihfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfaGlnaF9zMTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnN1YndfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF9oaWdoX3U4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZzdWJ3X2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZzdWJ3X2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtb3ZsX2hpZ2hfdTMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZzdWJ3X2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfaGlnaF91MzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnN1YndfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm1vdmxfaGlnaF91MTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnN1YndfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9oaWdoX3UxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZzdWJ3X2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm1vdmxfaGlnaF9zOChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZzdWJ3X2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfaGlnaF9zOChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZzdWJ3X2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtb3ZsX2hpZ2hfczMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnN1YndfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2c3Vid19oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF9oaWdoX3MxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZzdWJ3X2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnRybjFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ0cm4xX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnRybjFfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMiwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnRybjFfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDIsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2dHJuMXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxNiwgMiwgMTgsIDQsIDIwLCA2LCAyMiwgOCwgMjQsIDEwLCAyNiwgMTIsIDI4LCAxNCwgMzApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZ0cm4xcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxNiwgMiwgMTgsIDQsIDIwLCA2LCAyMiwgOCwgMjQsIDEwLCAyNiwgMTIsIDI4LCAxNCwgMzApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2dHJuMXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnRybjFxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnRybjFxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZ0cm4xcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZ0cm4xcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDE2LCAyLCAxOCwgNCwgMjAsIDYsIDIyLCA4LCAyNCwgMTAsIDI2LCAxMiwgMjgsIDE0LCAzMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnRybjFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDE2LCAyLCAxOCwgNCwgMjAsIDYsIDIyLCA4LCAyNCwgMTAsIDI2LCAxMiwgMjgsIDE0LCAzMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZ0cm4xcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAyLCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2dHJuMXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDIsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2dHJuMXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnRybjFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnRybjFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZ0cm4xcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnRybjFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMTYsIDIsIDE4LCA0LCAyMCwgNiwgMjIsIDgsIDI0LCAxMCwgMjYsIDEyLCAyOCwgMTQsIDMwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZ0cm4xcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMTYsIDIsIDE4LCA0LCAyMCwgNiwgMjIsIDgsIDI0LCAxMCwgMjYsIDEyLCAyOCwgMTQsIDMwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZ0cm4xcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnRybjFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnRybjFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDIsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2dHJuMXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMiwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnRybjFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDIsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnRybjFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMiwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnRybjFxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnRybjFxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnRybjFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnRybjFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnRybjFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0cm4xX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnRybjFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnRybjFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2dHJuMV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAyLCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2dHJuMV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMiwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dHJuMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dHJuMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnRybjFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZ0cm4xX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZ0cm4xX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnRybjFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2dHJuMV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAyLCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZ0cm4xX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMiwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnRybjJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ0cm4yX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnRybjJfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgNSwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnRybjJfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDUsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2dHJuMnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAxNywgMywgMTksIDUsIDIxLCA3LCAyMywgOSwgMjUsIDExLCAyNywgMTMsIDI5LCAxNSwgMzEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZ0cm4ycV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAxNywgMywgMTksIDUsIDIxLCA3LCAyMywgOSwgMjUsIDExLCAyNywgMTMsIDI5LCAxNSwgMzEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2dHJuMnFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnRybjJxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnRybjJxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZ0cm4ycV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZ0cm4ycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDE3LCAzLCAxOSwgNSwgMjEsIDcsIDIzLCA5LCAyNSwgMTEsIDI3LCAxMywgMjksIDE1LCAzMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnRybjJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDE3LCAzLCAxOSwgNSwgMjEsIDcsIDIzLCA5LCAyNSwgMTEsIDI3LCAxMywgMjksIDE1LCAzMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZ0cm4ycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA1LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2dHJuMnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDUsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2dHJuMnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnRybjJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnRybjJxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZ0cm4ycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnRybjJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMTcsIDMsIDE5LCA1LCAyMSwgNywgMjMsIDksIDI1LCAxMSwgMjcsIDEzLCAyOSwgMTUsIDMxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZ0cm4ycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMTcsIDMsIDE5LCA1LCAyMSwgNywgMjMsIDksIDI1LCAxMSwgMjcsIDEzLCAyOSwgMTUsIDMxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZ0cm4ycV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnRybjJxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnRybjJxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDUsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2dHJuMnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgNSwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnRybjJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDUsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnRybjJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgNSwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnRybjJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnRybjJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnRybjJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnRybjJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnRybjJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0cm4yX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnRybjJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnRybjJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2dHJuMl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA1LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2dHJuMl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgNSwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dHJuMl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dHJuMl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnRybjJfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZ0cm4yX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZ0cm4yX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnRybjJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2dHJuMl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA1LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZ0cm4yX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgNSwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZ0c3RfcDY0KHBvbHk2NHgxX3QgX19wMCwgcG9seTY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2dHN0X3A2NChwb2x5NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2dHN0cV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZ0c3RxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2dHN0cV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZ0c3RxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2dHN0cV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2dHN0cV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2dHN0X3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnRzdF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnRzdF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2dHN0X3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZ0c3RkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnRzdGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2dHN0ZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZ0c3RkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0ZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnRzdGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3QgdnVxYWRkYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZGJfczgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2dXFhZGRiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnVxYWRkYl9zOChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZ1cWFkZHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZ1cWFkZHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnVxYWRkZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnVxYWRkZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnVxYWRkZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnVxYWRkZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2dXFhZGRoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2dXFhZGRoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnVxYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnVxYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnVxYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZ1cWFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2dXFhZGRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnVxYWRkcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnVxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZ1cWFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnVxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2dXFhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dXFhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ1cWFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2dXFhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnVxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZ1cWFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnVxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnVxYWRkX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2dXFhZGRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnVxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnVxYWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2dXFhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ1enAxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dXpwMV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZ1enAxX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZ1enAxX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnV6cDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0LCAyNiwgMjgsIDMwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2dXpwMXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0LCAyNiwgMjgsIDMwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnV6cDFxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZ1enAxcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZ1enAxcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2dXpwMXFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2dXpwMXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZ1enAxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2dXpwMXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnV6cDFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnV6cDFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZ1enAxcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZ1enAxcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2dXpwMXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZ1enAxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2dXpwMXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2dXpwMXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZ1enAxcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZ1enAxcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnV6cDFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZ1enAxcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZ1enAxcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZ1enAxcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZ1enAxcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZ1enAxcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZ1enAxcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ1enAxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dXpwMV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZ1enAxX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZ1enAxX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnV6cDFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnV6cDFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnV6cDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnV6cDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZ1enAxX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2dXpwMV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2dXpwMV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZ1enAxX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnV6cDFfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2dXpwMV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ1enAyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dXpwMl9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZ1enAyX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZ1enAyX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnV6cDJxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMSwgMjMsIDI1LCAyNywgMjksIDMxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2dXpwMnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMSwgMjMsIDI1LCAyNywgMjksIDMxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnV6cDJxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZ1enAycV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZ1enAycV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2dXpwMnFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2dXpwMnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOSwgMzEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZ1enAycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOSwgMzEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2dXpwMnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnV6cDJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnV6cDJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZ1enAycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZ1enAycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2dXpwMnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZ1enAycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUsIDE3LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI5LCAzMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2dXpwMnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUsIDE3LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI5LCAzMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2dXpwMnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZ1enAycV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZ1enAycV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnV6cDJxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZ1enAycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZ1enAycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZ1enAycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZ1enAycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZ1enAycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZ1enAycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ1enAyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dXpwMl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZ1enAyX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZ1enAyX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnV6cDJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnV6cDJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnV6cDJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnV6cDJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZ1enAyX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2dXpwMl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2dXpwMl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZ1enAyX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnV6cDJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2dXpwMl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ6aXAxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ6aXAxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2emlwMV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAxLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2emlwMV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMSwgNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZ6aXAxcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnppcDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZ6aXAxcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2emlwMXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2emlwMXFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2emlwMXFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZ6aXAxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnppcDFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZ6aXAxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAxLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2emlwMXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDEsIDUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2emlwMXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnppcDFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnppcDFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnppcDFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZ6aXAxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2emlwMXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2emlwMXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZ6aXAxcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZ6aXAxcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAxLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnppcDFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDEsIDUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZ6aXAxcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAxLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZ6aXAxcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDEsIDUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZ6aXAxcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZ6aXAxcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZ6aXAxcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnppcDFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2emlwMV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2emlwMV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnppcDFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnppcDFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2emlwMV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAxLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2emlwMV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMSwgNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2emlwMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ6aXAxX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZ6aXAxX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2emlwMV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2emlwMV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZ6aXAxX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnppcDFfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMSwgNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2emlwMV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDEsIDUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ6aXAyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnppcDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnppcDJfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMiwgNiwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnppcDJfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDIsIDYsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2emlwMnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA4LCAyNCwgOSwgMjUsIDEwLCAyNiwgMTEsIDI3LCAxMiwgMjgsIDEzLCAyOSwgMTQsIDMwLCAxNSwgMzEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZ6aXAycV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCA4LCAyNCwgOSwgMjUsIDEwLCAyNiwgMTEsIDI3LCAxMiwgMjgsIDEzLCAyOSwgMTQsIDMwLCAxNSwgMzEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2emlwMnFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnppcDJxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnppcDJxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2emlwMnFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnppcDJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgOCwgMjQsIDksIDI1LCAxMCwgMjYsIDExLCAyNywgMTIsIDI4LCAxMywgMjksIDE0LCAzMCwgMTUsIDMxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2emlwMnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgOCwgMjQsIDksIDI1LCAxMCwgMjYsIDExLCAyNywgMTIsIDI4LCAxMywgMjksIDE0LCAzMCwgMTUsIDMxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnppcDJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDIsIDYsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZ6aXAycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMiwgNiwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZ6aXAycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2emlwMnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2emlwMnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZ6aXAycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZ6aXAycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDgsIDI0LCA5LCAyNSwgMTAsIDI2LCAxMSwgMjcsIDEyLCAyOCwgMTMsIDI5LCAxNCwgMzAsIDE1LCAzMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2emlwMnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDgsIDI0LCA5LCAyNSwgMTAsIDI2LCAxMSwgMjcsIDEyLCAyOCwgMTMsIDI5LCAxNCwgMzAsIDE1LCAzMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2emlwMnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZ6aXAycV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZ6aXAycV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAyLCA2LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnppcDJxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDIsIDYsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZ6aXAycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAyLCA2LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZ6aXAycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDIsIDYsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZ6aXAycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZ6aXAycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZ6aXAycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2emlwMnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnppcDJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2emlwMl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2emlwMl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2emlwMl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZ6aXAyX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDIsIDYsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZ6aXAyX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAyLCA2LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ6aXAyX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2emlwMl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZ6aXAyX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2emlwMl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2emlwMl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZ6aXAyX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnppcDJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMiwgNiwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2emlwMl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDIsIDYsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZhYmFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZHFfdTgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmFiYXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRxX3U4KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFiYXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZHFfdTMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhYmFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZHFfdTMyKF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFiYXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZHFfdTE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhYmFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZHFfdTE2KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2YWJhcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZHFfczgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2YWJhcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkcV9zOChfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFiYXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkcV9zMzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWJhcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZHFfczMyKF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWJhcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRxX3MxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhYmFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkcV9zMTYoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZhYmFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRfdTgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2YWJhX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRfdTgoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2YWJhX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRfdTMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZhYmFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkX3UzMihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZhYmFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZF91MTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmFiYV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRfdTE2KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZhYmFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZF9zOChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmFiYV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRfczgoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZhYmFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkX3MzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZhYmFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRfczMyKF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2YWJhX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZF9zMTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2YWJhX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkX3MxNihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhYmRsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSh2bW92bF91OCgodWludDh4OF90KSh2YWJkX3U4KF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhYmRsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdm1vdmxfdTgoKHVpbnQ4eDhfdCkoX19ub3N3YXBfdmFiZF91OChfX3JldjAsIF9fcmV2MSkpKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3ZhYmRsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92bW92bF91OCgodWludDh4OF90KShfX25vc3dhcF92YWJkX3U4KF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmFiZGxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKHZtb3ZsX3UzMigodWludDMyeDJfdCkodmFiZF91MzIoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmFiZGxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fbm9zd2FwX3Ztb3ZsX3UzMigodWludDMyeDJfdCkoX19ub3N3YXBfdmFiZF91MzIoX19yZXYwLCBfX3JldjEpKSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDY0eDJfdCBfX25vc3dhcF92YWJkbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19ub3N3YXBfdm1vdmxfdTMyKCh1aW50MzJ4Ml90KShfX25vc3dhcF92YWJkX3UzMihfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhYmRsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSh2bW92bF91MTYoKHVpbnQxNng0X3QpKHZhYmRfdTE2KF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhYmRsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92bW92bF91MTYoKHVpbnQxNng0X3QpKF9fbm9zd2FwX3ZhYmRfdTE2KF9fcmV2MCwgX19yZXYxKSkpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdmFiZGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3Ztb3ZsX3UxNigodWludDE2eDRfdCkoX19ub3N3YXBfdmFiZF91MTYoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhYmRsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKHZtb3ZsX3U4KCh1aW50OHg4X3QpKHZhYmRfczgoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWJkbF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Ztb3ZsX3U4KCh1aW50OHg4X3QpKF9fbm9zd2FwX3ZhYmRfczgoX19yZXYwLCBfX3JldjEpKSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZhYmRsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Ztb3ZsX3U4KCh1aW50OHg4X3QpKF9fbm9zd2FwX3ZhYmRfczgoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZhYmRsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKHZtb3ZsX3UzMigodWludDMyeDJfdCkodmFiZF9zMzIoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YWJkbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19ub3N3YXBfdm1vdmxfdTMyKCh1aW50MzJ4Ml90KShfX25vc3dhcF92YWJkX3MzMihfX3JldjAsIF9fcmV2MSkpKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdmFiZGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19ub3N3YXBfdm1vdmxfdTMyKCh1aW50MzJ4Ml90KShfX25vc3dhcF92YWJkX3MzMihfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFiZGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkodm1vdmxfdTE2KCh1aW50MTZ4NF90KSh2YWJkX3MxNihfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhYmRsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX25vc3dhcF92bW92bF91MTYoKHVpbnQxNng0X3QpKF9fbm9zd2FwX3ZhYmRfczE2KF9fcmV2MCwgX19yZXYxKSkpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92YWJkbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX25vc3dhcF92bW92bF91MTYoKHVpbnQxNng0X3QpKF9fbm9zd2FwX3ZhYmRfczE2KF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFkZGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfdTgoX19wMCkgKyB2bW92bF91OChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWRkbF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfdTgoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX3U4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZhZGRsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3UzMihfX3AwKSArIHZtb3ZsX3UzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YWRkbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF91MzIoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX3UzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWRkbF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF91MTYoX19wMCkgKyB2bW92bF91MTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFkZGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfdTE2KF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF91MTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWRkbF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9zOChfX3AwKSArIHZtb3ZsX3M4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFkZGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9zOChfX3JldjApICsgX19ub3N3YXBfdm1vdmxfczgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWRkbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9zMzIoX19wMCkgKyB2bW92bF9zMzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YWRkbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfczMyKF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9zMzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWRkbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9zMTYoX19wMCkgKyB2bW92bF9zMTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWRkbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfczE2KF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9zMTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFkZHdfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF91OChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWRkd191OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF91OChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2YWRkd191MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfdTMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZhZGR3X3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX3UzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWRkd191MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfdTE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhZGR3X3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX3UxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhZGR3X3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfczgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWRkd19zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfczgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWRkd19zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfczMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmFkZHdfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX3MzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhZGR3X3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF9zMTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWRkd19zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfczE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0X2xhbmVfZjE2KF9fcDBfMjQyLCBfX3AxXzI0MikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczBfMjQyID0gX19wMF8yNDI7IFwKKyAgZmxvYXQxNl90IF9fcmV0XzI0MjsgXAorZmxvYXQxNng0X3QgX19yZWludF8yNDIgPSBfX3MwXzI0MjsgXAoraW50MTZfdCBfX3JlaW50MV8yNDIgPSB2Z2V0X2xhbmVfczE2KCooaW50MTZ4NF90ICopICZfX3JlaW50XzI0MiwgX19wMV8yNDIpOyBcCisgIF9fcmV0XzI0MiA9ICooZmxvYXQxNl90ICopICZfX3JlaW50MV8yNDI7IFwKKyAgX19yZXRfMjQyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX2YxNihfX3AwXzI0MywgX19wMV8yNDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MwXzI0MyA9IF9fcDBfMjQzOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV2MF8yNDM7ICBfX3JldjBfMjQzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yNDMsIF9fczBfMjQzLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2X3QgX19yZXRfMjQzOyBcCitmbG9hdDE2eDRfdCBfX3JlaW50XzI0MyA9IF9fcmV2MF8yNDM7IFwKK2ludDE2X3QgX19yZWludDFfMjQzID0gX19ub3N3YXBfdmdldF9sYW5lX3MxNigqKGludDE2eDRfdCAqKSAmX19yZWludF8yNDMsIF9fcDFfMjQzKTsgXAorICBfX3JldF8yNDMgPSAqKGZsb2F0MTZfdCAqKSAmX19yZWludDFfMjQzOyBcCisgIF9fcmV0XzI0MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV9mMTYoX19wMF8yNDQsIF9fcDFfMjQ0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMF8yNDQgPSBfX3AwXzI0NDsgXAorICBmbG9hdDE2X3QgX19yZXRfMjQ0OyBcCitmbG9hdDE2eDhfdCBfX3JlaW50XzI0NCA9IF9fczBfMjQ0OyBcCitpbnQxNl90IF9fcmVpbnQxXzI0NCA9IHZnZXRxX2xhbmVfczE2KCooaW50MTZ4OF90ICopICZfX3JlaW50XzI0NCwgX19wMV8yNDQpOyBcCisgIF9fcmV0XzI0NCA9ICooZmxvYXQxNl90ICopICZfX3JlaW50MV8yNDQ7IFwKKyAgX19yZXRfMjQ0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9mMTYoX19wMF8yNDUsIF9fcDFfMjQ1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMF8yNDUgPSBfX3AwXzI0NTsgXAorICBmbG9hdDE2eDhfdCBfX3JldjBfMjQ1OyAgX19yZXYwXzI0NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjQ1LCBfX3MwXzI0NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNl90IF9fcmV0XzI0NTsgXAorZmxvYXQxNng4X3QgX19yZWludF8yNDUgPSBfX3JldjBfMjQ1OyBcCitpbnQxNl90IF9fcmVpbnQxXzI0NSA9IF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KCooaW50MTZ4OF90ICopICZfX3JlaW50XzI0NSwgX19wMV8yNDUpOyBcCisgIF9fcmV0XzI0NSA9ICooZmxvYXQxNl90ICopICZfX3JlaW50MV8yNDU7IFwKKyAgX19yZXRfMjQ1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtbGFsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtdWxsX3U4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtbGFsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3U4KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdm1sYWxfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfdTgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bWxhbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bXVsbF91MzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm1sYWxfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MzIoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDY0eDJfdCBfX25vc3dhcF92bWxhbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF91MzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxhbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bXVsbF91MTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sYWxfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MTYoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92bWxhbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF91MTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtbGFsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm11bGxfczgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bWxhbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3M4KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92bWxhbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3M4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bWxhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtdWxsX3MzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtbGFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZtbGFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfczMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWxhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtdWxsX3MxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtbGFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZtbGFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfczE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3UzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF91MTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm1sYWxfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm11bGxfdTMyKF9fcDEsICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtbGFsX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MSwgKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZtbGFsX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3AxLCAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtbGFsX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtdWxsX3UxNihfX3AxLCAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxhbF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92bWxhbF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF91MTYoX19wMSwgKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtbGFsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm11bGxfczMyKF9fcDEsIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bWxhbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjEsIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm1sYWxfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19wMSwgKGludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sYWxfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bXVsbF9zMTYoX19wMSwgKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtbGFsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92bWxhbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3AxLCAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1sc2xfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm11bGxfdTgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1sc2xfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTgoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDhfdCBfX25vc3dhcF92bWxzbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF91OChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtbHNsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtdWxsX3UzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bWxzbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZtbHNsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtbHNsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtdWxsX3UxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxzbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3ZtbHNsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1sc2xfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bXVsbF9zOChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtbHNsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczgoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZtbHNsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfczgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtbHNsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm11bGxfczMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm1sc2xfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm1sc2xfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF9zMzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbHNsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm11bGxfczE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sc2xfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdm1sc2xfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF9zMTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3UxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bWxzbF9uX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bXVsbF91MzIoX19wMSwgKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm1sc2xfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MzIoX19yZXYxLCAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ2NHgyX3QgX19ub3N3YXBfdm1sc2xfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfdTMyKF9fcDEsICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sc2xfbl91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm11bGxfdTE2KF9fcDEsICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtbHNsX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MSwgKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3ZtbHNsX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3AxLCAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1sc2xfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bXVsbF9zMzIoX19wMSwgKGludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtbHNsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MSwgKGludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92bWxzbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3AxLCAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWxzbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtdWxsX3MxNihfX3AxLCAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sc2xfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYxLCAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZtbHNsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfczE2KF9fcDEsIChpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX2YxNihfX3AwXzI0NiwgX19wMV8yNDYsIF9fcDJfMjQ2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczBfMjQ2ID0gX19wMF8yNDY7IFwKKyAgZmxvYXQxNng0X3QgX19zMV8yNDYgPSBfX3AxXzI0NjsgXAorICBmbG9hdDE2eDRfdCBfX3JldF8yNDY7IFwKK2Zsb2F0MTZfdCBfX3JlaW50XzI0NiA9IF9fczBfMjQ2OyBcCitmbG9hdDE2eDRfdCBfX3JlaW50MV8yNDYgPSBfX3MxXzI0NjsgXAoraW50MTZ4NF90IF9fcmVpbnQyXzI0NiA9IHZzZXRfbGFuZV9zMTYoKihpbnQxNl90ICopICZfX3JlaW50XzI0NiwgKihpbnQxNng0X3QgKikgJl9fcmVpbnQxXzI0NiwgX19wMl8yNDYpOyBcCisgIF9fcmV0XzI0NiA9ICooZmxvYXQxNng0X3QgKikgJl9fcmVpbnQyXzI0NjsgXAorICBfX3JldF8yNDY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfZjE2KF9fcDBfMjQ3LCBfX3AxXzI0NywgX19wMl8yNDcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2X3QgX19zMF8yNDcgPSBfX3AwXzI0NzsgXAorICBmbG9hdDE2eDRfdCBfX3MxXzI0NyA9IF9fcDFfMjQ3OyBcCisgIGZsb2F0MTZ4NF90IF9fcmV2MV8yNDc7ICBfX3JldjFfMjQ3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yNDcsIF9fczFfMjQ3LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDRfdCBfX3JldF8yNDc7IFwKK2Zsb2F0MTZfdCBfX3JlaW50XzI0NyA9IF9fczBfMjQ3OyBcCitmbG9hdDE2eDRfdCBfX3JlaW50MV8yNDcgPSBfX3JldjFfMjQ3OyBcCitpbnQxNng0X3QgX19yZWludDJfMjQ3ID0gX19ub3N3YXBfdnNldF9sYW5lX3MxNigqKGludDE2X3QgKikgJl9fcmVpbnRfMjQ3LCAqKGludDE2eDRfdCAqKSAmX19yZWludDFfMjQ3LCBfX3AyXzI0Nyk7IFwKKyAgX19yZXRfMjQ3ID0gKihmbG9hdDE2eDRfdCAqKSAmX19yZWludDJfMjQ3OyBcCisgIF9fcmV0XzI0NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI0NywgX19yZXRfMjQ3LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yNDc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfZjE2KF9fcDBfMjQ4LCBfX3AxXzI0OCwgX19wMl8yNDgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2X3QgX19zMF8yNDggPSBfX3AwXzI0ODsgXAorICBmbG9hdDE2eDhfdCBfX3MxXzI0OCA9IF9fcDFfMjQ4OyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0XzI0ODsgXAorZmxvYXQxNl90IF9fcmVpbnRfMjQ4ID0gX19zMF8yNDg7IFwKK2Zsb2F0MTZ4OF90IF9fcmVpbnQxXzI0OCA9IF9fczFfMjQ4OyBcCitpbnQxNng4X3QgX19yZWludDJfMjQ4ID0gdnNldHFfbGFuZV9zMTYoKihpbnQxNl90ICopICZfX3JlaW50XzI0OCwgKihpbnQxNng4X3QgKikgJl9fcmVpbnQxXzI0OCwgX19wMl8yNDgpOyBcCisgIF9fcmV0XzI0OCA9ICooZmxvYXQxNng4X3QgKikgJl9fcmVpbnQyXzI0ODsgXAorICBfX3JldF8yNDg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX2YxNihfX3AwXzI0OSwgX19wMV8yNDksIF9fcDJfMjQ5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczBfMjQ5ID0gX19wMF8yNDk7IFwKKyAgZmxvYXQxNng4X3QgX19zMV8yNDkgPSBfX3AxXzI0OTsgXAorICBmbG9hdDE2eDhfdCBfX3JldjFfMjQ5OyAgX19yZXYxXzI0OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjQ5LCBfX3MxXzI0OSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng4X3QgX19yZXRfMjQ5OyBcCitmbG9hdDE2X3QgX19yZWludF8yNDkgPSBfX3MwXzI0OTsgXAorZmxvYXQxNng4X3QgX19yZWludDFfMjQ5ID0gX19yZXYxXzI0OTsgXAoraW50MTZ4OF90IF9fcmVpbnQyXzI0OSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczE2KCooaW50MTZfdCAqKSAmX19yZWludF8yNDksICooaW50MTZ4OF90ICopICZfX3JlaW50MV8yNDksIF9fcDJfMjQ5KTsgXAorICBfX3JldF8yNDkgPSAqKGZsb2F0MTZ4OF90ICopICZfX3JlaW50Ml8yNDk7IFwKKyAgX19yZXRfMjQ5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjQ5LCBfX3JldF8yNDksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzI0OTsgXAorfSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX1FSRE1YKSAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFyZG1sYWhzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gdnFhZGRzX3MzMihfX3AwLCB2cXJkbXVsaHNfczMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cXJkbWxhaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZHNfczMyKF9fcDAsIF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFyZG1sYWhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFhZGRoX3MxNihfX3AwLCB2cXJkbXVsaGhfczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cXJkbWxhaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZGhfczE2KF9fcDAsIF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFoc19sYW5lX3MzMihfX3AwXzI1MCwgX19wMV8yNTAsIF9fcDJfMjUwLCBfX3AzXzI1MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8yNTAgPSBfX3AwXzI1MDsgXAorICBpbnQzMl90IF9fczFfMjUwID0gX19wMV8yNTA7IFwKKyAgaW50MzJ4Ml90IF9fczJfMjUwID0gX19wMl8yNTA7IFwKKyAgaW50MzJfdCBfX3JldF8yNTA7IFwKKyAgX19yZXRfMjUwID0gdnFhZGRzX3MzMihfX3MwXzI1MCwgdnFyZG11bGhzX3MzMihfX3MxXzI1MCwgdmdldF9sYW5lX3MzMihfX3MyXzI1MCwgX19wM18yNTApKSk7IFwKKyAgX19yZXRfMjUwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhzX2xhbmVfczMyKF9fcDBfMjUxLCBfX3AxXzI1MSwgX19wMl8yNTEsIF9fcDNfMjUxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzI1MSA9IF9fcDBfMjUxOyBcCisgIGludDMyX3QgX19zMV8yNTEgPSBfX3AxXzI1MTsgXAorICBpbnQzMngyX3QgX19zMl8yNTEgPSBfX3AyXzI1MTsgXAorICBpbnQzMngyX3QgX19yZXYyXzI1MTsgIF9fcmV2Ml8yNTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI1MSwgX19zMl8yNTEsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXRfMjUxOyBcCisgIF9fcmV0XzI1MSA9IF9fbm9zd2FwX3ZxYWRkc19zMzIoX19zMF8yNTEsIF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19zMV8yNTEsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYyXzI1MSwgX19wM18yNTEpKSk7IFwKKyAgX19yZXRfMjUxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaGhfbGFuZV9zMTYoX19wMF8yNTIsIF9fcDFfMjUyLCBfX3AyXzI1MiwgX19wM18yNTIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMjUyID0gX19wMF8yNTI7IFwKKyAgaW50MTZfdCBfX3MxXzI1MiA9IF9fcDFfMjUyOyBcCisgIGludDE2eDRfdCBfX3MyXzI1MiA9IF9fcDJfMjUyOyBcCisgIGludDE2X3QgX19yZXRfMjUyOyBcCisgIF9fcmV0XzI1MiA9IHZxYWRkaF9zMTYoX19zMF8yNTIsIHZxcmRtdWxoaF9zMTYoX19zMV8yNTIsIHZnZXRfbGFuZV9zMTYoX19zMl8yNTIsIF9fcDNfMjUyKSkpOyBcCisgIF9fcmV0XzI1MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbGFoaF9sYW5lX3MxNihfX3AwXzI1MywgX19wMV8yNTMsIF9fcDJfMjUzLCBfX3AzXzI1MykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8yNTMgPSBfX3AwXzI1MzsgXAorICBpbnQxNl90IF9fczFfMjUzID0gX19wMV8yNTM7IFwKKyAgaW50MTZ4NF90IF9fczJfMjUzID0gX19wMl8yNTM7IFwKKyAgaW50MTZ4NF90IF9fcmV2Ml8yNTM7ICBfX3JldjJfMjUzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNTMsIF9fczJfMjUzLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNl90IF9fcmV0XzI1MzsgXAorICBfX3JldF8yNTMgPSBfX25vc3dhcF92cWFkZGhfczE2KF9fczBfMjUzLCBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fczFfMjUzLCBfX25vc3dhcF92Z2V0X2xhbmVfczE2KF9fcmV2Ml8yNTMsIF9fcDNfMjUzKSkpOyBcCisgIF9fcmV0XzI1MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sYWhzX2xhbmVxX3MzMihfX3AwXzI1NCwgX19wMV8yNTQsIF9fcDJfMjU0LCBfX3AzXzI1NCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8yNTQgPSBfX3AwXzI1NDsgXAorICBpbnQzMl90IF9fczFfMjU0ID0gX19wMV8yNTQ7IFwKKyAgaW50MzJ4NF90IF9fczJfMjU0ID0gX19wMl8yNTQ7IFwKKyAgaW50MzJfdCBfX3JldF8yNTQ7IFwKKyAgX19yZXRfMjU0ID0gdnFhZGRzX3MzMihfX3MwXzI1NCwgdnFyZG11bGhzX3MzMihfX3MxXzI1NCwgdmdldHFfbGFuZV9zMzIoX19zMl8yNTQsIF9fcDNfMjU0KSkpOyBcCisgIF9fcmV0XzI1NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbGFoc19sYW5lcV9zMzIoX19wMF8yNTUsIF9fcDFfMjU1LCBfX3AyXzI1NSwgX19wM18yNTUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMjU1ID0gX19wMF8yNTU7IFwKKyAgaW50MzJfdCBfX3MxXzI1NSA9IF9fcDFfMjU1OyBcCisgIGludDMyeDRfdCBfX3MyXzI1NSA9IF9fcDJfMjU1OyBcCisgIGludDMyeDRfdCBfX3JldjJfMjU1OyAgX19yZXYyXzI1NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjU1LCBfX3MyXzI1NSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldF8yNTU7IFwKKyAgX19yZXRfMjU1ID0gX19ub3N3YXBfdnFhZGRzX3MzMihfX3MwXzI1NSwgX19ub3N3YXBfdnFyZG11bGhzX3MzMihfX3MxXzI1NSwgX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19yZXYyXzI1NSwgX19wM18yNTUpKSk7IFwKKyAgX19yZXRfMjU1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaGhfbGFuZXFfczE2KF9fcDBfMjU2LCBfX3AxXzI1NiwgX19wMl8yNTYsIF9fcDNfMjU2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzI1NiA9IF9fcDBfMjU2OyBcCisgIGludDE2X3QgX19zMV8yNTYgPSBfX3AxXzI1NjsgXAorICBpbnQxNng4X3QgX19zMl8yNTYgPSBfX3AyXzI1NjsgXAorICBpbnQxNl90IF9fcmV0XzI1NjsgXAorICBfX3JldF8yNTYgPSB2cWFkZGhfczE2KF9fczBfMjU2LCB2cXJkbXVsaGhfczE2KF9fczFfMjU2LCB2Z2V0cV9sYW5lX3MxNihfX3MyXzI1NiwgX19wM18yNTYpKSk7IFwKKyAgX19yZXRfMjU2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhoX2xhbmVxX3MxNihfX3AwXzI1NywgX19wMV8yNTcsIF9fcDJfMjU3LCBfX3AzXzI1NykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8yNTcgPSBfX3AwXzI1NzsgXAorICBpbnQxNl90IF9fczFfMjU3ID0gX19wMV8yNTc7IFwKKyAgaW50MTZ4OF90IF9fczJfMjU3ID0gX19wMl8yNTc7IFwKKyAgaW50MTZ4OF90IF9fcmV2Ml8yNTc7ICBfX3JldjJfMjU3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNTcsIF9fczJfMjU3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNl90IF9fcmV0XzI1NzsgXAorICBfX3JldF8yNTcgPSBfX25vc3dhcF92cWFkZGhfczE2KF9fczBfMjU3LCBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fczFfMjU3LCBfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3JldjJfMjU3LCBfX3AzXzI1NykpKTsgXAorICBfX3JldF8yNTc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFyZG1sc2hzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gdnFzdWJzX3MzMihfX3AwLCB2cXJkbXVsaHNfczMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cXJkbWxzaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1YnNfczMyKF9fcDAsIF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFyZG1sc2hoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFzdWJoX3MxNihfX3AwLCB2cXJkbXVsaGhfczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cXJkbWxzaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1YmhfczE2KF9fcDAsIF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNoc19sYW5lX3MzMihfX3AwXzI1OCwgX19wMV8yNTgsIF9fcDJfMjU4LCBfX3AzXzI1OCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8yNTggPSBfX3AwXzI1ODsgXAorICBpbnQzMl90IF9fczFfMjU4ID0gX19wMV8yNTg7IFwKKyAgaW50MzJ4Ml90IF9fczJfMjU4ID0gX19wMl8yNTg7IFwKKyAgaW50MzJfdCBfX3JldF8yNTg7IFwKKyAgX19yZXRfMjU4ID0gdnFzdWJzX3MzMihfX3MwXzI1OCwgdnFyZG11bGhzX3MzMihfX3MxXzI1OCwgdmdldF9sYW5lX3MzMihfX3MyXzI1OCwgX19wM18yNTgpKSk7IFwKKyAgX19yZXRfMjU4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hzX2xhbmVfczMyKF9fcDBfMjU5LCBfX3AxXzI1OSwgX19wMl8yNTksIF9fcDNfMjU5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzI1OSA9IF9fcDBfMjU5OyBcCisgIGludDMyX3QgX19zMV8yNTkgPSBfX3AxXzI1OTsgXAorICBpbnQzMngyX3QgX19zMl8yNTkgPSBfX3AyXzI1OTsgXAorICBpbnQzMngyX3QgX19yZXYyXzI1OTsgIF9fcmV2Ml8yNTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI1OSwgX19zMl8yNTksIDEsIDApOyBcCisgIGludDMyX3QgX19yZXRfMjU5OyBcCisgIF9fcmV0XzI1OSA9IF9fbm9zd2FwX3Zxc3Vic19zMzIoX19zMF8yNTksIF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19zMV8yNTksIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYyXzI1OSwgX19wM18yNTkpKSk7IFwKKyAgX19yZXRfMjU5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxzaGhfbGFuZV9zMTYoX19wMF8yNjAsIF9fcDFfMjYwLCBfX3AyXzI2MCwgX19wM18yNjApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMjYwID0gX19wMF8yNjA7IFwKKyAgaW50MTZfdCBfX3MxXzI2MCA9IF9fcDFfMjYwOyBcCisgIGludDE2eDRfdCBfX3MyXzI2MCA9IF9fcDJfMjYwOyBcCisgIGludDE2X3QgX19yZXRfMjYwOyBcCisgIF9fcmV0XzI2MCA9IHZxc3ViaF9zMTYoX19zMF8yNjAsIHZxcmRtdWxoaF9zMTYoX19zMV8yNjAsIHZnZXRfbGFuZV9zMTYoX19zMl8yNjAsIF9fcDNfMjYwKSkpOyBcCisgIF9fcmV0XzI2MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNoaF9sYW5lX3MxNihfX3AwXzI2MSwgX19wMV8yNjEsIF9fcDJfMjYxLCBfX3AzXzI2MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8yNjEgPSBfX3AwXzI2MTsgXAorICBpbnQxNl90IF9fczFfMjYxID0gX19wMV8yNjE7IFwKKyAgaW50MTZ4NF90IF9fczJfMjYxID0gX19wMl8yNjE7IFwKKyAgaW50MTZ4NF90IF9fcmV2Ml8yNjE7ICBfX3JldjJfMjYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNjEsIF9fczJfMjYxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNl90IF9fcmV0XzI2MTsgXAorICBfX3JldF8yNjEgPSBfX25vc3dhcF92cXN1YmhfczE2KF9fczBfMjYxLCBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fczFfMjYxLCBfX25vc3dhcF92Z2V0X2xhbmVfczE2KF9fcmV2Ml8yNjEsIF9fcDNfMjYxKSkpOyBcCisgIF9fcmV0XzI2MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sc2hzX2xhbmVxX3MzMihfX3AwXzI2MiwgX19wMV8yNjIsIF9fcDJfMjYyLCBfX3AzXzI2MikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8yNjIgPSBfX3AwXzI2MjsgXAorICBpbnQzMl90IF9fczFfMjYyID0gX19wMV8yNjI7IFwKKyAgaW50MzJ4NF90IF9fczJfMjYyID0gX19wMl8yNjI7IFwKKyAgaW50MzJfdCBfX3JldF8yNjI7IFwKKyAgX19yZXRfMjYyID0gdnFzdWJzX3MzMihfX3MwXzI2MiwgdnFyZG11bGhzX3MzMihfX3MxXzI2MiwgdmdldHFfbGFuZV9zMzIoX19zMl8yNjIsIF9fcDNfMjYyKSkpOyBcCisgIF9fcmV0XzI2MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNoc19sYW5lcV9zMzIoX19wMF8yNjMsIF9fcDFfMjYzLCBfX3AyXzI2MywgX19wM18yNjMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMjYzID0gX19wMF8yNjM7IFwKKyAgaW50MzJfdCBfX3MxXzI2MyA9IF9fcDFfMjYzOyBcCisgIGludDMyeDRfdCBfX3MyXzI2MyA9IF9fcDJfMjYzOyBcCisgIGludDMyeDRfdCBfX3JldjJfMjYzOyAgX19yZXYyXzI2MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjYzLCBfX3MyXzI2MywgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldF8yNjM7IFwKKyAgX19yZXRfMjYzID0gX19ub3N3YXBfdnFzdWJzX3MzMihfX3MwXzI2MywgX19ub3N3YXBfdnFyZG11bGhzX3MzMihfX3MxXzI2MywgX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19yZXYyXzI2MywgX19wM18yNjMpKSk7IFwKKyAgX19yZXRfMjYzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxzaGhfbGFuZXFfczE2KF9fcDBfMjY0LCBfX3AxXzI2NCwgX19wMl8yNjQsIF9fcDNfMjY0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzI2NCA9IF9fcDBfMjY0OyBcCisgIGludDE2X3QgX19zMV8yNjQgPSBfX3AxXzI2NDsgXAorICBpbnQxNng4X3QgX19zMl8yNjQgPSBfX3AyXzI2NDsgXAorICBpbnQxNl90IF9fcmV0XzI2NDsgXAorICBfX3JldF8yNjQgPSB2cXN1YmhfczE2KF9fczBfMjY0LCB2cXJkbXVsaGhfczE2KF9fczFfMjY0LCB2Z2V0cV9sYW5lX3MxNihfX3MyXzI2NCwgX19wM18yNjQpKSk7IFwKKyAgX19yZXRfMjY0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hoX2xhbmVxX3MxNihfX3AwXzI2NSwgX19wMV8yNjUsIF9fcDJfMjY1LCBfX3AzXzI2NSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8yNjUgPSBfX3AwXzI2NTsgXAorICBpbnQxNl90IF9fczFfMjY1ID0gX19wMV8yNjU7IFwKKyAgaW50MTZ4OF90IF9fczJfMjY1ID0gX19wMl8yNjU7IFwKKyAgaW50MTZ4OF90IF9fcmV2Ml8yNjU7ICBfX3JldjJfMjY1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNjUsIF9fczJfMjY1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNl90IF9fcmV0XzI2NTsgXAorICBfX3JldF8yNjUgPSBfX25vc3dhcF92cXN1YmhfczE2KF9fczBfMjY1LCBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fczFfMjY1LCBfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3JldjJfMjY1LCBfX3AzXzI2NSkpKTsgXAorICBfX3JldF8yNjU7IFwKK30pCisjZW5kaWYKKworI2VuZGlmCisjaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhYmRsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJkbF91OCh2Z2V0X2hpZ2hfdTgoX19wMCksIHZnZXRfaGlnaF91OChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmFiZGxfaGlnaF91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmRsX3U4KF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZhYmRsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiZGxfdTMyKHZnZXRfaGlnaF91MzIoX19wMCksIHZnZXRfaGlnaF91MzIoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZhYmRsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiZGxfdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFiZGxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJkbF91MTYodmdldF9oaWdoX3UxNihfX3AwKSwgdmdldF9oaWdoX3UxNihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFiZGxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJkbF91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhYmRsX2hpZ2hfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJkbF9zOCh2Z2V0X2hpZ2hfczgoX19wMCksIHZnZXRfaGlnaF9zOChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWJkbF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmRsX3M4KF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFiZGxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJkbF9zMzIodmdldF9oaWdoX3MzMihfX3AwKSwgdmdldF9oaWdoX3MzMihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YWJkbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJkbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhYmRsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiZGxfczE2KHZnZXRfaGlnaF9zMTYoX19wMCksIHZnZXRfaGlnaF9zMTYoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFiZGxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiZGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFkZGxfaGlnaF91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfdTgoX19wMCkgKyB2bW92bF9oaWdoX3U4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhZGRsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZhZGRsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF91MzIoX19wMCkgKyB2bW92bF9oaWdoX3UzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YWRkbF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTMyKF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9oaWdoX3UzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWRkbF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfdTE2KF9fcDApICsgdm1vdmxfaGlnaF91MTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFkZGxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3UxNihfX3JldjApICsgX19ub3N3YXBfdm1vdmxfaGlnaF91MTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWRkbF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF9zOChfX3AwKSArIHZtb3ZsX2hpZ2hfczgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWRkbF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczgoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWRkbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfczMyKF9fcDApICsgdm1vdmxfaGlnaF9zMzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YWRkbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3MzMihfX3JldjApICsgX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWRkbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfczE2KF9fcDApICsgdm1vdmxfaGlnaF9zMTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWRkbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3MxNihfX3JldjApICsgX19ub3N3YXBfdm1vdmxfaGlnaF9zMTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFkZHdfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF9oaWdoX3U4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhZGR3X2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZhZGR3X2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX2hpZ2hfdTMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZhZGR3X2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfaGlnaF91MzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFkZHdfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfaGlnaF91MTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFkZHdfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF9oaWdoX3UxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhZGR3X2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfaGlnaF9zOChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhZGR3X2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfaGlnaF9zOChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZhZGR3X2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX2hpZ2hfczMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmFkZHdfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWRkd19oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF9oaWdoX3MxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhZGR3X2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZV9wNjQoX19wMF8yNjYsIF9fcDFfMjY2LCBfX3AyXzI2NiwgX19wM18yNjYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczBfMjY2ID0gX19wMF8yNjY7IFwKKyAgcG9seTY0eDFfdCBfX3MyXzI2NiA9IF9fcDJfMjY2OyBcCisgIHBvbHk2NHgyX3QgX19yZXRfMjY2OyBcCisgIF9fcmV0XzI2NiA9IHZzZXRxX2xhbmVfcDY0KHZnZXRfbGFuZV9wNjQoX19zMl8yNjYsIF9fcDNfMjY2KSwgX19zMF8yNjYsIF9fcDFfMjY2KTsgXAorICBfX3JldF8yNjY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZV9wNjQoX19wMF8yNjcsIF9fcDFfMjY3LCBfX3AyXzI2NywgX19wM18yNjcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczBfMjY3ID0gX19wMF8yNjc7IFwKKyAgcG9seTY0eDFfdCBfX3MyXzI2NyA9IF9fcDJfMjY3OyBcCisgIHBvbHk2NHgyX3QgX19yZXYwXzI2NzsgIF9fcmV2MF8yNjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI2NywgX19zMF8yNjcsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXRfMjY3OyBcCisgIF9fcmV0XzI2NyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfcDY0KF9fbm9zd2FwX3ZnZXRfbGFuZV9wNjQoX19zMl8yNjcsIF9fcDNfMjY3KSwgX19yZXYwXzI2NywgX19wMV8yNjcpOyBcCisgIF9fcmV0XzI2NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI2NywgX19yZXRfMjY3LCAxLCAwKTsgXAorICBfX3JldF8yNjc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lX2Y2NChfX3AwXzI2OCwgX19wMV8yNjgsIF9fcDJfMjY4LCBfX3AzXzI2OCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczBfMjY4ID0gX19wMF8yNjg7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMl8yNjggPSBfX3AyXzI2ODsgXAorICBmbG9hdDY0eDJfdCBfX3JldF8yNjg7IFwKKyAgX19yZXRfMjY4ID0gdnNldHFfbGFuZV9mNjQodmdldF9sYW5lX2Y2NChfX3MyXzI2OCwgX19wM18yNjgpLCBfX3MwXzI2OCwgX19wMV8yNjgpOyBcCisgIF9fcmV0XzI2ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lX2Y2NChfX3AwXzI2OSwgX19wMV8yNjksIF9fcDJfMjY5LCBfX3AzXzI2OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczBfMjY5ID0gX19wMF8yNjk7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMl8yNjkgPSBfX3AyXzI2OTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjBfMjY5OyAgX19yZXYwXzI2OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjY5LCBfX3MwXzI2OSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXRfMjY5OyBcCisgIF9fcmV0XzI2OSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfZjY0KF9fbm9zd2FwX3ZnZXRfbGFuZV9mNjQoX19zMl8yNjksIF9fcDNfMjY5KSwgX19yZXYwXzI2OSwgX19wMV8yNjkpOyBcCisgIF9fcmV0XzI2OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI2OSwgX19yZXRfMjY5LCAxLCAwKTsgXAorICBfX3JldF8yNjk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVfcDY0KF9fcDBfMjcwLCBfX3AxXzI3MCwgX19wMl8yNzAsIF9fcDNfMjcwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwXzI3MCA9IF9fcDBfMjcwOyBcCisgIHBvbHk2NHgxX3QgX19zMl8yNzAgPSBfX3AyXzI3MDsgXAorICBwb2x5NjR4MV90IF9fcmV0XzI3MDsgXAorICBfX3JldF8yNzAgPSB2c2V0X2xhbmVfcDY0KHZnZXRfbGFuZV9wNjQoX19zMl8yNzAsIF9fcDNfMjcwKSwgX19zMF8yNzAsIF9fcDFfMjcwKTsgXAorICBfX3JldF8yNzA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lX3A2NChfX3AwXzI3MSwgX19wMV8yNzEsIF9fcDJfMjcxLCBfX3AzXzI3MSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMF8yNzEgPSBfX3AwXzI3MTsgXAorICBwb2x5NjR4MV90IF9fczJfMjcxID0gX19wMl8yNzE7IFwKKyAgcG9seTY0eDFfdCBfX3JldF8yNzE7IFwKKyAgX19yZXRfMjcxID0gX19ub3N3YXBfdnNldF9sYW5lX3A2NChfX25vc3dhcF92Z2V0X2xhbmVfcDY0KF9fczJfMjcxLCBfX3AzXzI3MSksIF9fczBfMjcxLCBfX3AxXzI3MSk7IFwKKyAgX19yZXRfMjcxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX2Y2NChfX3AwXzI3MiwgX19wMV8yNzIsIF9fcDJfMjcyLCBfX3AzXzI3MikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfMjcyID0gX19wMF8yNzI7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMl8yNzIgPSBfX3AyXzI3MjsgXAorICBmbG9hdDY0eDFfdCBfX3JldF8yNzI7IFwKKyAgX19yZXRfMjcyID0gdnNldF9sYW5lX2Y2NCh2Z2V0X2xhbmVfZjY0KF9fczJfMjcyLCBfX3AzXzI3MiksIF9fczBfMjcyLCBfX3AxXzI3Mik7IFwKKyAgX19yZXRfMjcyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9mNjQoX19wMF8yNzMsIF9fcDFfMjczLCBfX3AyXzI3MywgX19wM18yNzMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzI3MyA9IF9fcDBfMjczOyBcCisgIGZsb2F0NjR4MV90IF9fczJfMjczID0gX19wMl8yNzM7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfMjczOyBcCisgIF9fcmV0XzI3MyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9mNjQoX19ub3N3YXBfdmdldF9sYW5lX2Y2NChfX3MyXzI3MywgX19wM18yNzMpLCBfX3MwXzI3MywgX19wMV8yNzMpOyBcCisgIF9fcmV0XzI3MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3A2NChfX3AwXzI3NCwgX19wMV8yNzQsIF9fcDJfMjc0LCBfX3AzXzI3NCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMF8yNzQgPSBfX3AwXzI3NDsgXAorICBwb2x5NjR4Ml90IF9fczJfMjc0ID0gX19wMl8yNzQ7IFwKKyAgcG9seTY0eDJfdCBfX3JldF8yNzQ7IFwKKyAgX19yZXRfMjc0ID0gdnNldHFfbGFuZV9wNjQodmdldHFfbGFuZV9wNjQoX19zMl8yNzQsIF9fcDNfMjc0KSwgX19zMF8yNzQsIF9fcDFfMjc0KTsgXAorICBfX3JldF8yNzQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZXFfcDY0KF9fcDBfMjc1LCBfX3AxXzI3NSwgX19wMl8yNzUsIF9fcDNfMjc1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwXzI3NSA9IF9fcDBfMjc1OyBcCisgIHBvbHk2NHgyX3QgX19zMl8yNzUgPSBfX3AyXzI3NTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MF8yNzU7ICBfX3JldjBfMjc1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yNzUsIF9fczBfMjc1LCAxLCAwKTsgXAorICBwb2x5NjR4Ml90IF9fcmV2Ml8yNzU7ICBfX3JldjJfMjc1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNzUsIF9fczJfMjc1LCAxLCAwKTsgXAorICBwb2x5NjR4Ml90IF9fcmV0XzI3NTsgXAorICBfX3JldF8yNzUgPSBfX25vc3dhcF92c2V0cV9sYW5lX3A2NChfX25vc3dhcF92Z2V0cV9sYW5lX3A2NChfX3JldjJfMjc1LCBfX3AzXzI3NSksIF9fcmV2MF8yNzUsIF9fcDFfMjc1KTsgXAorICBfX3JldF8yNzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yNzUsIF9fcmV0XzI3NSwgMSwgMCk7IFwKKyAgX19yZXRfMjc1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfZjY0KF9fcDBfMjc2LCBfX3AxXzI3NiwgX19wMl8yNzYsIF9fcDNfMjc2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMF8yNzYgPSBfX3AwXzI3NjsgXAorICBmbG9hdDY0eDJfdCBfX3MyXzI3NiA9IF9fcDJfMjc2OyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0XzI3NjsgXAorICBfX3JldF8yNzYgPSB2c2V0cV9sYW5lX2Y2NCh2Z2V0cV9sYW5lX2Y2NChfX3MyXzI3NiwgX19wM18yNzYpLCBfX3MwXzI3NiwgX19wMV8yNzYpOyBcCisgIF9fcmV0XzI3NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9mNjQoX19wMF8yNzcsIF9fcDFfMjc3LCBfX3AyXzI3NywgX19wM18yNzcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwXzI3NyA9IF9fcDBfMjc3OyBcCisgIGZsb2F0NjR4Ml90IF9fczJfMjc3ID0gX19wMl8yNzc7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwXzI3NzsgIF9fcmV2MF8yNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI3NywgX19zMF8yNzcsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2Ml8yNzc7ICBfX3JldjJfMjc3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNzcsIF9fczJfMjc3LCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldF8yNzc7IFwKKyAgX19yZXRfMjc3ID0gX19ub3N3YXBfdnNldHFfbGFuZV9mNjQoX19ub3N3YXBfdmdldHFfbGFuZV9mNjQoX19yZXYyXzI3NywgX19wM18yNzcpLCBfX3JldjBfMjc3LCBfX3AxXzI3Nyk7IFwKKyAgX19yZXRfMjc3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjc3LCBfX3JldF8yNzcsIDEsIDApOyBcCisgIF9fcmV0XzI3NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfcDY0KF9fcDBfMjc4LCBfX3AxXzI3OCwgX19wMl8yNzgsIF9fcDNfMjc4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwXzI3OCA9IF9fcDBfMjc4OyBcCisgIHBvbHk2NHgyX3QgX19zMl8yNzggPSBfX3AyXzI3ODsgXAorICBwb2x5NjR4MV90IF9fcmV0XzI3ODsgXAorICBfX3JldF8yNzggPSB2c2V0X2xhbmVfcDY0KHZnZXRxX2xhbmVfcDY0KF9fczJfMjc4LCBfX3AzXzI3OCksIF9fczBfMjc4LCBfX3AxXzI3OCk7IFwKKyAgX19yZXRfMjc4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfcDY0KF9fcDBfMjc5LCBfX3AxXzI3OSwgX19wMl8yNzksIF9fcDNfMjc5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwXzI3OSA9IF9fcDBfMjc5OyBcCisgIHBvbHk2NHgyX3QgX19zMl8yNzkgPSBfX3AyXzI3OTsgXAorICBwb2x5NjR4Ml90IF9fcmV2Ml8yNzk7ICBfX3JldjJfMjc5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNzksIF9fczJfMjc5LCAxLCAwKTsgXAorICBwb2x5NjR4MV90IF9fcmV0XzI3OTsgXAorICBfX3JldF8yNzkgPSBfX25vc3dhcF92c2V0X2xhbmVfcDY0KF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDY0KF9fcmV2Ml8yNzksIF9fcDNfMjc5KSwgX19zMF8yNzksIF9fcDFfMjc5KTsgXAorICBfX3JldF8yNzk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX2Y2NChfX3AwXzI4MCwgX19wMV8yODAsIF9fcDJfMjgwLCBfX3AzXzI4MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfMjgwID0gX19wMF8yODA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMl8yODAgPSBfX3AyXzI4MDsgXAorICBmbG9hdDY0eDFfdCBfX3JldF8yODA7IFwKKyAgX19yZXRfMjgwID0gdnNldF9sYW5lX2Y2NCh2Z2V0cV9sYW5lX2Y2NChfX3MyXzI4MCwgX19wM18yODApLCBfX3MwXzI4MCwgX19wMV8yODApOyBcCisgIF9fcmV0XzI4MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVxX2Y2NChfX3AwXzI4MSwgX19wMV8yODEsIF9fcDJfMjgxLCBfX3AzXzI4MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfMjgxID0gX19wMF8yODE7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMl8yODEgPSBfX3AyXzI4MTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjJfMjgxOyAgX19yZXYyXzI4MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjgxLCBfX3MyXzI4MSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfMjgxOyBcCisgIF9fcmV0XzI4MSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9mNjQoX19ub3N3YXBfdmdldHFfbGFuZV9mNjQoX19yZXYyXzI4MSwgX19wM18yODEpLCBfX3MwXzI4MSwgX19wMV8yODEpOyBcCisgIF9fcmV0XzI4MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bWxhbF9oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxhbF91OChfX3AwLCB2Z2V0X2hpZ2hfdTgoX19wMSksIHZnZXRfaGlnaF91OChfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1sYWxfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfdTgoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bWxhbF9oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sYWxfdTMyKF9fcDAsIHZnZXRfaGlnaF91MzIoX19wMSksIHZnZXRfaGlnaF91MzIoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtbGFsX2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxhbF91MzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtbGFsX2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxhbF91MTYoX19wMCwgdmdldF9oaWdoX3UxNihfX3AxKSwgdmdldF9oaWdoX3UxNihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sYWxfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bWxhbF9oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtbGFsX3M4KF9fcDAsIHZnZXRfaGlnaF9zOChfX3AxKSwgdmdldF9oaWdoX3M4KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtbGFsX2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfczgoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtbGFsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtbGFsX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCB2Z2V0X2hpZ2hfczMyKF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtbGFsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWxhbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxhbF9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgdmdldF9oaWdoX3MxNihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxhbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxhbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtbGFsX2hpZ2hfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxhbF9uX3UzMihfX3AwLCB2Z2V0X2hpZ2hfdTMyKF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bWxhbF9oaWdoX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfbl91MzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxhbF9oaWdoX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sYWxfbl91MTYoX19wMCwgdmdldF9oaWdoX3UxNihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sYWxfaGlnaF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX25fdTE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bWxhbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxhbF9uX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtbGFsX2hpZ2hfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxhbF9uX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sYWxfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sYWxfbl9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxhbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfbl9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bWxzbF9oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxzbF91OChfX3AwLCB2Z2V0X2hpZ2hfdTgoX19wMSksIHZnZXRfaGlnaF91OChfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1sc2xfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfdTgoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bWxzbF9oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sc2xfdTMyKF9fcDAsIHZnZXRfaGlnaF91MzIoX19wMSksIHZnZXRfaGlnaF91MzIoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtbHNsX2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxzbF91MzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtbHNsX2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxzbF91MTYoX19wMCwgdmdldF9oaWdoX3UxNihfX3AxKSwgdmdldF9oaWdoX3UxNihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sc2xfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bWxzbF9oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtbHNsX3M4KF9fcDAsIHZnZXRfaGlnaF9zOChfX3AxKSwgdmdldF9oaWdoX3M4KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtbHNsX2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfczgoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtbHNsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtbHNsX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCB2Z2V0X2hpZ2hfczMyKF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtbHNsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWxzbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxzbF9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgdmdldF9oaWdoX3MxNihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxzbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxzbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtbHNsX2hpZ2hfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxzbF9uX3UzMihfX3AwLCB2Z2V0X2hpZ2hfdTMyKF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bWxzbF9oaWdoX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfbl91MzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxzbF9oaWdoX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sc2xfbl91MTYoX19wMCwgdmdldF9oaWdoX3UxNihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sc2xfaGlnaF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX25fdTE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bWxzbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxzbF9uX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtbHNsX2hpZ2hfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxzbF9uX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sc2xfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sc2xfbl9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxzbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfbl9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhfbGFuZV9mNjQoX19wMF8yODIsIF9fcDFfMjgyLCBfX3AyXzI4MikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfMjgyID0gX19wMF8yODI7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMV8yODIgPSBfX3AxXzI4MjsgXAorICBmbG9hdDY0eDFfdCBfX3JldF8yODI7IFwKKyAgZmxvYXQ2NF90IF9feF8yODIgPSB2Z2V0X2xhbmVfZjY0KF9fczBfMjgyLCAwKTsgXAorICBmbG9hdDY0X3QgX195XzI4MiA9IHZnZXRfbGFuZV9mNjQoX19zMV8yODIsIF9fcDJfMjgyKTsgXAorICBmbG9hdDY0X3QgX196XzI4MiA9IHZtdWx4ZF9mNjQoX194XzI4MiwgX195XzI4Mik7IFwKKyAgX19yZXRfMjgyID0gdnNldF9sYW5lX2Y2NChfX3pfMjgyLCBfX3MwXzI4MiwgX19wMl8yODIpOyBcCisgIF9fcmV0XzI4MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4X2xhbmVfZjY0KF9fcDBfMjgzLCBfX3AxXzI4MywgX19wMl8yODMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzI4MyA9IF9fcDBfMjgzOyBcCisgIGZsb2F0NjR4MV90IF9fczFfMjgzID0gX19wMV8yODM7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfMjgzOyBcCisgIGZsb2F0NjRfdCBfX3hfMjgzID0gX19ub3N3YXBfdmdldF9sYW5lX2Y2NChfX3MwXzI4MywgMCk7IFwKKyAgZmxvYXQ2NF90IF9feV8yODMgPSBfX25vc3dhcF92Z2V0X2xhbmVfZjY0KF9fczFfMjgzLCBfX3AyXzI4Myk7IFwKKyAgZmxvYXQ2NF90IF9fel8yODMgPSBfX25vc3dhcF92bXVseGRfZjY0KF9feF8yODMsIF9feV8yODMpOyBcCisgIF9fcmV0XzI4MyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9mNjQoX196XzI4MywgX19zMF8yODMsIF9fcDJfMjgzKTsgXAorICBfX3JldF8yODM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4X2xhbmVxX2Y2NChfX3AwXzI4NCwgX19wMV8yODQsIF9fcDJfMjg0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF8yODQgPSBfX3AwXzI4NDsgXAorICBmbG9hdDY0eDJfdCBfX3MxXzI4NCA9IF9fcDFfMjg0OyBcCisgIGZsb2F0NjR4MV90IF9fcmV0XzI4NDsgXAorICBmbG9hdDY0X3QgX194XzI4NCA9IHZnZXRfbGFuZV9mNjQoX19zMF8yODQsIDApOyBcCisgIGZsb2F0NjRfdCBfX3lfMjg0ID0gdmdldHFfbGFuZV9mNjQoX19zMV8yODQsIF9fcDJfMjg0KTsgXAorICBmbG9hdDY0X3QgX196XzI4NCA9IHZtdWx4ZF9mNjQoX194XzI4NCwgX195XzI4NCk7IFwKKyAgX19yZXRfMjg0ID0gdnNldF9sYW5lX2Y2NChfX3pfMjg0LCBfX3MwXzI4NCwgMCk7IFwKKyAgX19yZXRfMjg0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhfbGFuZXFfZjY0KF9fcDBfMjg1LCBfX3AxXzI4NSwgX19wMl8yODUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzI4NSA9IF9fcDBfMjg1OyBcCisgIGZsb2F0NjR4Ml90IF9fczFfMjg1ID0gX19wMV8yODU7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxXzI4NTsgIF9fcmV2MV8yODUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzI4NSwgX19zMV8yODUsIDEsIDApOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0XzI4NTsgXAorICBmbG9hdDY0X3QgX194XzI4NSA9IF9fbm9zd2FwX3ZnZXRfbGFuZV9mNjQoX19zMF8yODUsIDApOyBcCisgIGZsb2F0NjRfdCBfX3lfMjg1ID0gX19ub3N3YXBfdmdldHFfbGFuZV9mNjQoX19yZXYxXzI4NSwgX19wMl8yODUpOyBcCisgIGZsb2F0NjRfdCBfX3pfMjg1ID0gX19ub3N3YXBfdm11bHhkX2Y2NChfX3hfMjg1LCBfX3lfMjg1KTsgXAorICBfX3JldF8yODUgPSBfX25vc3dhcF92c2V0X2xhbmVfZjY0KF9fel8yODUsIF9fczBfMjg1LCAwKTsgXAorICBfX3JldF8yODU7IFwKK30pCisjZW5kaWYKKworI2VuZGlmCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YWJhbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkbF91OChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWJhbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkbF91OChfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3ZhYmFsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZhYmRsX3U4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmFiYWxfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZGxfdTMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZhYmFsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZGxfdTMyKF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ2NHgyX3QgX19ub3N3YXBfdmFiYWxfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdmFiZGxfdTMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFiYWxfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZGxfdTE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhYmFsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZGxfdTE2KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdmFiYWxfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdmFiZGxfdTE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWJhbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRsX3M4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFiYWxfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkbF9zOChfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng4X3QgX19ub3N3YXBfdmFiYWxfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92YWJkbF9zOChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFiYWxfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkbF9zMzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YWJhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZGxfczMyKF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92YWJhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZhYmRsX3MzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFiYWxfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkbF9zMTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWJhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZGxfczE2KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92YWJhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZhYmRsX3MxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFiYWxfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiYWxfdTgoX19wMCwgdmdldF9oaWdoX3U4KF9fcDEpLCB2Z2V0X2hpZ2hfdTgoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhYmFsX2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmFsX3U4KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmFiYWxfaGlnaF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZhYmFsX3UzMihfX3AwLCB2Z2V0X2hpZ2hfdTMyKF9fcDEpLCB2Z2V0X2hpZ2hfdTMyKF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YWJhbF9oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiYWxfdTMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWJhbF9oaWdoX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiYWxfdTE2KF9fcDAsIHZnZXRfaGlnaF91MTYoX19wMSksIHZnZXRfaGlnaF91MTYoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhYmFsX2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJhbF91MTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFiYWxfaGlnaF9zOChpbnQxNng4X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJhbF9zOChfX3AwLCB2Z2V0X2hpZ2hfczgoX19wMSksIHZnZXRfaGlnaF9zOChfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWJhbF9oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmFsX3M4KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWJhbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJhbF9zMzIoX19wMCwgdmdldF9oaWdoX3MzMihfX3AxKSwgdmdldF9oaWdoX3MzMihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YWJhbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJhbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFiYWxfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiYWxfczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIHZnZXRfaGlnaF9zMTYoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFiYWxfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiYWxfczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKworI3VuZGVmIF9fYWkKKworI2VuZGlmIC8qIF9fQVJNX05FT05fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdngyaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDJpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2JjYmVmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdngyaW50cmluLmgKQEAgLTAsMCArMSwxMjk5IEBACisvKj09PS0tLS0gYXZ4MmludHJpbi5oIC0gQVZYMiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdngyaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0FWWDJJTlRSSU5fSAorI2RlZmluZSBfX0FWWDJJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDIiKSkpCisKKy8qIFNTRTQgTXVsdGlwbGUgUGFja2VkIFN1bXMgb2YgQWJzb2x1dGUgRGlmZmVyZW5jZS4gICovCisjZGVmaW5lIF9tbTI1Nl9tcHNhZGJ3X2VwdTgoWCwgWSwgTSkgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9tcHNhZGJ3MjU2KChfX3YzMnFpKShfX20yNTZpKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShZKSwgKGludCkoTSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWJzX2VwaTgoX19tMjU2aSBfX2EpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhYnNiMjU2KChfX3YzMnFpKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWJzX2VwaTE2KF9fbTI1NmkgX19hKQoreworICAgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWJzdzI1NigoX192MTZoaSlfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Fic19lcGkzMihfX20yNTZpIF9fYSkKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGFic2QyNTYoKF9fdjhzaSlfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3BhY2tzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhY2tzc3diMjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wYWNrc19lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWNrc3NkdzI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3BhY2t1c19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGFja3VzX2VwaTMyKF9fbTI1NmkgX19WMSwgX19tMjU2aSBfX1YyKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3MjU2KChfX3Y4c2kpX19WMSwgKF9fdjhzaSlfX1YyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjMycXUpX19hICsgKF9fdjMycXUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3YxNmh1KV9fYSArIChfX3YxNmh1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192OHN1KV9fYSArIChfX3Y4c3UpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRfZXBpNjQoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3Y0ZHUpX19hICsgKF9fdjRkdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FkZHNfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWRkc2IyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FkZHNfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGFkZHN3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRzX2VwdTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGFkZHVzYjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkc19lcHUxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWRkdXN3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworI2RlZmluZSBfbW0yNTZfYWxpZ25yX2VwaTgoYSwgYiwgbikgX19leHRlbnNpb25fXyAoeyAgICAgICAgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWxpZ25yMjU2KChfX3YzMnFpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShiKSwgKG4pKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hbmRfc2kyNTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3Y0ZHUpX19hICYgKF9fdjRkdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FuZG5vdF9zaTI1NihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkofihfX3Y0ZHUpX19hICYgKF9fdjRkdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2F2Z19lcHU4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhdmdiMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hdmdfZXB1MTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGF2Z3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2JsZW5kdl9lcGk4KF9fbTI1NmkgX19WMSwgX19tMjU2aSBfX1YyLCBfX20yNTZpIF9fTSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BibGVuZHZiMjU2KChfX3YzMnFpKV9fVjEsIChfX3YzMnFpKV9fVjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX19NKTsKK30KKworI2RlZmluZSBfbW0yNTZfYmxlbmRfZXBpMTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2aGkpKF9fbTI1NmkpKFYxKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShWMiksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gMTYgOiAwKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAyKSA/IDE3IDogMSksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwNCkgPyAxOCA6IDIpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gMTkgOiAzKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDEwKSA/IDIwIDogNCksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgyMCkgPyAyMSA6IDUpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4NDApID8gMjIgOiA2KSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDgwKSA/IDIzIDogNyksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyAyNCA6IDgpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gMjUgOiA5KSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA0KSA/IDI2IDogMTApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwOCkgPyAyNyA6IDExKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MTApID8gMjggOiAxMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDIwKSA/IDI5IDogMTMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg0MCkgPyAzMCA6IDE0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4ODApID8gMzEgOiAxNSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3YzMnFpKV9fYSA9PSAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192MTZoaSlfX2EgPT0gKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBlcV9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjhzaSlfX2EgPT0gKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwaTY0KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192NGRpKV9fYSA9PSAoX192NGRpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGNvbXBhcmlzb24sIGJ1dCBfX3YzMnFpIGlzIGEgY2hhcgorICAgICB3aGljaCBtYXkgYmUgc2lnbmVkIG9yIHVuc2lnbmVkLCBzbyB1c2UgX192MzJxcy4gKi8KKyAgcmV0dXJuIChfX20yNTZpKSgoX192MzJxcylfX2EgPiAoX192MzJxcylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGd0X2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192MTZoaSlfX2EgPiAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGd0X2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192OHNpKV9fYSA+IChfX3Y4c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBndF9lcGk2NChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjRkaSlfX2EgPiAoX192NGRpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfaGFkZF9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BoYWRkdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfaGFkZF9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BoYWRkZDI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2hhZGRzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGhhZGRzdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfaHN1Yl9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Boc3VidzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfaHN1Yl9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Boc3ViZDI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2hzdWJzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGhzdWJzdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFkZHVic19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtYWRkdWJzdzI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFkZF9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWFkZHdkMjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXhfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4c2IyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21heF9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4c3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21heF9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4c2QyNTYoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXhfZXB1OChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4dWIyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21heF9lcHUxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4dXcyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21heF9lcHUzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4dWQyNTYoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9taW5fZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWluc2IyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21pbl9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWluc3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21pbl9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWluc2QyNTYoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9taW5fZXB1OChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWludWIyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21pbl9lcHUxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWludXcyNTYgKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9taW5fZXB1MzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1pbnVkMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZlbWFza19lcGk4KF9fbTI1NmkgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcG1vdm1za2IyNTYoKF9fdjMycWkpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGk4X2VwaTE2KF9fbTEyOGkgX19WKQoreworICAvKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBwZXJmb3JtcyBhIHNpZ25lZCBleHRlbnNpb24sIGJ1dCBfX3YxNnFpIGlzIGEgY2hhcgorICAgICB3aGljaCBtYXkgYmUgc2lnbmVkIG9yIHVuc2lnbmVkLCBzbyB1c2UgX192MTZxcy4gKi8KKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3YxNnFzKV9fViwgX192MTZoaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpOF9lcGkzMihfX20xMjhpIF9fVikKK3sKKyAgLyogVGhpcyBmdW5jdGlvbiBhbHdheXMgcGVyZm9ybXMgYSBzaWduZWQgZXh0ZW5zaW9uLCBidXQgX192MTZxaSBpcyBhIGNoYXIKKyAgICAgd2hpY2ggbWF5IGJlIHNpZ25lZCBvciB1bnNpZ25lZCwgc28gdXNlIF9fdjE2cXMuICovCisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxcylfX1YsIChfX3YxNnFzKV9fViwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyksIF9fdjhzaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpOF9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgLyogVGhpcyBmdW5jdGlvbiBhbHdheXMgcGVyZm9ybXMgYSBzaWduZWQgZXh0ZW5zaW9uLCBidXQgX192MTZxaSBpcyBhIGNoYXIKKyAgICAgd2hpY2ggbWF5IGJlIHNpZ25lZCBvciB1bnNpZ25lZCwgc28gdXNlIF9fdjE2cXMuICovCisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxcylfX1YsIChfX3YxNnFzKV9fViwgMCwgMSwgMiwgMyksIF9fdjRkaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpMTZfZXBpMzIoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcigoX192OGhpKV9fViwgX192OHNpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGkxNl9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpX19WLCAoX192OGhpKV9fViwgMCwgMSwgMiwgMyksIF9fdjRkaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpMzJfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcigoX192NHNpKV9fViwgX192NGRpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcHU4X2VwaTE2KF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoKF9fdjE2cXUpX19WLCBfX3YxNmhpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcHU4X2VwaTMyKF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXUpX19WLCAoX192MTZxdSlfX1YsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpLCBfX3Y4c2kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwdThfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxdSlfX1YsIChfX3YxNnF1KV9fViwgMCwgMSwgMiwgMyksIF9fdjRkaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1MTZfZXBpMzIoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcigoX192OGh1KV9fViwgX192OHNpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcHUxNl9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aHUpX19WLCAoX192OGh1KV9fViwgMCwgMSwgMiwgMyksIF9fdjRkaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1MzJfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcigoX192NHN1KV9fViwgX192NGRpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXVsX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtdWxkcTI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X211bGhyc19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXVsaGlfZXB1MTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG11bGh1dzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXVsaGlfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG11bGh3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tdWxsb19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjE2aHUpX19hICogKF9fdjE2aHUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXVsbG9fZXBpMzIgKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192OHN1KV9fYSAqIChfX3Y4c3UpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tdWxfZXB1MzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcG11bHVkcTI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X29yX3NpMjU2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192NGR1KV9fYSB8IChfX3Y0ZHUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zYWRfZXB1OChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc2FkYncyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NodWZmbGVfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2h1ZmIyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOworfQorCisjZGVmaW5lIF9tbTI1Nl9zaHVmZmxlX2VwaTMyKGEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2kpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3VuZGVmaW5lZF9zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoaW1tKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChpbW0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSA+PiA2KSAmIDB4MykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9zaHVmZmxlaGlfZXBpMTYoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2aGkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoaW1tKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgKyAoKChpbW0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoaW1tKSA+PiA2KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgOSwgMTAsIDExLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoaW1tKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgKyAoKChpbW0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoaW1tKSA+PiA2KSAmIDB4MykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9zaHVmZmxlbG9fZXBpMTYoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2aGkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoaW1tKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKGltbSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChpbW0pID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoaW1tKSA+PiA2KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgNSwgNiwgNywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICsgKCgoaW1tKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCArICgoKGltbSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggKyAoKChpbW0pID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICsgKCgoaW1tKSA+PiA2KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIsIDEzLCAxNCwgMTUpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NpZ25fZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzaWduYjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2lnbl9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzaWdudzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2lnbl9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzaWduZDI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCisjZGVmaW5lIF9tbTI1Nl9zbGxpX3NpMjU2KGEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKF9fdjMycWkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoYSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICAwIDogKChjaGFyKShpbW0pPjB4MCA/IDE2IDogMzIpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDEgOiAoKGNoYXIpKGltbSk+MHgxID8gMTcgOiAzMykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgMiA6ICgoY2hhcikoaW1tKT4weDIgPyAxOCA6IDM0KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICAzIDogKChjaGFyKShpbW0pPjB4MyA/IDE5IDogMzUpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDQgOiAoKGNoYXIpKGltbSk+MHg0ID8gMjAgOiAzNikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNSA6ICgoY2hhcikoaW1tKT4weDUgPyAyMSA6IDM3KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA2IDogKChjaGFyKShpbW0pPjB4NiA/IDIyIDogMzgpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDcgOiAoKGNoYXIpKGltbSk+MHg3ID8gMjMgOiAzOSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgOCA6ICgoY2hhcikoaW1tKT4weDggPyAyNCA6IDQwKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA5IDogKChjaGFyKShpbW0pPjB4OSA/IDI1IDogNDEpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTAgOiAoKGNoYXIpKGltbSk+MHhBID8gMjYgOiA0MikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMSA6ICgoY2hhcikoaW1tKT4weEIgPyAyNyA6IDQzKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEyIDogKChjaGFyKShpbW0pPjB4QyA/IDI4IDogNDQpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTMgOiAoKGNoYXIpKGltbSk+MHhEID8gMjkgOiA0NSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxNCA6ICgoY2hhcikoaW1tKT4weEUgPyAzMCA6IDQ2KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE1IDogKChjaGFyKShpbW0pPjB4RiA/IDMxIDogNDcpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTYgOiAoKGNoYXIpKGltbSk+MHgwID8gMzIgOiA0OCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxNyA6ICgoY2hhcikoaW1tKT4weDEgPyAzMyA6IDQ5KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE4IDogKChjaGFyKShpbW0pPjB4MiA/IDM0IDogNTApIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTkgOiAoKGNoYXIpKGltbSk+MHgzID8gMzUgOiA1MSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyMCA6ICgoY2hhcikoaW1tKT4weDQgPyAzNiA6IDUyKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDIxIDogKChjaGFyKShpbW0pPjB4NSA/IDM3IDogNTMpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjIgOiAoKGNoYXIpKGltbSk+MHg2ID8gMzggOiA1NCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyMyA6ICgoY2hhcikoaW1tKT4weDcgPyAzOSA6IDU1KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI0IDogKChjaGFyKShpbW0pPjB4OCA/IDQwIDogNTYpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjUgOiAoKGNoYXIpKGltbSk+MHg5ID8gNDEgOiA1NykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyNiA6ICgoY2hhcikoaW1tKT4weEEgPyA0MiA6IDU4KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI3IDogKChjaGFyKShpbW0pPjB4QiA/IDQzIDogNTkpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjggOiAoKGNoYXIpKGltbSk+MHhDID8gNDQgOiA2MCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyOSA6ICgoY2hhcikoaW1tKT4weEQgPyA0NSA6IDYxKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDMwIDogKChjaGFyKShpbW0pPjB4RSA/IDQ2IDogNjIpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzEgOiAoKGNoYXIpKGltbSk+MHhGID8gNDcgOiA2MykgLSAoY2hhcikoaW1tKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2JzbGxpX2VwaTEyOChhLCBjb3VudCkgX21tMjU2X3NsbGlfc2kyNTYoKGEpLCAoY291bnQpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NsbGlfZXBpMTYoX19tMjU2aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNsbHdpMjU2KChfX3YxNmhpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsX2VwaTE2KF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsdzI1NigoX192MTZoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsaV9lcGkzMihfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsZGkyNTYoKF9fdjhzaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NsbF9lcGkzMihfX20yNTZpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNsbGQyNTYoKF9fdjhzaSlfX2EsIChfX3Y0c2kpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsaV9lcGk2NChfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc2xscWkyNTYoKF9fdjRkaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NsbF9lcGk2NChfX20yNTZpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcHNsbHEyNTYoKF9fdjRkaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NyYWlfZXBpMTYoX19tMjU2aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNyYXdpMjU2KChfX3YxNmhpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JhX2VwaTE2KF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JhdzI1NigoX192MTZoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JhaV9lcGkzMihfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JhZGkyNTYoKF9fdjhzaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NyYV9lcGkzMihfX20yNTZpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNyYWQyNTYoKF9fdjhzaSlfX2EsIChfX3Y0c2kpX19jb3VudCk7Cit9CisKKyNkZWZpbmUgX21tMjU2X3NybGlfc2kyNTYoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKF9fdjMycWkpKF9fbTI1NmkpKGEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoX192MzJxaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDMyIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhGID8gMTYgOiAwKSwgIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzMgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEUgPyAxNyA6IDEpLCAgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzNCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RCA/IDE4IDogMiksICBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDM1IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhDID8gMTkgOiAzKSwgIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzYgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEIgPyAyMCA6IDQpLCAgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzNyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QSA/IDIxIDogNSksICBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDM4IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg5ID8gMjIgOiA2KSwgIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzkgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDggPyAyMyA6IDcpLCAgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0MCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NyA/IDI0IDogOCksICBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQxIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg2ID8gMjUgOiA5KSwgIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDIgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDUgPyAyNiA6IDEwKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0MyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NCA/IDI3IDogMTEpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQ0IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgzID8gMjggOiAxMiksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDUgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDIgPyAyOSA6IDEzKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0NiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MSA/IDMwIDogMTQpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQ3IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgwID8gMzEgOiAxNSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDggOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEYgPyAzMiA6IDE2KSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0OSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RSA/IDMzIDogMTcpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDUwIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhEID8gMzQgOiAxOCksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTEgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEMgPyAzNSA6IDE5KSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1MiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QiA/IDM2IDogMjApLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDUzIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhBID8gMzcgOiAyMSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTQgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDkgPyAzOCA6IDIyKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1NSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4OCA/IDM5IDogMjMpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDU2IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg3ID8gNDAgOiAyNCksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTcgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDYgPyA0MSA6IDI1KSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1OCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NSA/IDQyIDogMjYpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDU5IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg0ID8gNDMgOiAyNyksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNjAgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDMgPyA0NCA6IDI4KSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA2MSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MiA/IDQ1IDogMjkpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDYyIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgxID8gNDYgOiAzMCksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNjMgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDAgPyA0NyA6IDMxKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2JzcmxpX2VwaTEyOChhLCBjb3VudCkgX21tMjU2X3NybGlfc2kyNTYoKGEpLCAoY291bnQpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NybGlfZXBpMTYoX19tMjU2aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybHdpMjU2KChfX3YxNmhpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JsX2VwaTE2KF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JsdzI1NigoX192MTZoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JsaV9lcGkzMihfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JsZGkyNTYoKF9fdjhzaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NybF9lcGkzMihfX20yNTZpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybGQyNTYoKF9fdjhzaSlfX2EsIChfX3Y0c2kpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JsaV9lcGk2NChfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc3JscWkyNTYoKF9fdjRkaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NybF9lcGk2NChfX20yNTZpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcHNybHEyNTYoKF9fdjRkaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N1Yl9lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192MzJxdSlfX2EgLSAoX192MzJxdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N1Yl9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjE2aHUpX19hIC0gKF9fdjE2aHUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3Y4c3UpX19hIC0gKF9fdjhzdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N1Yl9lcGk2NChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjRkdSlfX2EgLSAoX192NGR1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3Vic19lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzdWJzYjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3Vic19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3Vic3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N1YnNfZXB1OChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3VidXNiMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJzX2VwdTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VucGFja2hpX2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDgsIDMyKzgsIDksIDMyKzksIDEwLCAzMisxMCwgMTEsIDMyKzExLCAxMiwgMzIrMTIsIDEzLCAzMisxMywgMTQsIDMyKzE0LCAxNSwgMzIrMTUsIDI0LCAzMisyNCwgMjUsIDMyKzI1LCAyNiwgMzIrMjYsIDI3LCAzMisyNywgMjgsIDMyKzI4LCAyOSwgMzIrMjksIDMwLCAzMiszMCwgMzEsIDMyKzMxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2toaV9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNCwgMTYrNCwgNSwgMTYrNSwgNiwgMTYrNiwgNywgMTYrNywgMTIsIDE2KzEyLCAxMywgMTYrMTMsIDE0LCAxNisxNCwgMTUsIDE2KzE1KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2toaV9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDIsIDgrMiwgMywgOCszLCA2LCA4KzYsIDcsIDgrNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5wYWNraGlfZXBpNjQoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAxLCA0KzEsIDMsIDQrMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5wYWNrbG9fZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMCwgMzIrMCwgMSwgMzIrMSwgMiwgMzIrMiwgMywgMzIrMywgNCwgMzIrNCwgNSwgMzIrNSwgNiwgMzIrNiwgNywgMzIrNywgMTYsIDMyKzE2LCAxNywgMzIrMTcsIDE4LCAzMisxOCwgMTksIDMyKzE5LCAyMCwgMzIrMjAsIDIxLCAzMisyMSwgMjIsIDMyKzIyLCAyMywgMzIrMjMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VucGFja2xvX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAwLCAxNiswLCAxLCAxNisxLCAyLCAxNisyLCAzLCAxNiszLCA4LCAxNis4LCA5LCAxNis5LCAxMCwgMTYrMTAsIDExLCAxNisxMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5wYWNrbG9fZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAwLCA4KzAsIDEsIDgrMSwgNCwgOCs0LCA1LCA4KzUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VucGFja2xvX2VwaTY0KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMCwgNCswLCAyLCA0KzIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3hvcl9zaTI1NihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjRkdSlfX2EgXiAoX192NGR1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RyZWFtX2xvYWRfc2kyNTYoX19tMjU2aSBjb25zdCAqX19WKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfbW92bnRkcWEyNTYoKGNvbnN0IF9fdjRkaSAqKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9icm9hZGNhc3Rzc19wcyhfX20xMjggX19YKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKV9fWCwgKF9fdjRzZilfX1gsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Jyb2FkY2FzdHNkX3BkKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkZilfX2EsIChfX3YyZGYpX19hLCAwLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdHNzX3BzKF9fbTEyOCBfX1gpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19YLCAoX192NHNmKV9fWCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0c2RfcGQoX19tMTI4ZCBfX1gpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKV9fWCwgKF9fdjJkZilfX1gsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdHNpMTI4X3NpMjU2KF9fbTEyOGkgX19YKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkaSlfX1gsIChfX3YyZGkpX19YLCAwLCAxLCAwLCAxKTsKK30KKworI2RlZmluZSBfbW1fYmxlbmRfZXBpMzIoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzaSkoX19tMTI4aSkoVjEpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShWMiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyA0IDogMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAyKSA/IDUgOiAxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gNiA6IDIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwOCkgPyA3IDogMykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9ibGVuZF9lcGkzMihWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OHNpKShfX20yNTZpKShWMSksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShWMiksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gIDggOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gIDkgOiAxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gMTAgOiAyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gMTEgOiAzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MTApID8gMTIgOiA0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MjApID8gMTMgOiA1KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4NDApID8gMTQgOiA2KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4ODApID8gMTUgOiA3KSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0Yl9lcGk4KF9fbTEyOGkgX19YKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cWkpX19YLCAoX192MTZxaSlfX1gsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdHdfZXBpMTYoX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGhpKV9fWCwgKF9fdjhoaSlfX1gsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdGRfZXBpMzIoX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKV9fWCwgKF9fdjRzaSlfX1gsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdHFfZXBpNjQoX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRpKV9fWCwgKF9fdjJkaSlfX1gsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Jyb2FkY2FzdGJfZXBpOChfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnFpKV9fWCwgKF9fdjE2cWkpX19YLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9icm9hZGNhc3R3X2VwaTE2KF9fbTEyOGkgX19YKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSlfX1gsIChfX3Y4aGkpX19YLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Jyb2FkY2FzdGRfZXBpMzIoX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKV9fWCwgKF9fdjRzaSlfX1gsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Jyb2FkY2FzdHFfZXBpNjQoX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRpKV9fWCwgKF9fdjJkaSlfX1gsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV2YXI4eDMyX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Blcm12YXJzaTI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCisjZGVmaW5lIF9tbTI1Nl9wZXJtdXRlNHg2NF9wZChWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkZikoX19tMjU2ZCkoViksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNKSA+PiAwKSAmIDB4MywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE0pID4+IDIpICYgMHgzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTSkgPj4gNCkgJiAweDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNKSA+PiA2KSAmIDB4Myk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRldmFyOHgzMl9wcyhfX20yNTYgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfcGVybXZhcnNmMjU2KChfX3Y4c2YpX19hLCAoX192OHNpKV9fYik7Cit9CisKKyNkZWZpbmUgX21tMjU2X3Blcm11dGU0eDY0X2VwaTY0KFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRpKShfX20yNTZpKShWKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE0pID4+IDApICYgMHgzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTSkgPj4gMikgJiAweDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNKSA+PiA0KSAmIDB4MywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE0pID4+IDYpICYgMHgzKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcGVybXV0ZTJ4MTI4X3NpMjU2KFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Blcm10aTI1NigoX19tMjU2aSkoVjEpLCAoX19tMjU2aSkoVjIpLCAoTSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9leHRyYWN0aTEyOF9zaTI1NihWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkaSkoX19tMjU2aSkoViksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAxKSA/IDIgOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDEpID8gMyA6IDEpICk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2luc2VydGkxMjhfc2kyNTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkaSkoX19tMjU2aSkoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X2Nhc3RzaTEyOF9zaTI1NigoX19tMTI4aSkoVjIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDEpID8gMCA6IDQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMSkgPyAxIDogNSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAxKSA/IDQgOiAyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDEpID8gNSA6IDMpICk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza2xvYWRfZXBpMzIoaW50IGNvbnN0ICpfX1gsIF9fbTI1NmkgX19NKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfbWFza2xvYWRkMjU2KChjb25zdCBfX3Y4c2kgKilfX1gsIChfX3Y4c2kpX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrbG9hZF9lcGk2NChsb25nIGxvbmcgY29uc3QgKl9fWCwgX19tMjU2aSBfX00pCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9tYXNrbG9hZHEyNTYoKGNvbnN0IF9fdjRkaSAqKV9fWCwgKF9fdjRkaSlfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tsb2FkX2VwaTMyKGludCBjb25zdCAqX19YLCBfX20xMjhpIF9fTSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX21hc2tsb2FkZCgoY29uc3QgX192NHNpICopX19YLCAoX192NHNpKV9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza2xvYWRfZXBpNjQobG9uZyBsb25nIGNvbnN0ICpfX1gsIF9fbTEyOGkgX19NKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfbWFza2xvYWRxKChjb25zdCBfX3YyZGkgKilfX1gsIChfX3YyZGkpX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrc3RvcmVfZXBpMzIoaW50ICpfX1gsIF9fbTI1NmkgX19NLCBfX20yNTZpIF9fWSkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlZDI1NigoX192OHNpICopX19YLCAoX192OHNpKV9fTSwgKF9fdjhzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tzdG9yZV9lcGk2NChsb25nIGxvbmcgKl9fWCwgX19tMjU2aSBfX00sIF9fbTI1NmkgX19ZKQoreworICBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVxMjU2KChfX3Y0ZGkgKilfX1gsIChfX3Y0ZGkpX19NLCAoX192NGRpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3N0b3JlX2VwaTMyKGludCAqX19YLCBfX20xMjhpIF9fTSwgX19tMTI4aSBfX1kpCit7CisgIF9fYnVpbHRpbl9pYTMyX21hc2tzdG9yZWQoKF9fdjRzaSAqKV9fWCwgKF9fdjRzaSlfX00sIChfX3Y0c2kpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrc3RvcmVfZXBpNjQobG9uZyBsb25nICpfX1gsIF9fbTEyOGkgX19NLCBfX20xMjhpIF9fWSkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcSgoIF9fdjJkaSAqKV9fWCwgKF9fdjJkaSlfX00sIChfX3YyZGkpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zbGx2X2VwaTMyKF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzbGx2OHNpKChfX3Y4c2kpX19YLCAoX192OHNpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsdl9lcGkzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2xsdjRzaSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NsbHZfZXBpNjQoX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNsbHY0ZGkoKF9fdjRkaSlfX1gsIChfX3Y0ZGkpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGx2X2VwaTY0KF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzbGx2MmRpKChfX3YyZGkpX19YLCAoX192MmRpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3Jhdl9lcGkzMihfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JhdjhzaSgoX192OHNpKV9fWCwgKF9fdjhzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYXZfZXBpMzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYXY0c2koKF9fdjRzaSlfX1gsIChfX3Y0c2kpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmx2X2VwaTMyKF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Bzcmx2OHNpKChfX3Y4c2kpX19YLCAoX192OHNpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Jsdl9lcGkzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsdjRzaSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NybHZfZXBpNjQoX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybHY0ZGkoKF9fdjRkaSlfX1gsIChfX3Y0ZGkpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmx2X2VwaTY0KF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Bzcmx2MmRpKChfX3YyZGkpX19YLCAoX192MmRpKV9fWSk7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfaTMyZ2F0aGVyX3BkKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3BkKChfX3YyZGYpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTMyZ2F0aGVyX3BkKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3BkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTY0Z2F0aGVyX3BkKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BkKChfX3YyZGYpKF9fbTEyOGQpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTY0Z2F0aGVyX3BkKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTMyZ2F0aGVyX3BzKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcHMoKF9fdjRzZikoX19tMTI4KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pMzJnYXRoZXJfcHMoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wczI1NigoX192OHNmKShfX20yNTYpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2k2NGdhdGhlcl9wcyhhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BzKChfX3Y0c2YpKF9fbTEyOCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTY0Z2F0aGVyX3BzKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcHMyNTYoKF9fdjRzZikoX19tMTI4KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pMzJnYXRoZXJfZXBpMzIoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfZCgoX192NHNpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2kzMmdhdGhlcl9lcGkzMihhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9kMjU2KChfX3Y4c2kpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTY0Z2F0aGVyX2VwaTMyKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJxX2QoKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pNjRnYXRoZXJfZXBpMzIoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfZDI1NigoX192NHNpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2kzMmdhdGhlcl9lcGk2NChhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9xKChfX3YyZGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTMyZ2F0aGVyX2VwaTY0KGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3EyNTYoKF9fdjRkaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pNjRnYXRoZXJfZXBpNjQoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcSgoX192MmRpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2k2NGdhdGhlcl9lcGk2NChhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfZ2F0aGVycV9xMjU2KChfX3Y0ZGkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX2kzMmdhdGhlcl9wZChtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wZCgoX192MmRmKV9tbV91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX2NtcGVxX3BkKF9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCgpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2kzMmdhdGhlcl9wZChtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wZDI1NigoX192NGRmKV9tbTI1Nl91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X2NtcF9wZChfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NNUF9FUV9PUSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQorCisjZGVmaW5lIF9tbV9pNjRnYXRoZXJfcGQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcGQoKF9fdjJkZilfbW1fdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9jbXBlcV9wZChfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQoKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pNjRnYXRoZXJfcGQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcGQyNTYoKF9fdjRkZilfbW0yNTZfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9jbXBfcGQoX21tMjU2X3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DTVBfRVFfT1EpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMpKTsgfSkKKworI2RlZmluZSBfbW1faTMyZ2F0aGVyX3BzKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcHMoKF9fdjRzZilfbW1fdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX2NtcGVxX3BzKF9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzKCkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pMzJnYXRoZXJfcHMobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wczI1NigoX192OHNmKV9tbTI1Nl91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfY21wX3BzKF9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NNUF9FUV9PUSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX2k2NGdhdGhlcl9wcyhtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BzKChfX3Y0c2YpX21tX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9jbXBlcV9wcyhfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcygpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTY0Z2F0aGVyX3BzKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcHMyNTYoKF9fdjRzZilfbW1fdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX2NtcGVxX3BzKF9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzKCkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQorCisjZGVmaW5lIF9tbV9pMzJnYXRoZXJfZXBpMzIobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfZCgoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldDFfZXBpMzIoLTEpLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pMzJnYXRoZXJfZXBpMzIobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfZDI1NigoX192OHNpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgKF9fdjhzaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldDFfZXBpMzIoLTEpLCAocykpOyB9KQorCisjZGVmaW5lIF9tbV9pNjRnYXRoZXJfZXBpMzIobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfZCgoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldDFfZXBpMzIoLTEpLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pNjRnYXRoZXJfZXBpMzIobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfZDI1NigoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldDFfZXBpMzIoLTEpLCAocykpOyB9KQorCisjZGVmaW5lIF9tbV9pMzJnYXRoZXJfZXBpNjQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcSgoX192MmRpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldDFfZXBpNjR4KC0xKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTMyZ2F0aGVyX2VwaTY0KG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3EyNTYoKF9fdjRkaSlfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXQxX2VwaTY0eCgtMSksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX2k2NGdhdGhlcl9lcGk2NChtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVycV9xKChfX3YyZGkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0MV9lcGk2NHgoLTEpLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pNjRnYXRoZXJfZXBpNjQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcTI1NigoX192NGRpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldDFfZXBpNjR4KC0xKSwgKHMpKTsgfSkKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19BVlgySU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyYndpbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyYndpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2M1YTZjCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJid2ludHJpbi5oCkBAIC0wLDAgKzEsMjQxMCBAQAorLyo9PT0tLS0tLS0tLS0tLS0tIGF2eDUxMmJ3aW50cmluLmggLSBBVlg1MTJCVyBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJid2ludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJCV0lOVFJJTl9ICisjZGVmaW5lIF9fQVZYNTEyQldJTlRSSU5fSAorCit0eXBlZGVmIHVuc2lnbmVkIGludCBfX21tYXNrMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX21tYXNrNjQ7CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEyYnciKSkpCisKK3N0YXRpYyAgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXR6ZXJvX3FpKHZvaWQpIHsKKyAgcmV0dXJuIChfX201MTJpKShfX3Y2NHFpKXsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworfQorCitzdGF0aWMgIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0emVyb19oaSh2b2lkKSB7CisgIHJldHVybiAoX19tNTEyaSkoX192MzJoaSl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKK30KKworLyogSW50ZWdlciBjb21wYXJlICovCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBlcV9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBlcV9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBlcV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGVxX2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZXFfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGVxdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGVxX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBlcXc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBlcV9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBlcV9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBnZV9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGdlX2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ2VfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGdlX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBnZV9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBndF9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBndGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBndF9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBndGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBndF9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGd0X2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ3RfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGd0dzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGd0X2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBndHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBndF9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBndF9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsZV9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsZV9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsZV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGxlX2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbGVfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGxlX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsZV9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsZV9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsdF9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGx0X2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbHRfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGx0X2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsdF9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBuZXFfZXBpOF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl9jbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbmVxX2VwaThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcG5lcV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcG5lcV9lcHU4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcG5lcV9lcGkxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbmVxX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBuZXFfZXB1MTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbmVxX2VwdTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hZGRfZXBpOCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgKChfX3Y2NHF1KSBfX0EgKyAoX192NjRxdSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZF9lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZGI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZGI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3ViX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpICgoX192NjRxdSkgX19BIC0gKF9fdjY0cXUpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdWJfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3ViX2VwaTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZF9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgKChfX3YzMmh1KSBfX0EgKyAoX192MzJodSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZF9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWRkX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdWJfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpICgoX192MzJodSkgX19BIC0gKF9fdjMyaHUpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdWJfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3N1Yl9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1Ync1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsbG9fZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpICgoX192MzJodSkgX19BICogKF9fdjMyaHUpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tdWxsb19lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bGxvX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19ibGVuZF9lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX1cpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0Yl81MTIgKChfX21tYXNrNjQpIF9fVSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19ibGVuZF9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19XKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfNTEyICgoX19tbWFzazMyKSBfX1UsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Fic19lcGk4IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWJzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWJzX2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWJzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Fic19lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWJzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hYnNfZXBpMTYgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hYnNfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Fic19lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGFja3NfZXBpMzIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3NkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3BhY2tzX2VwaTMyIChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3NzZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wYWNrc19lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLAorICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGFja3NfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3N3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGFja3NfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3N3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3BhY2tzX2VwaTE2IChfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3Nzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGFja3VzX2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3VzZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wYWNrdXNfZXBpMzIgKF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXNkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3BhY2t1c19lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLAorICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXNkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3BhY2t1c19lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wYWNrdXNfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3Vzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wYWNrdXNfZXBpMTYgKF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hZGRzX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkc2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZHNfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkc2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRzX2VwaTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkc2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWRkc19lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWRkc19lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWRkc19lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hZGRzX2VwdTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hZGRzX2VwdTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHVzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FkZHNfZXB1OCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWRkc19lcHUxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZHNfZXB1MTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRzX2VwdTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHVzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hdmdfZXB1OCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhdmdiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hdmdfZXB1OCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhdmdiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYXZnX2VwdTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYXZnYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hdmdfZXB1MTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYXZndzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYXZnX2VwdTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bhdmd3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYXZnX2VwdTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGF2Z3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWF4X2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tYXhfZXBpOCAoX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21heF9lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWF4X2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWF4X2VwaTE2IChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWF4X2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21heF9lcHU4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHViNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWF4X2VwdTggKF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYXhfZXB1OCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLAorICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1YjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21heF9lcHUxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1dzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21heF9lcHUxNiAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1dzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21heF9lcHUxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLAorICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9taW5fZXBpOCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21pbl9lcGk4IChfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWluX2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWluc2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9taW5fZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWluc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9taW5fZXBpMTYgKF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWluc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19taW5fZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX2VwdTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludWI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9taW5fZXB1OCAoX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51YjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21pbl9lcHU4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnViNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX2VwdTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnV3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWluX2VwdTE2IChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnV3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWluX2VwdTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51dzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NodWZmbGVfZXBpOCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzaHVmYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc2h1ZmZsZV9lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzaHVmYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NodWZmbGVfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzaHVmYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdWJzX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3Vic2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N1YnNfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3Vic2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zdWJzX2VwaTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3Vic2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3Vic19lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3Vic19lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3Vic19lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdWJzX2VwdTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidXNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdWJzX2VwdTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnVzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3N1YnNfZXB1OCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3Vic19lcHUxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N1YnNfZXB1MTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zdWJzX2VwdTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnVzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fSSwKKyAgICAgICAgIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJoaTUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19JIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXgydmFyX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0ksIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJoaTUxMl9tYXNrICgoX192MzJoaSkgX19JIC8qIGlkeCAqLywKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGVybXV0ZXgydmFyX2VwaTE2IChfX201MTJpIF9fQSwgX19tbWFzazMyIF9fVSwKKyAgICAgICAgX19tNTEyaSBfX0ksIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJoaTUxMl9tYXNrICgoX192MzJoaSkgX19JIC8qIGlkeCAqLywKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgX19tNTEyaSBfX0ksIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJoaTUxMl9tYXNreiAoKF9fdjMyaGkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX211bGhyc19lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxocnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tdWxocnNfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGhyc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tdWxocnNfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWxoaV9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbXVsaGlfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tdWxoaV9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWxoaV9lcHUxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX211bGhpX2VwdTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGh1dzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bGhpX2VwdTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGh1dzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYWRkdWJzX2VwaTE2IChfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHVic3c1MTJfbWFzayAoKF9fdjY0cWkpIF9fWCwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21hZGR1YnNfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fWCwKKyAgICAgICAgIF9fbTUxMmkgX19ZKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1hZGR1YnN3NTEyX21hc2sgKChfX3Y2NHFpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1ksCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWFkZHVic19lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1hZGR1YnN3NTEyX21hc2sgKChfX3Y2NHFpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1ksCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hZGRfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkd2Q1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21hZGRfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwKKyAgICAgIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1hZGR3ZDUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21hZGRfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkd2Q1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0c2VwaTE2X2VwaTggKF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHNlcGkxNl9lcGk4IChfX20yNTZpIF9fTywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSlfX08sCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHNlcGkxNl9lcGk4IChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR1c2VwaTE2X2VwaTggKF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR1c2VwaTE2X2VwaTggKF9fbTI1NmkgX19PLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fTywKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHVzZXBpMTZfZXBpOCAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpMTZfZXBpOCAoX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92d2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTE2X2VwaTggKF9fbTI1NmkgX19PLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJxaSkgX19PLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaTE2X2VwaTggKF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdndiNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpMTZfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92d2I1MTJtZW1fbWFzayAoKF9fdjMycWkgKikgX19QLCAoX192MzJoaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0c2VwaTE2X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnN3YjUxMm1lbV9tYXNrICgoX192MzJxaSAqKSBfX1AsIChfX3YzMmhpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR1c2VwaTE2X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnVzd2I1MTJtZW1fbWFzayAoKF9fdjMycWkgKikgX19QLCAoX192MzJoaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VucGFja2hpX2VwaTgoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NjRxaSlfX0EsIChfX3Y2NHFpKV9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsICA2NCs4LCAgIDksIDY0KzksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCwgNjQrMTAsIDExLCA2NCsxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyLCA2NCsxMiwgMTMsIDY0KzEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQsIDY0KzE0LCAxNSwgNjQrMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCwgNjQrMjQsIDI1LCA2NCsyNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2LCA2NCsyNiwgMjcsIDY0KzI3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgsIDY0KzI4LCAyOSwgNjQrMjksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMCwgNjQrMzAsIDMxLCA2NCszMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwLCA2NCs0MCwgNDEsIDY0KzQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDIsIDY0KzQyLCA0MywgNjQrNDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NCwgNjQrNDQsIDQ1LCA2NCs0NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2LCA2NCs0NiwgNDcsIDY0KzQ3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTYsIDY0KzU2LCA1NywgNjQrNTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OCwgNjQrNTgsIDU5LCA2NCs1OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYwLCA2NCs2MCwgNjEsIDY0KzYxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjIsIDY0KzYyLCA2MywgNjQrNjMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdW5wYWNraGlfZXBpOChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzUxMigoX19tbWFzazY0KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSlfbW01MTJfdW5wYWNraGlfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel91bnBhY2toaV9lcGk4KF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl81MTIoKF9fbW1hc2s2NClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpX21tNTEyX3VucGFja2hpX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKV9tbTUxMl9zZXR6ZXJvX3FpKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VucGFja2hpX2VwaTE2KF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjMyaGkpX19BLCAoX192MzJoaSlfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAgMzIrNCwgICA1LCAzMis1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiwgIDMyKzYsICAgNywgMzIrNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyLCAzMisxMiwgMTMsIDMyKzEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQsIDMyKzE0LCAxNSwgMzIrMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCwgMzIrMjAsIDIxLCAzMisyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyLCAzMisyMiwgMjMsIDMyKzIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgsIDMyKzI4LCAyOSwgMzIrMjksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMCwgMzIrMzAsIDMxLCAzMiszMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza191bnBhY2toaV9lcGkxNihfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl91bnBhY2toaV9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2hpX2VwaTE2KF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfdW5wYWNraGlfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NldHplcm9faGkoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNrbG9fZXBpOChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y2NHFpKV9fQSwgKF9fdjY0cWkpX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgIDY0KzAsICAgMSwgNjQrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsICA2NCsyLCAgIDMsIDY0KzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAgNjQrNCwgICA1LCA2NCs1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiwgIDY0KzYsICAgNywgNjQrNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCA2NCsxNiwgMTcsIDY0KzE3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgsIDY0KzE4LCAxOSwgNjQrMTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCwgNjQrMjAsIDIxLCA2NCsyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyLCA2NCsyMiwgMjMsIDY0KzIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIsIDY0KzMyLCAzMywgNjQrMzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNCwgNjQrMzQsIDM1LCA2NCszNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2LCA2NCszNiwgMzcsIDY0KzM3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzgsIDY0KzM4LCAzOSwgNjQrMzksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OCwgNjQrNDgsIDQ5LCA2NCs0OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwLCA2NCs1MCwgNTEsIDY0KzUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTIsIDY0KzUyLCA1MywgNjQrNTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NCwgNjQrNTQsIDU1LCA2NCs1NSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza191bnBhY2tsb19lcGk4KF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfNTEyKChfX21tYXNrNjQpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKV9tbTUxMl91bnBhY2tsb19lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2xvX2VwaTgoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzUxMigoX19tbWFzazY0KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSlfbW01MTJfdW5wYWNrbG9fZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpX21tNTEyX3NldHplcm9fcWkoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNrbG9fZXBpMTYoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MzJoaSlfX0EsIChfX3YzMmhpKV9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAzMiswLCAgIDEsIDMyKzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAgMzIrMiwgICAzLCAzMiszLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgIDMyKzgsICAgOSwgMzIrOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLCAzMisxMCwgMTEsIDMyKzExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIDMyKzE2LCAxNywgMzIrMTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOCwgMzIrMTgsIDE5LCAzMisxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0LCAzMisyNCwgMjUsIDMyKzI1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYsIDMyKzI2LCAyNywgMzIrMjcpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdW5wYWNrbG9fZXBpMTYoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfdW5wYWNrbG9fZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel91bnBhY2tsb19lcGkxNihfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfNTEyKChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3VucGFja2xvX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9zZXR6ZXJvX2hpKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaThfZXBpMTYgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJ3NTEyX21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpOF9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJ3NTEyX21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaThfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJ3NTEyX21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwdThfZXBpMTYgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJ3NTEyX21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXB1OF9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJ3NTEyX21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwdThfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJ3NTEyX21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCisKKyNkZWZpbmUgX21tNTEyX2NtcF9lcGk4X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9lcGk4X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpKG0pKTsgfSkKKworI2RlZmluZSBfbW01MTJfY21wX2VwdThfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl91Y21wYjUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpKF9fbTUxMmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwdThfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl91Y21wYjUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpKF9fbTUxMmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkobSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jbXBfZXBpMTZfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXB3NTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwaTE2X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpKG0pKTsgfSkKKworI2RlZmluZSBfbW01MTJfY21wX2VwdTE2X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcHc1MTJfbWFzaygoX192MzJoaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9lcHUxNl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKShtKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3NodWZmbGVoaV9lcGkxNihBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MzJoaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3VuZGVmaW5lZF9lcGkzMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKGltbSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoaW1tKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgKyAoKChpbW0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCA5LCAxMCwgMTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKGltbSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoaW1tKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgKyAoKChpbW0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgMTcsIDE4LCAxOSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCArICgoKGltbSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwICsgKCgoaW1tKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgKyAoKChpbW0pID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCArICgoKGltbSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0LCAyNSwgMjYsIDI3LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4ICsgKCgoaW1tKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggKyAoKChpbW0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4ICsgKCgoaW1tKSA+PiA2KSAmIDB4MykpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NodWZmbGVoaV9lcGkxNihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMigoX19tbWFzazMyKShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2h1ZmZsZWhpX2VwaTE2KChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSkoX19tNTEyaSkoVykpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zaHVmZmxlaGlfZXBpMTYoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIoKF9fbW1hc2szMikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NodWZmbGVoaV9lcGkxNigoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NldHplcm9faGkoKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3NodWZmbGVsb19lcGkxNihBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MzJoaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3VuZGVmaW5lZF9lcGkzMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoaW1tKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChpbW0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCA1LCA2LCA3LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICsgKCgoaW1tKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggKyAoKChpbW0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiwgMTMsIDE0LCAxNSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiArICgoKGltbSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICsgKCgoaW1tKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgKyAoKChpbW0pID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiArICgoKGltbSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwLCAyMSwgMjIsIDIzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0ICsgKCgoaW1tKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgKyAoKChpbW0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0ICsgKCgoaW1tKSA+PiA2KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgsIDI5LCAzMCwgMzEpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc2h1ZmZsZWxvX2VwaTE2KFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfNTEyKChfX21tYXNrMzIpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9zaHVmZmxlbG9fZXBpMTYoKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShXKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2h1ZmZsZWxvX2VwaTE2KFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfNTEyKChfX21tYXNrMzIpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9zaHVmZmxlbG9fZXBpMTYoKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9zZXR6ZXJvX2hpKCkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NsbHZfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjMyaGlfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zbGx2X2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjMyaGlfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zbGx2X2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbHYzMmhpX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19oaSAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zbGxfZXBpMTYgKF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MzJoaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19oaSAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zbGxfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NsbF9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzbGx3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3YzMmhpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX3NsbGlfZXBpMTYoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzbGx3aTUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NldHplcm9faGkoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zbGxpX2VwaTE2KFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc2xsd2k1MTJfbWFzaygoX192MzJoaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NsbGlfZXBpMTYoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzbGx3aTUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NldHplcm9faGkoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2JzbGxpX2VwaTEyOChhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgKF9fdjY0cWkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAoX192NjRxaSkoX19tNTEyaSkoYSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICAwIDogKChjaGFyKShpbW0pPjB4MCA/IDE2IDogIDY0KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDEgOiAoKGNoYXIpKGltbSk+MHgxID8gMTcgOiAgNjUpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgMiA6ICgoY2hhcikoaW1tKT4weDIgPyAxOCA6ICA2NikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICAzIDogKChjaGFyKShpbW0pPjB4MyA/IDE5IDogIDY3KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDQgOiAoKGNoYXIpKGltbSk+MHg0ID8gMjAgOiAgNjgpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNSA6ICgoY2hhcikoaW1tKT4weDUgPyAyMSA6ICA2OSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA2IDogKChjaGFyKShpbW0pPjB4NiA/IDIyIDogIDcwKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDcgOiAoKGNoYXIpKGltbSk+MHg3ID8gMjMgOiAgNzEpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgOCA6ICgoY2hhcikoaW1tKT4weDggPyAyNCA6ICA3MikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA5IDogKChjaGFyKShpbW0pPjB4OSA/IDI1IDogIDczKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTAgOiAoKGNoYXIpKGltbSk+MHhBID8gMjYgOiAgNzQpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMSA6ICgoY2hhcikoaW1tKT4weEIgPyAyNyA6ICA3NSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEyIDogKChjaGFyKShpbW0pPjB4QyA/IDI4IDogIDc2KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTMgOiAoKGNoYXIpKGltbSk+MHhEID8gMjkgOiAgNzcpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxNCA6ICgoY2hhcikoaW1tKT4weEUgPyAzMCA6ICA3OCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE1IDogKChjaGFyKShpbW0pPjB4RiA/IDMxIDogIDc5KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTYgOiAoKGNoYXIpKGltbSk+MHgwID8gMzIgOiAgODApIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxNyA6ICgoY2hhcikoaW1tKT4weDEgPyAzMyA6ICA4MSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE4IDogKChjaGFyKShpbW0pPjB4MiA/IDM0IDogIDgyKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTkgOiAoKGNoYXIpKGltbSk+MHgzID8gMzUgOiAgODMpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyMCA6ICgoY2hhcikoaW1tKT4weDQgPyAzNiA6ICA4NCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDIxIDogKChjaGFyKShpbW0pPjB4NSA/IDM3IDogIDg1KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjIgOiAoKGNoYXIpKGltbSk+MHg2ID8gMzggOiAgODYpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyMyA6ICgoY2hhcikoaW1tKT4weDcgPyAzOSA6ICA4NykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI0IDogKChjaGFyKShpbW0pPjB4OCA/IDQwIDogIDg4KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjUgOiAoKGNoYXIpKGltbSk+MHg5ID8gNDEgOiAgODkpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyNiA6ICgoY2hhcikoaW1tKT4weEEgPyA0MiA6ICA5MCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI3IDogKChjaGFyKShpbW0pPjB4QiA/IDQzIDogIDkxKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjggOiAoKGNoYXIpKGltbSk+MHhDID8gNDQgOiAgOTIpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyOSA6ICgoY2hhcikoaW1tKT4weEQgPyA0NSA6ICA5MykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDMwIDogKChjaGFyKShpbW0pPjB4RSA/IDQ2IDogIDk0KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzEgOiAoKGNoYXIpKGltbSk+MHhGID8gNDcgOiAgOTUpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzMiA6ICgoY2hhcikoaW1tKT4weDAgPyA0OCA6ICA5NikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDMzIDogKChjaGFyKShpbW0pPjB4MSA/IDQ5IDogIDk3KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzQgOiAoKGNoYXIpKGltbSk+MHgyID8gNTAgOiAgOTgpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzNSA6ICgoY2hhcikoaW1tKT4weDMgPyA1MSA6ICA5OSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDM2IDogKChjaGFyKShpbW0pPjB4NCA/IDUyIDogMTAwKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzcgOiAoKGNoYXIpKGltbSk+MHg1ID8gNTMgOiAxMDEpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzOCA6ICgoY2hhcikoaW1tKT4weDYgPyA1NCA6IDEwMikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDM5IDogKChjaGFyKShpbW0pPjB4NyA/IDU1IDogMTAzKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDAgOiAoKGNoYXIpKGltbSk+MHg4ID8gNTYgOiAxMDQpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0MSA6ICgoY2hhcikoaW1tKT4weDkgPyA1NyA6IDEwNSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQyIDogKChjaGFyKShpbW0pPjB4QSA/IDU4IDogMTA2KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDMgOiAoKGNoYXIpKGltbSk+MHhCID8gNTkgOiAxMDcpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0NCA6ICgoY2hhcikoaW1tKT4weEMgPyA2MCA6IDEwOCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQ1IDogKChjaGFyKShpbW0pPjB4RCA/IDYxIDogMTA5KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDYgOiAoKGNoYXIpKGltbSk+MHhFID8gNjIgOiAxMTApIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0NyA6ICgoY2hhcikoaW1tKT4weEYgPyA2MyA6IDExMSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQ4IDogKChjaGFyKShpbW0pPjB4MCA/IDY0IDogMTEyKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDkgOiAoKGNoYXIpKGltbSk+MHgxID8gNjUgOiAxMTMpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1MCA6ICgoY2hhcikoaW1tKT4weDIgPyA2NiA6IDExNCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDUxIDogKChjaGFyKShpbW0pPjB4MyA/IDY3IDogMTE1KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTIgOiAoKGNoYXIpKGltbSk+MHg0ID8gNjggOiAxMTYpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1MyA6ICgoY2hhcikoaW1tKT4weDUgPyA2OSA6IDExNykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDU0IDogKChjaGFyKShpbW0pPjB4NiA/IDcwIDogMTE4KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTUgOiAoKGNoYXIpKGltbSk+MHg3ID8gNzEgOiAxMTkpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1NiA6ICgoY2hhcikoaW1tKT4weDggPyA3MiA6IDEyMCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDU3IDogKChjaGFyKShpbW0pPjB4OSA/IDczIDogMTIxKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTggOiAoKGNoYXIpKGltbSk+MHhBID8gNzQgOiAxMjIpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1OSA6ICgoY2hhcikoaW1tKT4weEIgPyA3NSA6IDEyMykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDYwIDogKChjaGFyKShpbW0pPjB4QyA/IDc2IDogMTI0KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNjEgOiAoKGNoYXIpKGltbSk+MHhEID8gNzcgOiAxMjUpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA2MiA6ICgoY2hhcikoaW1tKT4weEUgPyA3OCA6IDEyNikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDYzIDogKChjaGFyKShpbW0pPjB4RiA/IDc5IDogMTI3KSAtIChjaGFyKShpbW0pKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcmx2X2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHYzMmhpX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19oaSAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3Jsdl9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHYzMmhpX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3Jsdl9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2MzJoaV9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3Jhdl9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2MzJoaV9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NyYXZfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2MzJoaV9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NyYXZfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JhdjMyaGlfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NyYV9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3JhX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NyYV9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3YzMmhpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworI2RlZmluZSBfbW01MTJfc3JhaV9lcGkxNihBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNyYXdpNTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NyYWlfZXBpMTYoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzcmF3aTUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc3JhaV9lcGkxNihVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNyYXdpNTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpKFUpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NybF9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3YzMmhpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NybF9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JsdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3JsX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworI2RlZmluZSBfbW01MTJfc3JsaV9lcGkxNihBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3Jsd2k1MTJfbWFzaygoX192MzJoaSkoX19tNTEyaSkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NldHplcm9faGkoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zcmxpX2VwaTE2KFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3Bzcmx3aTUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zcmxpX2VwaTE2KFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3Bzcmx3aTUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfYnNybGlfZXBpMTI4KGEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChfX3Y2NHFpKShfX201MTJpKShhKSwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKF9fdjY0cWkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgICAgICAgICAgICBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNjQgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEYgPyAgNDggOiAwKSwgIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA2NSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RSA/ICA0OSA6IDEpLCAgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDY2IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhEID8gIDUwIDogMiksICBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNjcgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEMgPyAgNTEgOiAzKSwgIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA2OCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QiA/ICA1MiA6IDQpLCAgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDY5IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhBID8gIDUzIDogNSksICBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNzAgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDkgPyAgNTQgOiA2KSwgIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA3MSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4OCA/ICA1NSA6IDcpLCAgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDcyIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg3ID8gIDU2IDogOCksICBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNzMgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDYgPyAgNTcgOiA5KSwgIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA3NCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NSA/ICA1OCA6IDEwKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDc1IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg0ID8gIDU5IDogMTEpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNzYgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDMgPyAgNjAgOiAxMiksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA3NyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MiA/ICA2MSA6IDEzKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDc4IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgxID8gIDYyIDogMTQpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNzkgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDAgPyAgNjMgOiAxNSksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA4MCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RiA/ICA2NCA6IDE2KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDgxIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhFID8gIDY1IDogMTcpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgODIgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEQgPyAgNjYgOiAxOCksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA4MyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QyA/ICA2NyA6IDE5KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDg0IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhCID8gIDY4IDogMjApLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgODUgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEEgPyAgNjkgOiAyMSksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA4NiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4OSA/ICA3MCA6IDIyKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDg3IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg4ID8gIDcxIDogMjMpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgODggOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDcgPyAgNzIgOiAyNCksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA4OSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NiA/ICA3MyA6IDI1KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDkwIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg1ID8gIDc0IDogMjYpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgOTEgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDQgPyAgNzUgOiAyNyksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA5MiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MyA/ICA3NiA6IDI4KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDkzIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgyID8gIDc3IDogMjkpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgOTQgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDEgPyAgNzggOiAzMCksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA5NSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MCA/ICA3OSA6IDMxKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDk2IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhGID8gIDgwIDogMzIpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgOTcgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEUgPyAgODEgOiAzMyksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA5OCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RCA/ICA4MiA6IDM0KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDk5IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhDID8gIDgzIDogMzUpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMDAgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEIgPyAgODQgOiAzNiksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEwMSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QSA/ICA4NSA6IDM3KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTAyIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg5ID8gIDg2IDogMzgpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMDMgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDggPyAgODcgOiAzOSksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEwNCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NyA/ICA4OCA6IDQwKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTA1IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg2ID8gIDg5IDogNDEpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMDYgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDUgPyAgOTAgOiA0MiksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEwNyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NCA/ICA5MSA6IDQzKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTA4IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgzID8gIDkyIDogNDQpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMDkgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDIgPyAgOTMgOiA0NSksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDExMCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MSA/ICA5NCA6IDQ2KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTExIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgwID8gIDk1IDogNDcpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMTIgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEYgPyAgOTYgOiA0OCksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDExMyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RSA/ICA5NyA6IDQ5KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTE0IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhEID8gIDk4IDogNTApLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMTUgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEMgPyAgOTkgOiA1MSksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDExNiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QiA/IDEwMCA6IDUyKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTE3IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhBID8gMTAxIDogNTMpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMTggOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDkgPyAxMDIgOiA1NCksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDExOSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4OCA/IDEwMyA6IDU1KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTIwIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg3ID8gMTA0IDogNTYpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMjEgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDYgPyAxMDUgOiA1NyksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEyMiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NSA/IDEwNiA6IDU4KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTIzIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg0ID8gMTA3IDogNTkpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMjQgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDMgPyAxMDggOiA2MCksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEyNSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MiA/IDEwOSA6IDYxKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTI2IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgxID8gMTEwIDogNjIpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMjcgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDAgPyAxMTEgOiA2MykpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbW92X2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIgKChfX21tYXNrMzIpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21vdl9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIgKChfX21tYXNrMzIpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tb3ZfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfNTEyICgoX19tbWFzazY0KSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NjRxaSkgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tb3ZfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0Yl81MTIgKChfX21tYXNrNjQpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19oaSAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zZXQxX2VwaTggKF9fbTUxMmkgX19PLCBfX21tYXNrNjQgX19NLCBjaGFyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0YjUxMl9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19PLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NldDFfZXBpOCAoX19tbWFzazY0IF9fTSwgY2hhciBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdGI1MTJfZ3ByX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9rdW5wYWNrZCAoX19tbWFzazY0IF9fQSwgX19tbWFzazY0IF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrNjQpIF9fYnVpbHRpbl9pYTMyX2t1bnBja2RpICgoX19tbWFzazY0KSBfX0EsCisgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2t1bnBhY2t3IChfX21tYXNrMzIgX19BLCBfX21tYXNrMzIgX19CKQoreworICByZXR1cm4gKF9fbW1hc2szMikgX19idWlsdGluX2lhMzJfa3VucGNrc2kgKChfX21tYXNrMzIpIF9fQSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbG9hZHVfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfbG9hZGRxdWhpNTEyX21hc2sgKChfX3YzMmhpICopIF9fUCwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9sb2FkdV9lcGkxNiAoX19tbWFzazMyIF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVoaTUxMl9tYXNrICgoX192MzJoaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKQorICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19oaSAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2xvYWR1X2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfbG9hZGRxdXFpNTEyX21hc2sgKChfX3Y2NHFpICopIF9fUCwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9sb2FkdV9lcGk4IChfX21tYXNrNjQgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfbG9hZGRxdXFpNTEyX21hc2sgKChfX3Y2NHFpICopIF9fUCwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N0b3JldV9lcGkxNiAodm9pZCAqX19QLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVoaTUxMl9tYXNrICgoX192MzJoaSAqKSBfX1AsCisgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3RvcmV1X2VwaTggKHZvaWQgKl9fUCwgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1cWk1MTJfbWFzayAoKF9fdjY0cWkgKikgX19QLAorICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Rlc3RfZXBpOF9tYXNrIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazY0KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1iNTEyICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdGVzdF9lcGk4X21hc2sgKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrNjQpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWI1MTIgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAoX192NjRxaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdGVzdF9lcGkxNl9tYXNrIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazMyKSBfX2J1aWx0aW5faWEzMl9wdGVzdG13NTEyICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdGVzdF9lcGkxNl9tYXNrIChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazMyKSBfX2J1aWx0aW5faWEzMl9wdGVzdG13NTEyICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Rlc3RuX2VwaThfbWFzayAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s2NCkgX19idWlsdGluX2lhMzJfcHRlc3RubWI1MTIgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Rlc3RuX2VwaThfbWFzayAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s2NCkgX19idWlsdGluX2lhMzJfcHRlc3RubWI1MTIgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Rlc3RuX2VwaTE2X21hc2sgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMzIpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm13NTEyICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza190ZXN0bl9lcGkxNl9tYXNrIChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazMyKSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tdzUxMiAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MzJoaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbW92ZXBpOF9tYXNrIChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX21tYXNrNjQpIF9fYnVpbHRpbl9pYTMyX2N2dGIybWFzazUxMiAoKF9fdjY0cWkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tb3ZlcGkxNl9tYXNrIChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX21tYXNrMzIpIF9fYnVpbHRpbl9pYTMyX2N2dHcybWFzazUxMiAoKF9fdjMyaGkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbW92bV9lcGk4IChfX21tYXNrNjQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dG1hc2syYjUxMiAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tb3ZtX2VwaTE2IChfX21tYXNrMzIgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dG1hc2sydzUxMiAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RiX2VwaTggKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYnJvYWRjYXN0Yl9lcGk4IChfX201MTJpIF9fTywgX19tbWFzazY0IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzUxMihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX2Jyb2FkY2FzdGJfZXBpOChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fTyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYnJvYWRjYXN0Yl9lcGk4IChfX21tYXNrNjQgX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfNTEyKF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfYnJvYWRjYXN0Yl9lcGk4KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zZXQxX2VwaTE2IChfX201MTJpIF9fTywgX19tbWFzazMyIF9fTSwgc2hvcnQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3R3NTEyX2dwcl9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc2V0MV9lcGkxNiAoX19tbWFzazMyIF9fTSwgc2hvcnQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3R3NTEyX2dwcl9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Jyb2FkY2FzdHdfZXBpMTYgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3R3X2VwaTE2IChfX201MTJpIF9fTywgX19tbWFzazMyIF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX2Jyb2FkY2FzdHdfZXBpMTYoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX08pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Jyb2FkY2FzdHdfZXBpMTYgKF9fbW1hc2szMiBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9icm9hZGNhc3R3X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXh2YXJfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyaGk1MTJfbWFzayAoKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl91bmRlZmluZWRfZXBpMzIgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wZXJtdXRleHZhcl9lcGkxNiAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJoaTUxMl9tYXNrICgoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Blcm11dGV4dmFyX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGVybXZhcmhpNTEyX21hc2sgKChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX2FsaWducl9lcGk4KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BhbGlnbnI1MTJfbWFzaygoX192NjRxaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKShfX201MTJpKShCKSwgKGludCkoTiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKV9tbTUxMl91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfYWxpZ25yX2VwaTgoVywgVSwgQSwgQiwgTikgX19leHRlbnNpb25fXyh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wYWxpZ25yNTEyX21hc2soKF9fdjY0cWkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoQiksIChpbnQpKE4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfYWxpZ25yX2VwaTgoVSwgQSwgQiwgTikgX19leHRlbnNpb25fXyh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wYWxpZ25yNTEyX21hc2soKF9fdjY0cWkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoQiksIChpbnQpKE4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2Ric2FkX2VwdTgoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9kYnBzYWRidzUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKShfX201MTJpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl91bmRlZmluZWRfZXBpMzIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2Ric2FkX2VwdTgoVywgVSwgQSwgQiwgaW1tKSAoe1wKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfZGJwc2FkYnc1MTJfbWFzaygoX192NjRxaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2Ric2FkX2VwdTgoVSwgQSwgQiwgaW1tKSAoe1wKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfZGJwc2FkYnc1MTJfbWFzaygoX192NjRxaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikoVSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NhZF9lcHU4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2FkYnc1MTIgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192NjRxaSkgX19CKTsKK30KKworCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmNkaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmNkaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjNDIzNQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyY2RpbnRyaW4uaApAQCAtMCwwICsxLDE0NCBAQAorLyo9PT0tLS0tLS0tLS0tLS0tIGF2eDUxMmNkaW50cmluLmggLSBBVlg1MTJDRCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJjZGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJDRElOVFJJTl9ICisjZGVmaW5lIF9fQVZYNTEyQ0RJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMmNkIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NvbmZsaWN0X2VwaTY0IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0ZGlfNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY29uZmxpY3RfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RkaV81MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2NvbmZsaWN0X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RkaV81MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NvbmZsaWN0X2VwaTMyIChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0c2lfNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY29uZmxpY3RfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0c2lfNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jb25mbGljdF9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdHNpXzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbHpjbnRfZXBpMzIgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRkXzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19semNudF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRkXzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2x6Y250X2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250ZF81MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9semNudF9lcGk2NCAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBsemNudHFfNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2x6Y250X2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250cV81MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9semNudF9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250cV81MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RtYl9lcGk2NCAoX19tbWFzazggX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdG1iNTEyIChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Jyb2FkY2FzdG13X2VwaTMyIChfX21tYXNrMTYgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdG13NTEyIChfX0EpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJkcWludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJkcWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNjY1ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmRxaW50cmluLmgKQEAgLTAsMCArMSwxMzMxIEBACisvKj09PS0tLS0gYXZ4NTEyZHFpbnRyaW4uaCAtIEFWWDUxMkRRIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJkcWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJEUUlOVFJJTl9ICisjZGVmaW5lIF9fQVZYNTEyRFFJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMmRxIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX211bGxvX2VwaTY0IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjhkdSkgX19BICogKF9fdjhkdSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX211bGxvX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bGxvX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxscTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl94b3JfcGQgKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpICgoX192OGR1KSBfX0EgXiAoX192OGR1KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfeG9yX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl94b3JwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfeG9yX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3hvcnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl94b3JfcHMgKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpICgoX192MTZzdSkgX19BIF4gKF9fdjE2c3UpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3hvcl9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfeG9ycHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3hvcl9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfeG9ycHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9vcl9wZCAoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgKChfX3Y4ZHUpIF9fQSB8IChfX3Y4ZHUpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19vcl9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfb3JwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfb3JfcGQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfb3JwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9vcl9wcyAoX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgKChfX3YxNnN1KSBfX0EgfCAoX192MTZzdSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfb3JfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX29ycHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X29yX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9vcnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hbmRfcGQgKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpICgoX192OGR1KSBfX0EgJiAoX192OGR1KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYW5kX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9hbmRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2FuZHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hbmRfcHMgKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpICgoX192MTZzdSkgX19BICYgKF9fdjE2c3UpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FuZF9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYW5kcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FuZF9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYW5kcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hbmRub3RfcGQgKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2FuZG5wZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYW5kbm90X3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9hbmRucGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FuZG5vdF9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9hbmRucGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hbmRub3RfcHMgKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2FuZG5wczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hbmRub3RfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2FuZG5wczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kbm90X3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9hbmRucHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cGRfZXBpNjQgKF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0cGRfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHBkX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcGRfZXBpNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcGRfZXBpNjQoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcGRfZXBpNjQoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyAgIFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cGQycXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRwZF9lcHU2NCAoX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0cGRfZXB1NjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRwZF9lcHU2NCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwZF9lcHU2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcGRfZXB1NjQoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcGRfZXB1NjQoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHBzX2VwaTY0IChfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0cHNfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cHNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBzX2VwaTY0KEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwczJxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwc19lcGk2NChXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMycXE1MTJfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBzX2VwaTY0KFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxNTEyX21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRwc19lcHU2NCAoX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwc19lcHU2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cHNfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwc19lcHU2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZHBzX2VwdTY0KFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXE1MTJfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcHNfZXB1NjQoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyAgIFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMydXFxNTEyX21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpNjRfcGQgKF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpNjRfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kZXBpNjRfcGQoQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2N2dHFxMnBkNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRlcGk2NF9wZChXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRlcGk2NF9wZChVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaTY0X3BzIChfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGk2NF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXBpNjRfcHMgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZGVwaTY0X3BzKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgIFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9jdnRxcTJwczUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZGVwaTY0X3BzKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kZXBpNjRfcHMoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfY3Z0cXEycHM1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cGRfZXBpNjQgKF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwZF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHRwZF9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnR0X3JvdW5kcGRfZXBpNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnR0X3JvdW5kcGRfZXBpNjQoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0dF9yb3VuZHBkX2VwaTY0KFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnR0cGQycXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHRwZF9lcHU2NCAoX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwZF9lcHU2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnR0cGRfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dHRfcm91bmRwZF9lcHU2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnR0X3JvdW5kcGRfZXB1NjQoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0dF9yb3VuZHBkX2VwdTY0KFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0dHBzX2VwaTY0IChfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwc19lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0dHBzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0dF9yb3VuZHBzX2VwaTY0KEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dHRfcm91bmRwc19lcGk2NChXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxNTEyX21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dHRfcm91bmRwc19lcGk2NChVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7ICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cHNfZXB1NjQgKF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwc19lcHU2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHRwc19lcHU2NCAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnR0X3JvdW5kcHNfZXB1NjQoQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgIFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0dF9yb3VuZHBzX2VwdTY0KFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxNTEyX21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0dF9yb3VuZHBzX2VwdTY0KFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgIFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwdTY0X3BkIChfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHU2NF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwdTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZGVwdTY0X3BkKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQ1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kZXB1NjRfcGQoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwZDUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRlcHU2NF9wZChVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXB1NjRfcHMgKF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHU2NF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwdTY0X3BzIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kZXB1NjRfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgIFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9jdnR1cXEycHM1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZGVwdTY0X3BzKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kZXB1NjRfcHMoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JhbmdlX3BkKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JhbmdlcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yYW5nZV9wZChXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yYW5nZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JhbmdlX3BkKFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgIFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcmFuZ2VwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfcmFuZ2Vfcm91bmRfcGQoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yYW5nZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yYW5nZV9yb3VuZF9wZChXLCBVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcmFuZ2VwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JhbmdlX3JvdW5kX3BkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yYW5nZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JhbmdlX3BzKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yYW5nZXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JhbmdlX3BzKFcsIFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmFuZ2VwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShXKSwgKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmFuZ2VfcHMoVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyAgICAgIFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yYW5nZXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfcmFuZ2Vfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgIFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yYW5nZXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JhbmdlX3JvdW5kX3BzKFcsIFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JhbmdlcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmFuZ2Vfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmFuZ2VwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX3JhbmdlX3JvdW5kX3NzKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yYW5nZXNzMTI4X3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLCAoaW50KShDKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fcmFuZ2Vfc3MoQSAsQiAsIEMpIF9tbV9yYW5nZV9yb3VuZF9zcyhBLCBCLCBDICxfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2tfcmFuZ2Vfcm91bmRfc3MoVywgVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmFuZ2VzczEyOF9yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoQyksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmFuZ2Vfc3MoVyAsIFUsIEEsIEIsIEMpIF9tbV9tYXNrX3JhbmdlX3JvdW5kX3NzKFcsIFUsIEEsIEIsIEMgLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2t6X3JhbmdlX3JvdW5kX3NzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Jhbmdlc3MxMjhfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKEMpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yYW5nZV9zcyhVLCBBICxCICwgQykgX21tX21hc2t6X3JhbmdlX3JvdW5kX3NzKFUsIEEsIEIsIEMgLF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fcmFuZ2Vfcm91bmRfc2QoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yYW5nZXNkMTI4X3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsIChpbnQpKEMpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fcmFuZ2Vfc2QoQSAsQiAsIEMpIF9tbV9yYW5nZV9yb3VuZF9zZChBLCBCLCBDICxfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2tfcmFuZ2Vfcm91bmRfc2QoVywgVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Jhbmdlc2QxMjhfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKEMpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yYW5nZV9zZChXLCBVLCBBLCBCLCBDKSBfbW1fbWFza19yYW5nZV9yb3VuZF9zZChXLCBVLCBBLCBCLCBDICxfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2t6X3JhbmdlX3JvdW5kX3NkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yYW5nZXNkMTI4X3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKEMpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmFuZ2Vfc2QoVSwgQSwgQiwgQykgX21tX21hc2t6X3JhbmdlX3JvdW5kX3NkKFUsIEEsIEIsIEMgLF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfcmVkdWNlX3BkKEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX3BkKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JlZHVjZV9wZChVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7ICBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JlZHVjZV9wcyhBLCBCKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmVkdWNlcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX3BzKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmVkdWNlcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmVkdWNlX3BzKFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfcmVkdWNlX3JvdW5kX3BkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX3JvdW5kX3BkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JlZHVjZV9yb3VuZF9wZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcmVkdWNlX3JvdW5kX3BzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmVkdWNlcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yZWR1Y2Vfcm91bmRfcHMoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JlZHVjZV9yb3VuZF9wcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9yZWR1Y2Vfc3MoQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JlZHVjZXNzX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKEMpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JlZHVjZV9zcyhXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JlZHVjZXNzX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoQyksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JlZHVjZV9zcyhVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yZWR1Y2Vzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX3JlZHVjZV9yb3VuZF9zcyhBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmVkdWNlc3NfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoQyksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yZWR1Y2Vfcm91bmRfc3MoVywgVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yZWR1Y2Vzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKEMpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JlZHVjZV9yb3VuZF9zcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yZWR1Y2Vzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoQyksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fcmVkdWNlX3NkKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgIFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcmVkdWNlc2RfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmVkdWNlX3NkKFcsIFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXNkX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoQyksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JlZHVjZV9zZChVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcmVkdWNlc2RfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9yZWR1Y2Vfcm91bmRfc2QoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VzZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKEMpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmVkdWNlX3JvdW5kX3NkKFcsIFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXNkX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoQyksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmVkdWNlX3JvdW5kX3NkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VzZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShDKSwgKGludCkoUikpOyB9KQorICAgICAgICAgICAgICAgICAgICAgCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbW92ZXBpMzJfbWFzayAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9jdnRkMm1hc2s1MTIgKChfX3YxNnNpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21vdm1fZXBpMzIgKF9fbW1hc2sxNiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0bWFzazJkNTEyIChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21vdm1fZXBpNjQgKF9fbW1hc2s4IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRtYXNrMnE1MTIgKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21vdmVwaTY0X21hc2sgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9jdnRxMm1hc2s1MTIgKChfX3Y4ZGkpIF9fQSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Jyb2FkY2FzdF9mMzJ4MiAoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGYzMngyXzUxMl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VuZGVmaW5lZF9wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYnJvYWRjYXN0X2YzMngyIChfX201MTIgX19PLCBfX21tYXNrMTYgX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjMyeDJfNTEyX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfZjMyeDIgKF9fbW1hc2sxNiBfX00sIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmMzJ4Ml81MTJfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RfZjMyeDggKF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmMzJ4OF81MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIF9tbTUxMl91bmRlZmluZWRfcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Jyb2FkY2FzdF9mMzJ4OCAoX19tNTEyIF9fTywgX19tbWFzazE2IF9fTSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGYzMng4XzUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfZjMyeDggKF9fbW1hc2sxNiBfX00sIF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmMzJ4OF81MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYnJvYWRjYXN0X2Y2NHgyIChfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmNjR4Ml81MTJfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bmRlZmluZWRfcGQoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3RfZjY0eDIgKF9fbTUxMmQgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGY2NHgyXzUxMl9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfZjY0eDIgKF9fbW1hc2s4IF9fTSwgX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjY0eDJfNTEyX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RfaTMyeDIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMngyXzUxMl9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Jyb2FkY2FzdF9pMzJ4MiAoX19tNTEyaSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMngyXzUxMl9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYnJvYWRjYXN0X2kzMngyIChfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpMzJ4Ml81MTJfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RfaTMyeDggKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMng4XzUxMl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Jyb2FkY2FzdF9pMzJ4OCAoX19tNTEyaSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMng4XzUxMl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9fTywKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfaTMyeDggKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMng4XzUxMl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RfaTY0eDIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGk2NHgyXzUxMl9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3RfaTY0eDIgKF9fbTUxMmkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGk2NHgyXzUxMl9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfaTY0eDIgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTY0eDJfNTEyX21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworI2RlZmluZSBfbW01MTJfZXh0cmFjdGYzMng4X3BzKEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfZXh0cmFjdGYzMng4X21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4dHJhY3RmMzJ4OF9wcyhXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RmMzJ4OF9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9leHRyYWN0ZjMyeDhfcHMoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9leHRyYWN0ZjMyeDhfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9leHRyYWN0ZjY0eDJfcGQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZXh0cmFjdGY2NHgyXzUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZXh0cmFjdGY2NHgyX3BkKFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RmNjR4Ml81MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9leHRyYWN0ZjY0eDJfcGQoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZXh0cmFjdGY2NHgyXzUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9leHRyYWN0aTMyeDhfZXBpMzIoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfZXh0cmFjdGkzMng4X21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4dHJhY3RpMzJ4OF9lcGkzMihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9leHRyYWN0aTMyeDhfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2V4dHJhY3RpMzJ4OF9lcGkzMihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9leHRyYWN0aTMyeDhfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9leHRyYWN0aTY0eDJfZXBpNjQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZXh0cmFjdGk2NHgyXzUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX2RpKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZXh0cmFjdGk2NHgyX2VwaTY0KFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RpNjR4Ml81MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9leHRyYWN0aTY0eDJfZXBpNjQoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZXh0cmFjdGk2NHgyXzUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX2RpKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pbnNlcnRmMzJ4OChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2luc2VydGYzMng4X21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2luc2VydGYzMng4KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfaW5zZXJ0ZjMyeDhfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfaW5zZXJ0ZjMyeDgoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9pbnNlcnRmMzJ4OF9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2luc2VydGY2NHgyKEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2luc2VydGY2NHgyXzUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaW5zZXJ0ZjY0eDIoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfaW5zZXJ0ZjY0eDJfNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfaW5zZXJ0ZjY0eDIoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfaW5zZXJ0ZjY0eDJfNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2luc2VydGkzMng4KEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2luc2VydGkzMng4X21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaW5zZXJ0aTMyeDgoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfaW5zZXJ0aTMyeDhfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfaW5zZXJ0aTMyeDgoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfaW5zZXJ0aTMyeDhfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2luc2VydGk2NHgyKEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2luc2VydGk2NHgyXzUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaW5zZXJ0aTY0eDIoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfaW5zZXJ0aTY0eDJfNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfaW5zZXJ0aTY0eDIoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfaW5zZXJ0aTY0eDJfNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZnBjbGFzc19wc19tYXNrKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfZnBjbGFzc3BzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2ZwY2xhc3NfcHNfbWFzayhBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2ZwY2xhc3NwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZnBjbGFzc19wZF9tYXNrKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9mcGNsYXNzcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2ZwY2xhc3NfcGRfbWFzayhBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfZnBjbGFzc3BkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX2ZwY2xhc3Nfc2RfbWFzayhBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfZnBjbGFzc3NkX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZnBjbGFzc19zZF9tYXNrKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9mcGNsYXNzc2RfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX2ZwY2xhc3Nfc3NfbWFzayhBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfZnBjbGFzc3NzX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19mcGNsYXNzX3NzX21hc2soVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2ZwY2xhc3Nzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJlcmludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJlcmludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZjIxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmVyaW50cmluLmgKQEAgLTAsMCArMSwyODUgQEAKKy8qPT09LS0tLSBhdng1MTJlcmludHJpbi5oIC0gQVZYNTEyRVIgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJlcmludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJFUklOVFJJTl9ICisjZGVmaW5lIF9fQVZYNTEyRVJJTlRSSU5fSAorCisvLyBleHAyYTIzCisjZGVmaW5lIF9tbTUxMl9leHAyYTIzX3JvdW5kX3BkKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9leHAycGRfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZXhwMmEyM19yb3VuZF9wZChTLCBNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZXhwMnBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoUyksIChfX21tYXNrOCkoTSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9leHAyYTIzX3JvdW5kX3BkKE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9leHAycGRfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9leHAyYTIzX3BkKEEpIFwKKyAgX21tNTEyX2V4cDJhMjNfcm91bmRfcGQoKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZXhwMmEyM19wZChTLCBNLCBBKSBcCisgIF9tbTUxMl9tYXNrX2V4cDJhMjNfcm91bmRfcGQoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9leHAyYTIzX3BkKE0sIEEpIFwKKyAgX21tNTEyX21hc2t6X2V4cDJhMjNfcm91bmRfcGQoKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfZXhwMmEyM19yb3VuZF9wcyhBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9leHAycHNfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZXhwMmEyM19yb3VuZF9wcyhTLCBNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9leHAycHNfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFMpLCAoX19tbWFzazE2KShNKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZXhwMmEyM19yb3VuZF9wcyhNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9leHAycHNfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9leHAyYTIzX3BzKEEpIFwKKyAgX21tNTEyX2V4cDJhMjNfcm91bmRfcHMoKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZXhwMmEyM19wcyhTLCBNLCBBKSBcCisgIF9tbTUxMl9tYXNrX2V4cDJhMjNfcm91bmRfcHMoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9leHAyYTIzX3BzKE0sIEEpIFwKKyAgX21tNTEyX21hc2t6X2V4cDJhMjNfcm91bmRfcHMoKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworLy8gcnNxcnQyOAorI2RlZmluZSBfbW01MTJfcnNxcnQyOF9yb3VuZF9wZChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcnNxcnQyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JzcXJ0Mjhfcm91bmRfcGQoUywgTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JzcXJ0MjhwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFMpLCAoX19tbWFzazgpKE0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcnNxcnQyOF9yb3VuZF9wZChNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcnNxcnQyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcnNxcnQyOF9wZChBKSBcCisgIF9tbTUxMl9yc3FydDI4X3JvdW5kX3BkKChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JzcXJ0MjhfcGQoUywgTSwgQSkgXAorICBfbW01MTJfbWFza19yc3FydDI4X3JvdW5kX3BkKChTKSwgKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza3pfcnNxcnQyOF9wZChNLCBBKSBcCisgIF9tbTUxMl9tYXNrel9yc3FydDI4X3JvdW5kX3BkKChNKSwgKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX3JzcXJ0Mjhfcm91bmRfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcnNxcnQyOHBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JzcXJ0Mjhfcm91bmRfcHMoUywgTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcnNxcnQyOHBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShTKSwgKF9fbW1hc2sxNikoTSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JzcXJ0Mjhfcm91bmRfcHMoTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcnNxcnQyOHBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoTSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcnNxcnQyOF9wcyhBKSBcCisgIF9tbTUxMl9yc3FydDI4X3JvdW5kX3BzKChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JzcXJ0MjhfcHMoUywgTSwgQSkgXAorICBfbW01MTJfbWFza19yc3FydDI4X3JvdW5kX3BzKChTKSwgKE0pLCBBLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JzcXJ0MjhfcHMoTSwgQSkgXAorICBfbW01MTJfbWFza3pfcnNxcnQyOF9yb3VuZF9wcygoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9yc3FydDI4X3JvdW5kX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JzcXJ0Mjhzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcnNxcnQyOF9yb3VuZF9zcyhTLCBNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yc3FydDI4c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoUyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JzcXJ0Mjhfcm91bmRfc3MoTSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcnNxcnQyOHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX3JzcXJ0Mjhfc3MoQSwgQikgXAorICBfbW1fcnNxcnQyOF9yb3VuZF9zcygoQSksIChCKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9tYXNrX3JzcXJ0Mjhfc3MoUywgTSwgQSwgQikgXAorICBfbW1fbWFza19yc3FydDI4X3JvdW5kX3NzKChTKSwgKE0pLCAoQSksIChCKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9tYXNrel9yc3FydDI4X3NzKE0sIEEsIEIpIFwKKyAgX21tX21hc2t6X3JzcXJ0Mjhfcm91bmRfc3MoKE0pLCAoQSksIChCKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9yc3FydDI4X3JvdW5kX3NkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yc3FydDI4c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcnNxcnQyOF9yb3VuZF9zZChTLCBNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcnNxcnQyOHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoUyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yc3FydDI4X3JvdW5kX3NkKE0sIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yc3FydDI4c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9yc3FydDI4X3NkKEEsIEIpIFwKKyAgX21tX3JzcXJ0Mjhfcm91bmRfc2QoKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fbWFza19yc3FydDI4X3NkKFMsIE0sIEEsIEIpIFwKKyAgX21tX21hc2tfcnNxcnQyOF9yb3VuZF9zZCgoUyksIChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fbWFza3pfcnNxcnQyOF9zZChNLCBBLCBCKSBcCisgIF9tbV9tYXNrel9yc3FydDI4X3JvdW5kX3NkKChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworLy8gcmNwMjgKKyNkZWZpbmUgX21tNTEyX3JjcDI4X3JvdW5kX3BkKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yY3AyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmNwMjhfcm91bmRfcGQoUywgTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JjcDI4cGRfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoUyksIChfX21tYXNrOCkoTSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmNwMjhfcm91bmRfcGQoTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JjcDI4cGRfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JjcDI4X3BkKEEpIFwKKyAgX21tNTEyX3JjcDI4X3JvdW5kX3BkKChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3BkKFMsIE0sIEEpIFwKKyAgX21tNTEyX21hc2tfcmNwMjhfcm91bmRfcGQoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yY3AyOF9wZChNLCBBKSBcCisgIF9tbTUxMl9tYXNrel9yY3AyOF9yb3VuZF9wZCgoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9yY3AyOF9yb3VuZF9wcyhBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yY3AyOHBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmNwMjhfcm91bmRfcHMoUywgTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmNwMjhwc19tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFMpLCAoX19tbWFzazE2KShNKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JjcDI4X3JvdW5kX3BzKE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JjcDI4cHNfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKE0pLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JjcDI4X3BzKEEpIFwKKyAgX21tNTEyX3JjcDI4X3JvdW5kX3BzKChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3BzKFMsIE0sIEEpIFwKKyAgX21tNTEyX21hc2tfcmNwMjhfcm91bmRfcHMoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yY3AyOF9wcyhNLCBBKSBcCisgIF9tbTUxMl9tYXNrel9yY3AyOF9yb3VuZF9wcygoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9yY3AyOF9yb3VuZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yY3AyOHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yY3AyOF9yb3VuZF9zcyhTLCBNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yY3AyOHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoUyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yY3AyOF9yb3VuZF9zcyhNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yY3AyOHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX3JjcDI4X3NzKEEsIEIpIFwKKyAgX21tX3JjcDI4X3JvdW5kX3NzKChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2tfcmNwMjhfc3MoUywgTSwgQSwgQikgXAorICBfbW1fbWFza19yY3AyOF9yb3VuZF9zcygoUyksIChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fbWFza3pfcmNwMjhfc3MoTSwgQSwgQikgXAorICBfbW1fbWFza3pfcmNwMjhfcm91bmRfc3MoKE0pLCAoQSksIChCKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9yY3AyOF9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcmNwMjhzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yY3AyOF9yb3VuZF9zZChTLCBNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcmNwMjhzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoUyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmNwMjhfcm91bmRfc2QoTSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JjcDI4c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9yY3AyOF9zZChBLCBCKSBcCisgIF9tbV9yY3AyOF9yb3VuZF9zZCgoQSksIChCKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9tYXNrX3JjcDI4X3NkKFMsIE0sIEEsIEIpIFwKKyAgX21tX21hc2tfcmNwMjhfcm91bmRfc2QoKFMpLCAoTSksIChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2t6X3JjcDI4X3NkKE0sIEEsIEIpIFwKKyAgX21tX21hc2t6X3JjcDI4X3JvdW5kX3NkKChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2VuZGlmIC8vIF9fQVZYNTEyRVJJTlRSSU5fSApkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJmaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmZpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWRjNDM2Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJmaW50cmluLmgKQEAgLTAsMCArMSw5NTQzIEBACisvKj09PS0tLS0gYXZ4NTEyZmludHJpbi5oIC0gQVZYNTEyRiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEyZmludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJGSU5UUklOX0gKKyNkZWZpbmUgX19BVlg1MTJGSU5UUklOX0gKKwordHlwZWRlZiBjaGFyIF9fdjY0cWkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwordHlwZWRlZiBzaG9ydCBfX3YzMmhpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKK3R5cGVkZWYgZG91YmxlIF9fdjhkZiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7Cit0eXBlZGVmIGZsb2F0IF9fdjE2c2YgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwordHlwZWRlZiBsb25nIGxvbmcgX192OGRpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKK3R5cGVkZWYgaW50IF9fdjE2c2kgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOworCisvKiBVbnNpZ25lZCB0eXBlcyAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdjY0cXUgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3YzMmh1IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdjhkdSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3YxNnN1IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKKwordHlwZWRlZiBmbG9hdCBfX201MTIgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwordHlwZWRlZiBkb3VibGUgX19tNTEyZCBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZyBfX201MTJpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fbW1hc2s4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX21tYXNrMTY7CisKKy8qIFJvdW5kaW5nIG1vZGUgbWFjcm9zLiAgKi8KKyNkZWZpbmUgX01NX0ZST1VORF9UT19ORUFSRVNUX0lOVCAgIDB4MDAKKyNkZWZpbmUgX01NX0ZST1VORF9UT19ORUdfSU5GICAgICAgIDB4MDEKKyNkZWZpbmUgX01NX0ZST1VORF9UT19QT1NfSU5GICAgICAgIDB4MDIKKyNkZWZpbmUgX01NX0ZST1VORF9UT19aRVJPICAgICAgICAgIDB4MDMKKyNkZWZpbmUgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OICAgIDB4MDQKKwordHlwZWRlZiBlbnVtCit7CisgIF9NTV9QRVJNX0FBQUEgPSAweDAwLCBfTU1fUEVSTV9BQUFCID0gMHgwMSwgX01NX1BFUk1fQUFBQyA9IDB4MDIsCisgIF9NTV9QRVJNX0FBQUQgPSAweDAzLCBfTU1fUEVSTV9BQUJBID0gMHgwNCwgX01NX1BFUk1fQUFCQiA9IDB4MDUsCisgIF9NTV9QRVJNX0FBQkMgPSAweDA2LCBfTU1fUEVSTV9BQUJEID0gMHgwNywgX01NX1BFUk1fQUFDQSA9IDB4MDgsCisgIF9NTV9QRVJNX0FBQ0IgPSAweDA5LCBfTU1fUEVSTV9BQUNDID0gMHgwQSwgX01NX1BFUk1fQUFDRCA9IDB4MEIsCisgIF9NTV9QRVJNX0FBREEgPSAweDBDLCBfTU1fUEVSTV9BQURCID0gMHgwRCwgX01NX1BFUk1fQUFEQyA9IDB4MEUsCisgIF9NTV9QRVJNX0FBREQgPSAweDBGLCBfTU1fUEVSTV9BQkFBID0gMHgxMCwgX01NX1BFUk1fQUJBQiA9IDB4MTEsCisgIF9NTV9QRVJNX0FCQUMgPSAweDEyLCBfTU1fUEVSTV9BQkFEID0gMHgxMywgX01NX1BFUk1fQUJCQSA9IDB4MTQsCisgIF9NTV9QRVJNX0FCQkIgPSAweDE1LCBfTU1fUEVSTV9BQkJDID0gMHgxNiwgX01NX1BFUk1fQUJCRCA9IDB4MTcsCisgIF9NTV9QRVJNX0FCQ0EgPSAweDE4LCBfTU1fUEVSTV9BQkNCID0gMHgxOSwgX01NX1BFUk1fQUJDQyA9IDB4MUEsCisgIF9NTV9QRVJNX0FCQ0QgPSAweDFCLCBfTU1fUEVSTV9BQkRBID0gMHgxQywgX01NX1BFUk1fQUJEQiA9IDB4MUQsCisgIF9NTV9QRVJNX0FCREMgPSAweDFFLCBfTU1fUEVSTV9BQkREID0gMHgxRiwgX01NX1BFUk1fQUNBQSA9IDB4MjAsCisgIF9NTV9QRVJNX0FDQUIgPSAweDIxLCBfTU1fUEVSTV9BQ0FDID0gMHgyMiwgX01NX1BFUk1fQUNBRCA9IDB4MjMsCisgIF9NTV9QRVJNX0FDQkEgPSAweDI0LCBfTU1fUEVSTV9BQ0JCID0gMHgyNSwgX01NX1BFUk1fQUNCQyA9IDB4MjYsCisgIF9NTV9QRVJNX0FDQkQgPSAweDI3LCBfTU1fUEVSTV9BQ0NBID0gMHgyOCwgX01NX1BFUk1fQUNDQiA9IDB4MjksCisgIF9NTV9QRVJNX0FDQ0MgPSAweDJBLCBfTU1fUEVSTV9BQ0NEID0gMHgyQiwgX01NX1BFUk1fQUNEQSA9IDB4MkMsCisgIF9NTV9QRVJNX0FDREIgPSAweDJELCBfTU1fUEVSTV9BQ0RDID0gMHgyRSwgX01NX1BFUk1fQUNERCA9IDB4MkYsCisgIF9NTV9QRVJNX0FEQUEgPSAweDMwLCBfTU1fUEVSTV9BREFCID0gMHgzMSwgX01NX1BFUk1fQURBQyA9IDB4MzIsCisgIF9NTV9QRVJNX0FEQUQgPSAweDMzLCBfTU1fUEVSTV9BREJBID0gMHgzNCwgX01NX1BFUk1fQURCQiA9IDB4MzUsCisgIF9NTV9QRVJNX0FEQkMgPSAweDM2LCBfTU1fUEVSTV9BREJEID0gMHgzNywgX01NX1BFUk1fQURDQSA9IDB4MzgsCisgIF9NTV9QRVJNX0FEQ0IgPSAweDM5LCBfTU1fUEVSTV9BRENDID0gMHgzQSwgX01NX1BFUk1fQURDRCA9IDB4M0IsCisgIF9NTV9QRVJNX0FEREEgPSAweDNDLCBfTU1fUEVSTV9BRERCID0gMHgzRCwgX01NX1BFUk1fQUREQyA9IDB4M0UsCisgIF9NTV9QRVJNX0FEREQgPSAweDNGLCBfTU1fUEVSTV9CQUFBID0gMHg0MCwgX01NX1BFUk1fQkFBQiA9IDB4NDEsCisgIF9NTV9QRVJNX0JBQUMgPSAweDQyLCBfTU1fUEVSTV9CQUFEID0gMHg0MywgX01NX1BFUk1fQkFCQSA9IDB4NDQsCisgIF9NTV9QRVJNX0JBQkIgPSAweDQ1LCBfTU1fUEVSTV9CQUJDID0gMHg0NiwgX01NX1BFUk1fQkFCRCA9IDB4NDcsCisgIF9NTV9QRVJNX0JBQ0EgPSAweDQ4LCBfTU1fUEVSTV9CQUNCID0gMHg0OSwgX01NX1BFUk1fQkFDQyA9IDB4NEEsCisgIF9NTV9QRVJNX0JBQ0QgPSAweDRCLCBfTU1fUEVSTV9CQURBID0gMHg0QywgX01NX1BFUk1fQkFEQiA9IDB4NEQsCisgIF9NTV9QRVJNX0JBREMgPSAweDRFLCBfTU1fUEVSTV9CQUREID0gMHg0RiwgX01NX1BFUk1fQkJBQSA9IDB4NTAsCisgIF9NTV9QRVJNX0JCQUIgPSAweDUxLCBfTU1fUEVSTV9CQkFDID0gMHg1MiwgX01NX1BFUk1fQkJBRCA9IDB4NTMsCisgIF9NTV9QRVJNX0JCQkEgPSAweDU0LCBfTU1fUEVSTV9CQkJCID0gMHg1NSwgX01NX1BFUk1fQkJCQyA9IDB4NTYsCisgIF9NTV9QRVJNX0JCQkQgPSAweDU3LCBfTU1fUEVSTV9CQkNBID0gMHg1OCwgX01NX1BFUk1fQkJDQiA9IDB4NTksCisgIF9NTV9QRVJNX0JCQ0MgPSAweDVBLCBfTU1fUEVSTV9CQkNEID0gMHg1QiwgX01NX1BFUk1fQkJEQSA9IDB4NUMsCisgIF9NTV9QRVJNX0JCREIgPSAweDVELCBfTU1fUEVSTV9CQkRDID0gMHg1RSwgX01NX1BFUk1fQkJERCA9IDB4NUYsCisgIF9NTV9QRVJNX0JDQUEgPSAweDYwLCBfTU1fUEVSTV9CQ0FCID0gMHg2MSwgX01NX1BFUk1fQkNBQyA9IDB4NjIsCisgIF9NTV9QRVJNX0JDQUQgPSAweDYzLCBfTU1fUEVSTV9CQ0JBID0gMHg2NCwgX01NX1BFUk1fQkNCQiA9IDB4NjUsCisgIF9NTV9QRVJNX0JDQkMgPSAweDY2LCBfTU1fUEVSTV9CQ0JEID0gMHg2NywgX01NX1BFUk1fQkNDQSA9IDB4NjgsCisgIF9NTV9QRVJNX0JDQ0IgPSAweDY5LCBfTU1fUEVSTV9CQ0NDID0gMHg2QSwgX01NX1BFUk1fQkNDRCA9IDB4NkIsCisgIF9NTV9QRVJNX0JDREEgPSAweDZDLCBfTU1fUEVSTV9CQ0RCID0gMHg2RCwgX01NX1BFUk1fQkNEQyA9IDB4NkUsCisgIF9NTV9QRVJNX0JDREQgPSAweDZGLCBfTU1fUEVSTV9CREFBID0gMHg3MCwgX01NX1BFUk1fQkRBQiA9IDB4NzEsCisgIF9NTV9QRVJNX0JEQUMgPSAweDcyLCBfTU1fUEVSTV9CREFEID0gMHg3MywgX01NX1BFUk1fQkRCQSA9IDB4NzQsCisgIF9NTV9QRVJNX0JEQkIgPSAweDc1LCBfTU1fUEVSTV9CREJDID0gMHg3NiwgX01NX1BFUk1fQkRCRCA9IDB4NzcsCisgIF9NTV9QRVJNX0JEQ0EgPSAweDc4LCBfTU1fUEVSTV9CRENCID0gMHg3OSwgX01NX1BFUk1fQkRDQyA9IDB4N0EsCisgIF9NTV9QRVJNX0JEQ0QgPSAweDdCLCBfTU1fUEVSTV9CRERBID0gMHg3QywgX01NX1BFUk1fQkREQiA9IDB4N0QsCisgIF9NTV9QRVJNX0JEREMgPSAweDdFLCBfTU1fUEVSTV9CREREID0gMHg3RiwgX01NX1BFUk1fQ0FBQSA9IDB4ODAsCisgIF9NTV9QRVJNX0NBQUIgPSAweDgxLCBfTU1fUEVSTV9DQUFDID0gMHg4MiwgX01NX1BFUk1fQ0FBRCA9IDB4ODMsCisgIF9NTV9QRVJNX0NBQkEgPSAweDg0LCBfTU1fUEVSTV9DQUJCID0gMHg4NSwgX01NX1BFUk1fQ0FCQyA9IDB4ODYsCisgIF9NTV9QRVJNX0NBQkQgPSAweDg3LCBfTU1fUEVSTV9DQUNBID0gMHg4OCwgX01NX1BFUk1fQ0FDQiA9IDB4ODksCisgIF9NTV9QRVJNX0NBQ0MgPSAweDhBLCBfTU1fUEVSTV9DQUNEID0gMHg4QiwgX01NX1BFUk1fQ0FEQSA9IDB4OEMsCisgIF9NTV9QRVJNX0NBREIgPSAweDhELCBfTU1fUEVSTV9DQURDID0gMHg4RSwgX01NX1BFUk1fQ0FERCA9IDB4OEYsCisgIF9NTV9QRVJNX0NCQUEgPSAweDkwLCBfTU1fUEVSTV9DQkFCID0gMHg5MSwgX01NX1BFUk1fQ0JBQyA9IDB4OTIsCisgIF9NTV9QRVJNX0NCQUQgPSAweDkzLCBfTU1fUEVSTV9DQkJBID0gMHg5NCwgX01NX1BFUk1fQ0JCQiA9IDB4OTUsCisgIF9NTV9QRVJNX0NCQkMgPSAweDk2LCBfTU1fUEVSTV9DQkJEID0gMHg5NywgX01NX1BFUk1fQ0JDQSA9IDB4OTgsCisgIF9NTV9QRVJNX0NCQ0IgPSAweDk5LCBfTU1fUEVSTV9DQkNDID0gMHg5QSwgX01NX1BFUk1fQ0JDRCA9IDB4OUIsCisgIF9NTV9QRVJNX0NCREEgPSAweDlDLCBfTU1fUEVSTV9DQkRCID0gMHg5RCwgX01NX1BFUk1fQ0JEQyA9IDB4OUUsCisgIF9NTV9QRVJNX0NCREQgPSAweDlGLCBfTU1fUEVSTV9DQ0FBID0gMHhBMCwgX01NX1BFUk1fQ0NBQiA9IDB4QTEsCisgIF9NTV9QRVJNX0NDQUMgPSAweEEyLCBfTU1fUEVSTV9DQ0FEID0gMHhBMywgX01NX1BFUk1fQ0NCQSA9IDB4QTQsCisgIF9NTV9QRVJNX0NDQkIgPSAweEE1LCBfTU1fUEVSTV9DQ0JDID0gMHhBNiwgX01NX1BFUk1fQ0NCRCA9IDB4QTcsCisgIF9NTV9QRVJNX0NDQ0EgPSAweEE4LCBfTU1fUEVSTV9DQ0NCID0gMHhBOSwgX01NX1BFUk1fQ0NDQyA9IDB4QUEsCisgIF9NTV9QRVJNX0NDQ0QgPSAweEFCLCBfTU1fUEVSTV9DQ0RBID0gMHhBQywgX01NX1BFUk1fQ0NEQiA9IDB4QUQsCisgIF9NTV9QRVJNX0NDREMgPSAweEFFLCBfTU1fUEVSTV9DQ0REID0gMHhBRiwgX01NX1BFUk1fQ0RBQSA9IDB4QjAsCisgIF9NTV9QRVJNX0NEQUIgPSAweEIxLCBfTU1fUEVSTV9DREFDID0gMHhCMiwgX01NX1BFUk1fQ0RBRCA9IDB4QjMsCisgIF9NTV9QRVJNX0NEQkEgPSAweEI0LCBfTU1fUEVSTV9DREJCID0gMHhCNSwgX01NX1BFUk1fQ0RCQyA9IDB4QjYsCisgIF9NTV9QRVJNX0NEQkQgPSAweEI3LCBfTU1fUEVSTV9DRENBID0gMHhCOCwgX01NX1BFUk1fQ0RDQiA9IDB4QjksCisgIF9NTV9QRVJNX0NEQ0MgPSAweEJBLCBfTU1fUEVSTV9DRENEID0gMHhCQiwgX01NX1BFUk1fQ0REQSA9IDB4QkMsCisgIF9NTV9QRVJNX0NEREIgPSAweEJELCBfTU1fUEVSTV9DRERDID0gMHhCRSwgX01NX1BFUk1fQ0RERCA9IDB4QkYsCisgIF9NTV9QRVJNX0RBQUEgPSAweEMwLCBfTU1fUEVSTV9EQUFCID0gMHhDMSwgX01NX1BFUk1fREFBQyA9IDB4QzIsCisgIF9NTV9QRVJNX0RBQUQgPSAweEMzLCBfTU1fUEVSTV9EQUJBID0gMHhDNCwgX01NX1BFUk1fREFCQiA9IDB4QzUsCisgIF9NTV9QRVJNX0RBQkMgPSAweEM2LCBfTU1fUEVSTV9EQUJEID0gMHhDNywgX01NX1BFUk1fREFDQSA9IDB4QzgsCisgIF9NTV9QRVJNX0RBQ0IgPSAweEM5LCBfTU1fUEVSTV9EQUNDID0gMHhDQSwgX01NX1BFUk1fREFDRCA9IDB4Q0IsCisgIF9NTV9QRVJNX0RBREEgPSAweENDLCBfTU1fUEVSTV9EQURCID0gMHhDRCwgX01NX1BFUk1fREFEQyA9IDB4Q0UsCisgIF9NTV9QRVJNX0RBREQgPSAweENGLCBfTU1fUEVSTV9EQkFBID0gMHhEMCwgX01NX1BFUk1fREJBQiA9IDB4RDEsCisgIF9NTV9QRVJNX0RCQUMgPSAweEQyLCBfTU1fUEVSTV9EQkFEID0gMHhEMywgX01NX1BFUk1fREJCQSA9IDB4RDQsCisgIF9NTV9QRVJNX0RCQkIgPSAweEQ1LCBfTU1fUEVSTV9EQkJDID0gMHhENiwgX01NX1BFUk1fREJCRCA9IDB4RDcsCisgIF9NTV9QRVJNX0RCQ0EgPSAweEQ4LCBfTU1fUEVSTV9EQkNCID0gMHhEOSwgX01NX1BFUk1fREJDQyA9IDB4REEsCisgIF9NTV9QRVJNX0RCQ0QgPSAweERCLCBfTU1fUEVSTV9EQkRBID0gMHhEQywgX01NX1BFUk1fREJEQiA9IDB4REQsCisgIF9NTV9QRVJNX0RCREMgPSAweERFLCBfTU1fUEVSTV9EQkREID0gMHhERiwgX01NX1BFUk1fRENBQSA9IDB4RTAsCisgIF9NTV9QRVJNX0RDQUIgPSAweEUxLCBfTU1fUEVSTV9EQ0FDID0gMHhFMiwgX01NX1BFUk1fRENBRCA9IDB4RTMsCisgIF9NTV9QRVJNX0RDQkEgPSAweEU0LCBfTU1fUEVSTV9EQ0JCID0gMHhFNSwgX01NX1BFUk1fRENCQyA9IDB4RTYsCisgIF9NTV9QRVJNX0RDQkQgPSAweEU3LCBfTU1fUEVSTV9EQ0NBID0gMHhFOCwgX01NX1BFUk1fRENDQiA9IDB4RTksCisgIF9NTV9QRVJNX0RDQ0MgPSAweEVBLCBfTU1fUEVSTV9EQ0NEID0gMHhFQiwgX01NX1BFUk1fRENEQSA9IDB4RUMsCisgIF9NTV9QRVJNX0RDREIgPSAweEVELCBfTU1fUEVSTV9EQ0RDID0gMHhFRSwgX01NX1BFUk1fRENERCA9IDB4RUYsCisgIF9NTV9QRVJNX0REQUEgPSAweEYwLCBfTU1fUEVSTV9EREFCID0gMHhGMSwgX01NX1BFUk1fRERBQyA9IDB4RjIsCisgIF9NTV9QRVJNX0REQUQgPSAweEYzLCBfTU1fUEVSTV9EREJBID0gMHhGNCwgX01NX1BFUk1fRERCQiA9IDB4RjUsCisgIF9NTV9QRVJNX0REQkMgPSAweEY2LCBfTU1fUEVSTV9EREJEID0gMHhGNywgX01NX1BFUk1fRERDQSA9IDB4RjgsCisgIF9NTV9QRVJNX0REQ0IgPSAweEY5LCBfTU1fUEVSTV9ERENDID0gMHhGQSwgX01NX1BFUk1fRERDRCA9IDB4RkIsCisgIF9NTV9QRVJNX0REREEgPSAweEZDLCBfTU1fUEVSTV9ERERCID0gMHhGRCwgX01NX1BFUk1fREREQyA9IDB4RkUsCisgIF9NTV9QRVJNX0REREQgPSAweEZGCit9IF9NTV9QRVJNX0VOVU07CisKK3R5cGVkZWYgZW51bQoreworICBfTU1fTUFOVF9OT1JNXzFfMiwgICAgLyogaW50ZXJ2YWwgWzEsIDIpICAgICAgKi8KKyAgX01NX01BTlRfTk9STV9wNV8yLCAgIC8qIGludGVydmFsIFswLjUsIDIpICAgICovCisgIF9NTV9NQU5UX05PUk1fcDVfMSwgICAvKiBpbnRlcnZhbCBbMC41LCAxKSAgICAqLworICBfTU1fTUFOVF9OT1JNX3A3NV8xcDUgICAvKiBpbnRlcnZhbCBbMC43NSwgMS41KSAqLworfSBfTU1fTUFOVElTU0FfTk9STV9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKyAgX01NX01BTlRfU0lHTl9zcmMsICAgIC8qIHNpZ24gPSBzaWduKFNSQykgICAgICovCisgIF9NTV9NQU5UX1NJR05femVybywgICAvKiBzaWduID0gMCAgICAgICAgICAgICAqLworICBfTU1fTUFOVF9TSUdOX25hbiAgIC8qIERFU1QgPSBOYU4gaWYgc2lnbihTUkMpID0gMSAqLworfSBfTU1fTUFOVElTU0FfU0lHTl9FTlVNOworCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMmYiKSkpCisKKy8qIENyZWF0ZSB2ZWN0b3JzIHdpdGggcmVwZWF0ZWQgZWxlbWVudHMgKi8KKworc3RhdGljICBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldHplcm9fc2k1MTIodm9pZCkKK3sKKyAgcmV0dXJuIChfX201MTJpKShfX3Y4ZGkpeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07Cit9CisKKyNkZWZpbmUgX21tNTEyX3NldHplcm9fZXBpMzIgX21tNTEyX3NldHplcm9fc2k1MTIKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bmRlZmluZWRfcGQodm9pZCkKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3VuZGVmNTEyKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bmRlZmluZWQodm9pZCkKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfdW5kZWY1MTIoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VuZGVmaW5lZF9wcyh2b2lkKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl91bmRlZjUxMigpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VuZGVmaW5lZF9lcGkzMih2b2lkKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfdW5kZWY1MTIoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RkX2VwaTMyIChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3RkX2VwaTMyIChfX201MTJpIF9fTywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX2Jyb2FkY2FzdGRfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX08pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Jyb2FkY2FzdGRfZXBpMzIgKF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9icm9hZGNhc3RkX2VwaTMyKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYnJvYWRjYXN0cV9lcGk2NCAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Jyb2FkY2FzdHFfZXBpNjQgKF9fbTUxMmkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX2Jyb2FkY2FzdHFfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fTyk7CisKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RxX2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX2Jyb2FkY2FzdHFfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zZXQxX2VwaTMyKF9fbW1hc2sxNiBfX00sIGludCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdGQ1MTJfZ3ByX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zZXQxX2VwaTY0KF9fbW1hc2s4IF9fTSwgbG9uZyBsb25nIF9fQSkKK3sKKyNpZmRlZiBfX3g4Nl82NF9fCisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdHE1MTJfZ3ByX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgIF9fTSk7CisjZWxzZQorICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RxNTEyX21lbV9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICBfX00pOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0emVyb19wcyh2b2lkKQoreworICByZXR1cm4gKF9fbTUxMil7IDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgICAgIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wIH07Cit9CisKKyNkZWZpbmUgX21tNTEyX3NldHplcm8gX21tNTEyX3NldHplcm9fcHMKKworc3RhdGljICBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldHplcm9fcGQodm9pZCkKK3sKKyAgcmV0dXJuIChfX201MTJkKXsgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXQxX3BzKGZsb2F0IF9fdykKK3sKKyAgcmV0dXJuIChfX201MTIpeyBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywKKyAgICAgICAgICAgICAgICAgICBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdyAgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0MV9wZChkb3VibGUgX193KQoreworICByZXR1cm4gKF9fbTUxMmQpeyBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdyB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXQxX2VwaTgoY2hhciBfX3cpCit7CisgIHJldHVybiAoX19tNTEyaSkoX192NjRxaSl7IF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdyAgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0MV9lcGkxNihzaG9ydCBfX3cpCit7CisgIHJldHVybiAoX19tNTEyaSkoX192MzJoaSl7IF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193IH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldDFfZXBpMzIoaW50IF9fcykKK3sKKyAgcmV0dXJuIChfX201MTJpKShfX3YxNnNpKXsgX19zLCBfX3MsIF9fcywgX19zLCBfX3MsIF9fcywgX19zLCBfX3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zLCBfX3MsIF9fcywgX19zLCBfX3MsIF9fcywgX19zIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldDFfZXBpNjQobG9uZyBsb25nIF9fZCkKK3sKKyAgcmV0dXJuIChfX201MTJpKShfX3Y4ZGkpeyBfX2QsIF9fZCwgX19kLCBfX2QsIF9fZCwgX19kLCBfX2QsIF9fZCB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYnJvYWRjYXN0c3NfcHMoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV91bmRlZmluZWRfcHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldDRfZXBpMzIgKGludCBfX0EsIGludCBfX0IsIGludCBfX0MsIGludCBfX0QpCit7CisgIHJldHVybiAgKF9fbTUxMmkpKF9fdjE2c2kpCisgICB7IF9fRCwgX19DLCBfX0IsIF9fQSwgX19ELCBfX0MsIF9fQiwgX19BLAorICAgICBfX0QsIF9fQywgX19CLCBfX0EsIF9fRCwgX19DLCBfX0IsIF9fQSB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXQ0X2VwaTY0IChsb25nIGxvbmcgX19BLCBsb25nIGxvbmcgX19CLCBsb25nIGxvbmcgX19DLAorICAgICAgIGxvbmcgbG9uZyBfX0QpCit7CisgIHJldHVybiAgKF9fbTUxMmkpIChfX3Y4ZGkpCisgICB7IF9fRCwgX19DLCBfX0IsIF9fQSwgX19ELCBfX0MsIF9fQiwgX19BIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldDRfcGQgKGRvdWJsZSBfX0EsIGRvdWJsZSBfX0IsIGRvdWJsZSBfX0MsIGRvdWJsZSBfX0QpCit7CisgIHJldHVybiAgKF9fbTUxMmQpCisgICB7IF9fRCwgX19DLCBfX0IsIF9fQSwgX19ELCBfX0MsIF9fQiwgX19BIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0NF9wcyAoZmxvYXQgX19BLCBmbG9hdCBfX0IsIGZsb2F0IF9fQywgZmxvYXQgX19EKQoreworICByZXR1cm4gIChfX201MTIpCisgICB7IF9fRCwgX19DLCBfX0IsIF9fQSwgX19ELCBfX0MsIF9fQiwgX19BLAorICAgICBfX0QsIF9fQywgX19CLCBfX0EsIF9fRCwgX19DLCBfX0IsIF9fQSB9OworfQorCisjZGVmaW5lIF9tbTUxMl9zZXRyNF9lcGkzMihlMCxlMSxlMixlMykgICAgICAgICAgICAgICBcCisgIF9tbTUxMl9zZXQ0X2VwaTMyKChlMyksKGUyKSwoZTEpLChlMCkpCisKKyNkZWZpbmUgX21tNTEyX3NldHI0X2VwaTY0KGUwLGUxLGUyLGUzKSAgICAgICAgICAgICAgIFwKKyAgX21tNTEyX3NldDRfZXBpNjQoKGUzKSwoZTIpLChlMSksKGUwKSkKKworI2RlZmluZSBfbW01MTJfc2V0cjRfcGQoZTAsZTEsZTIsZTMpICAgICAgICAgICAgICAgIFwKKyAgX21tNTEyX3NldDRfcGQoKGUzKSwoZTIpLChlMSksKGUwKSkKKworI2RlZmluZSBfbW01MTJfc2V0cjRfcHMoZTAsZTEsZTIsZTMpICAgICAgICAgICAgICAgIFwKKyAgX21tNTEyX3NldDRfcHMoKGUzKSwoZTIpLChlMSksKGUwKSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RzZF9wZChfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV91bmRlZmluZWRfcGQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworfQorCisvKiBDYXN0IGJldHdlZW4gdmVjdG9yIHR5cGVzICovCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Nhc3RwZDI1Nl9wZDUxMihfX20yNTZkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAxLCAyLCAzLCAtMSwgLTEsIC0xLCAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHBzMjU2X3BzNTEyKF9fbTI1NiBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0cGQ1MTJfcGQxMjgoX19tNTEyZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Nhc3RwZDUxMl9wZDI1NiAoX19tNTEyZCBfX0EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX0EsIF9fQSwgMCwgMSwgMiwgMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHBzNTEyX3BzMTI4KF9fbTUxMiBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgMSwgMiwgMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHBzNTEyX3BzMjU2IChfX201MTIgX19BKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19BLCBfX0EsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Nhc3RwZF9wcyAoX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHBkX3NpNTEyIChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0cGQxMjhfcGQ1MTIgKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIF9fQSwgX19BLCAwLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHBzX3BkIChfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0cHNfc2k1MTIgKF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0cHMxMjhfcHM1MTIgKF9fbTEyOCBfX0EpCit7CisgICAgcmV0dXJuICBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggX19BLCBfX0EsIDAsIDEsIDIsIDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Nhc3RzaTEyOF9zaTUxMiAoX19tMTI4aSBfX0EpCit7CisgICByZXR1cm4gIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCBfX0EsIF9fQSwgMCwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHNpMjU2X3NpNTEyIChfX20yNTZpIF9fQSkKK3sKKyAgIHJldHVybiAgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIF9fQSwgX19BLCAwLCAxLCAyLCAzLCAtMSwgLTEsIC0xLCAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHNpNTEyX3BzIChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0c2k1MTJfcGQgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0c2k1MTJfc2kxMjggKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19BLCBfX0EgLCAwLCAxKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHNpNTEyX3NpMjU2IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fQSwgX19BICwgMCwgMSwgMiwgMyk7Cit9CisKKy8qIEJpdHdpc2Ugb3BlcmF0b3JzICovCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FuZF9lcGkzMihfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkoKF9fdjE2c3UpX19hICYgKF9fdjE2c3UpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FuZF9lcGkzMihfX201MTJpIF9fc3JjLCBfX21tYXNrMTYgX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KV9faywKKyAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX2FuZF9lcGkzMihfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fc3JjKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hbmRfZXBpMzIoX19tbWFzazE2IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9tbTUxMl9tYXNrX2FuZF9lcGkzMihfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYW5kX2VwaTY0KF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKSgoX192OGR1KV9fYSAmIChfX3Y4ZHUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FuZF9lcGk2NChfX201MTJpIF9fc3JjLCBfX21tYXNrOCBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyICgoX19tbWFzazgpIF9faywKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfYW5kX2VwaTY0KF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfX3NyYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kX2VwaTY0KF9fbW1hc2s4IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9tbTUxMl9tYXNrX2FuZF9lcGk2NChfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYW5kbm90X3NpNTEyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkofihfX3Y4ZHUpKF9fQSkgJiAoX192OGR1KV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYW5kbm90X2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkofihfX3YxNnN1KShfX0EpICYgKF9fdjE2c3UpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FuZG5vdF9lcGkzMihfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9hbmRub3RfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FuZG5vdF9lcGkzMihfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfbW01MTJfbWFza19hbmRub3RfZXBpMzIoX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UsIF9fQSwgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hbmRub3RfZXBpNjQoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpKH4oX192OGR1KShfX0EpICYgKF9fdjhkdSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYW5kbm90X2VwaTY0KF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9hbmRub3RfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FuZG5vdF9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9tbTUxMl9tYXNrX2FuZG5vdF9lcGk2NChfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX29yX2VwaTMyKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKSgoX192MTZzdSlfX2EgfCAoX192MTZzdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfb3JfZXBpMzIoX19tNTEyaSBfX3NyYywgX19tbWFzazE2IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoKF9fbW1hc2sxNilfX2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfb3JfZXBpMzIoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX19zcmMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X29yX2VwaTMyKF9fbW1hc2sxNiBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9tbTUxMl9tYXNrX29yX2VwaTMyKF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIF9faywgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX29yX2VwaTY0KF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKSgoX192OGR1KV9fYSB8IChfX3Y4ZHUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX29yX2VwaTY0KF9fbTUxMmkgX19zcmMsIF9fbW1hc2s4IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KV9faywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX29yX2VwaTY0KF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX19zcmMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X29yX2VwaTY0KF9fbW1hc2s4IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpX21tNTEyX21hc2tfb3JfZXBpNjQoX21tNTEyX3NldHplcm9fc2k1MTIoKSwgX19rLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfeG9yX2VwaTMyKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKSgoX192MTZzdSlfX2EgXiAoX192MTZzdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfeG9yX2VwaTMyKF9fbTUxMmkgX19zcmMsIF9fbW1hc2sxNiBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfNTEyKChfX21tYXNrMTYpX19rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfeG9yX2VwaTMyKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX19zcmMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3hvcl9lcGkzMihfX21tYXNrMTYgX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSlfbW01MTJfbWFza194b3JfZXBpMzIoX21tNTEyX3NldHplcm9fc2k1MTIoKSwgX19rLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfeG9yX2VwaTY0KF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKSgoX192OGR1KV9fYSBeIChfX3Y4ZHUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3hvcl9lcGk2NChfX201MTJpIF9fc3JjLCBfX21tYXNrOCBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOClfX2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl94b3JfZXBpNjQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfX3NyYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfeG9yX2VwaTY0KF9fbW1hc2s4IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpX21tNTEyX21hc2tfeG9yX2VwaTY0KF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIF9faywgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FuZF9zaTUxMihfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkoKF9fdjhkdSlfX2EgJiAoX192OGR1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfb3Jfc2k1MTIoX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpKChfX3Y4ZHUpX19hIHwgKF9fdjhkdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3hvcl9zaTUxMihfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkoKF9fdjhkdSlfX2EgXiAoX192OGR1KV9fYik7Cit9CisKKy8qIEFyaXRobWV0aWMgKi8KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWRkX3BkKF9fbTUxMmQgX19hLCBfX201MTJkIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJkKSgoX192OGRmKV9fYSArIChfX3Y4ZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hZGRfcHMoX19tNTEyIF9fYSwgX19tNTEyIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTIpKChfX3YxNnNmKV9fYSArIChfX3YxNnNmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX211bF9wZChfX201MTJkIF9fYSwgX19tNTEyZCBfX2IpCit7CisgIHJldHVybiAoX19tNTEyZCkoKF9fdjhkZilfX2EgKiAoX192OGRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsX3BzKF9fbTUxMiBfX2EsIF9fbTUxMiBfX2IpCit7CisgIHJldHVybiAoX19tNTEyKSgoX192MTZzZilfX2EgKiAoX192MTZzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdWJfcGQoX19tNTEyZCBfX2EsIF9fbTUxMmQgX19iKQoreworICByZXR1cm4gKF9fbTUxMmQpKChfX3Y4ZGYpX19hIC0gKF9fdjhkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N1Yl9wcyhfX201MTIgX19hLCBfX201MTIgX19iKQoreworICByZXR1cm4gKF9fbTUxMikoKF9fdjE2c2YpX19hIC0gKF9fdjE2c2YpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hZGRfZXBpNjQgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjhkdSkgX19BICsgKF9fdjhkdSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3ViX2VwaTY0IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgKChfX3Y4ZHUpIF9fQSAtIChfX3Y4ZHUpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdWJfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VicTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3ViX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VicTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZF9lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpICgoX192MTZzdSkgX19BICsgKF9fdjE2c3UpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hZGRfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZGQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdWJfZXBpMzIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjE2c3UpIF9fQSAtIChfX3YxNnN1KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3ViX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3ViX2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YmQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2tfbWF4X3JvdW5kX3BkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9tYXhwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfbWF4X3JvdW5kX3BkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9tYXhwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21heF9yb3VuZF9wZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfbWF4cGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWF4X3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9tYXhwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWF4X3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbWF4cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21heF9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbWF4cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX21heF9yb3VuZF9wcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9tYXhwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X21heF9yb3VuZF9wcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9tYXhwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWF4X3JvdW5kX3BzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX21heHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX21heHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWF4X3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbWF4cHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWF4X3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbWF4cHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21heF9zcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWF4c3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9zcyhfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWF4c3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWF4X3JvdW5kX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX21heHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19tYXhfcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfbWF4c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X21heF9yb3VuZF9zcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9tYXhzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X3NkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWF4c2Rfcm91bmRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfc2QoX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21heHNkX3JvdW5kX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21heF9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfbWF4c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfbWF4X3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9tYXhzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfbWF4X3JvdW5kX3NkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9tYXhzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpCitfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfZXBpMzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21heF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2Q1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWF4X2VwaTMyIChfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHNkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfZXB1MzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1ZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21heF9lcHUzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWF4X2VwdTMyIChfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHVkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfZXBpNjQoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzcTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWF4X2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHNxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21heF9lcGk2NCAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHNxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfZXB1NjQoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1cTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWF4X2VwdTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHVxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21heF9lcHU2NCAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHVxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICBfX00pOworfQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX21pbl9yb3VuZF9wZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfbWlucGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X21pbl9yb3VuZF9wZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfbWlucGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9taW5fcm91bmRfcGQoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX21pbnBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21pbl9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbWlucGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21pbl9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX21pbnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfbWFza19taW5fcm91bmRfcHMoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfbWlucHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9taW5fcm91bmRfcHMoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfbWlucHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21pbl9yb3VuZF9wcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9taW5wczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWluX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9taW5wZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9taW5wczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21pbl9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX21pbnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21pbl9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX21pbnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fc3MoX19tMTI4IF9fVywgX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21pbnNzX3JvdW5kX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9taW5fc3MoX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21pbnNzX3JvdW5kX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21pbl9yb3VuZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9taW5zc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfbWluX3JvdW5kX3NzKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX21pbnNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9taW5fcm91bmRfc3MoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfbWluc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21pbl9zZChfX20xMjhkIF9fVywgX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21pbnNkX3JvdW5kX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX3NkKF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9taW5zZF9yb3VuZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9taW5fcm91bmRfc2QoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX21pbnNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX21pbl9yb3VuZF9zZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfbWluc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X21pbl9yb3VuZF9zZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfbWluc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaQorX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX2VwaTMyKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWluc2Q1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19taW5fZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnNkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21pbl9lcGkzMiAoX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX2VwdTMyKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludWQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19taW5fZXB1MzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnVkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21pbl9lcHUzMiAoX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51ZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX2VwaTY0KF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWluc3E1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21pbl9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zcTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9taW5fZXBpNjQgKF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zcTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX2VwdTY0KF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludXE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21pbl9lcHU2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51cTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9taW5fZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51cTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsX2VwaTMyKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHE1MTJfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX211bF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxkcTUxMl9tYXNrICgoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAorICAgICAgICAgICAgICAoX192OGRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bF9lcGkzMiAoX19tbWFzazggX19NLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGRxNTEyX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWxfZXB1MzIoX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHE1MTJfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tdWxfZXB1MzIgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsdWRxNTEyX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAorICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tdWxfZXB1MzIgKF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHE1MTJfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWxsb19lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpICgoX192MTZzdSkgX19BICogKF9fdjE2c3UpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bGxvX2VwaTMyIChfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGxkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tdWxsb19lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsbGQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywgX19NKTsKK30KKworI2RlZmluZSBfbW01MTJfbWFza19zcXJ0X3JvdW5kX3BkKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zcXJ0cGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NxcnRfcm91bmRfcGQoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NxcnRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3NxcnRfcm91bmRfcGQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NxcnRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcXJ0X3BkKF9fbTUxMmQgX19hKQoreworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc3FydHBkNTEyX21hc2soKF9fdjhkZilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3FydF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfc3FydHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zcXJ0X3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3NxcnRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NxcnRfcm91bmRfcHMoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc3FydHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShXKSwgKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NxcnRfcm91bmRfcHMoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc3FydHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc3FydF9yb3VuZF9wcyhBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zcXJ0cHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcXJ0X3BzKF9fbTUxMiBfX2EpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NxcnRwczUxMl9tYXNrKChfX3YxNnNmKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NxcnRfcHMoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc3FydHBzNTEyX21hc2soKF9fdjE2c2YpX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3FydF9wcyggX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc3FydHBzNTEyX21hc2soKF9fdjE2c2YpX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcnNxcnQxNF9wZChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7fQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcnNxcnQxNF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9yc3FydDE0X3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcnNxcnQxNF9wcyhfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcnNxcnQxNHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yc3FydDE0X3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcnNxcnQxNHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9yc3FydDE0X3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcnNxcnQxNHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yc3FydDE0X3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yc3FydDE0c3NfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19yc3FydDE0X3NzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRzc19tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9yc3FydDE0X3NzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRzc19tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcnNxcnQxNF9zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHNkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19yc3FydDE0X3NkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yc3FydDE0c2RfbWFzayAoIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9yc3FydDE0X3NkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRzZF9tYXNrICggKF9fdjJkZikgX19BLAorICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3JjcDE0X3BkKF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JjcDE0cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yY3AxNF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmNwMTRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9yY3AxNF9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yY3AxNHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9yY3AxNF9wcyhfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmNwMTRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcmNwMTRfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9yY3AxNHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcmNwMTRfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9yY3AxNHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yY3AxNF9zcyhfX20xMjggX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcmNwMTRzc19tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19yY3AxNF9zcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yY3AxNHNzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3JjcDE0X3NzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JjcDE0c3NfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JjcDE0X3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yY3AxNHNkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcmNwMTRfc2QgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3JjcDE0c2RfbWFzayAoIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9yY3AxNF9zZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yY3AxNHNkX21hc2sgKCAoX192MmRmKSBfX0EsCisgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9mbG9vcl9wcyhfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc19tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0ZMT09SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19BLCAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZmxvb3JfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9GTE9PUiwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLCBfX1UsCisgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZmxvb3JfcGQoX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0ZMT09SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19BLCAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbG9vcl9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9GTE9PUiwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jZWlsX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc19tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ0VJTCwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLCBfX1UsCisgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jZWlsX3BzKF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ0VJTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQSwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NlaWxfcGQoX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NFSUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0EsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NlaWxfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ0VJTCwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hYnNfZXBpNjQoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic3E1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hYnNfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hYnNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic3E1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hYnNfZXBpMzIoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic2Q1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hYnNfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWJzZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWJzX2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWJzZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZF9zcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYWRkc3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FkZF9zcyhfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYWRkc3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fYWRkX3JvdW5kX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2FkZHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19hZGRfcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfYWRkc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2FkZF9yb3VuZF9zcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9hZGRzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWRkX3NkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYWRkc2Rfcm91bmRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRfc2QoX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FkZHNkX3JvdW5kX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisjZGVmaW5lIF9tbV9hZGRfcm91bmRfc2QoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2FkZHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2FkZF9yb3VuZF9zZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfYWRkc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2FkZF9yb3VuZF9zZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfYWRkc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWRkX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2FkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hZGRfcHMoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FkZF9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9hZGRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2FkZF9yb3VuZF9wZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfYWRkcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfYWRkX3JvdW5kX3BkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9hZGRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfYWRkX3JvdW5kX3BkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9hZGRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2FkZF9yb3VuZF9wcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9hZGRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2FkZF9yb3VuZF9wcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9hZGRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2FkZF9yb3VuZF9wcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9hZGRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3ViX3NzKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zdWJzc19yb3VuZF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3ViX3NzKF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zdWJzc19yb3VuZF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorI2RlZmluZSBfbW1fc3ViX3JvdW5kX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3N1YnNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19zdWJfcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfc3Vic3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3N1Yl9yb3VuZF9zcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zdWJzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3ViX3NkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc3Vic2Rfcm91bmRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJfc2QoX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3N1YnNkX3JvdW5kX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX3N1Yl9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc3Vic2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfc3ViX3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zdWJzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfc3ViX3JvdW5kX3NkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zdWJzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdWJfcGQoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfc3VicGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zdWJfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9zdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3ViX3BzKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3N1YnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zdWJfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfc3ViX3JvdW5kX3BkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zdWJwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zdWJfcm91bmRfcGQoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3N1YnBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zdWJfcm91bmRfcGQoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3N1YnBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc3ViX3JvdW5kX3BzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3N1YnBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc3ViX3JvdW5kX3BzKFcsIFUsIEEsIEIsIFIpICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zdWJwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pOworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zdWJfcm91bmRfcHMoVSwgQSwgQiwgUikgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3N1YnBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KTsKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsX3NzKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tdWxzc19yb3VuZF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsX3NzKF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tdWxzc19yb3VuZF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorI2RlZmluZSBfbW1fbXVsX3JvdW5kX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX211bHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19tdWxfcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfbXVsc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X211bF9yb3VuZF9zcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9tdWxzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsX3NkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbXVsc2Rfcm91bmRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tdWxfc2QoX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX211bHNkX3JvdW5kX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX211bF9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfbXVsc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfbXVsX3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9tdWxzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfbXVsX3JvdW5kX3NkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9tdWxzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tdWxfcGQoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbXVscGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tdWxfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9tdWxwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbXVsX3BzKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX211bHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tdWxfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbXVscHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfbXVsX3JvdW5kX3BkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9tdWxwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19tdWxfcm91bmRfcGQoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX211bHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9tdWxfcm91bmRfcGQoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX211bHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbXVsX3JvdW5kX3BzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX211bHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfbXVsX3JvdW5kX3BzKFcsIFUsIEEsIEIsIFIpICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9tdWxwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pOworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9tdWxfcm91bmRfcHMoVSwgQSwgQiwgUikgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX211bHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KTsKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZGl2X3NzKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9kaXZzc19yb3VuZF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZGl2X3NzKF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9kaXZzc19yb3VuZF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9kaXZfcm91bmRfc3MoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZGl2c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2Rpdl9yb3VuZF9zcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9kaXZzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfZGl2X3JvdW5kX3NzKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2RpdnNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19kaXZfc2QoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kaXZzZF9yb3VuZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Rpdl9zZChfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZGl2c2Rfcm91bmRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fZGl2X3JvdW5kX3NkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9kaXZzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19kaXZfcm91bmRfc2QoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2RpdnNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9kaXZfcm91bmRfc2QoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2RpdnNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZGl2X3BkKF9fbTUxMmQgX19hLCBfX201MTJkIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJkKSgoX192OGRmKV9fYS8oX192OGRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19kaXZfcGQoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfZGl2cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9kaXZfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9kaXZwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9kaXZfcHMoX19tNTEyIF9fYSwgX19tNTEyIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTIpKChfX3YxNnNmKV9fYS8oX192MTZzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19kaXZfcHMoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfZGl2cHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Rpdl9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9kaXZwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9kaXZfcm91bmRfcGQoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2RpdnBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2Rpdl9yb3VuZF9wZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZGl2cGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2Rpdl9yb3VuZF9wZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZGl2cGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9kaXZfcm91bmRfcHMoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZGl2cHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19kaXZfcm91bmRfcHMoVywgVSwgQSwgQiwgUikgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2RpdnBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShXKSwgKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSk7CisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2Rpdl9yb3VuZF9wcyhVLCBBLCBCLCBSKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZGl2cHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pOworCisjZGVmaW5lIF9tbTUxMl9yb3VuZHNjYWxlX3BzKEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQSksIChfX21tYXNrMTYpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yb3VuZHNjYWxlX3BzKEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQSksIChfX21tYXNrMTYpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JvdW5kc2NhbGVfcHMoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfbWFzaygoX192MTZzZikoX19tNTEyKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcm91bmRzY2FsZV9yb3VuZF9wcyhBLCBCLCBDLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfbWFzaygoX192MTZzZikoX19tNTEyKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShBKSwgKF9fbW1hc2sxNikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yb3VuZHNjYWxlX3JvdW5kX3BzKEEsIEIsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc19tYXNrKChfX3YxNnNmKShfX201MTIpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoQSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcm91bmRzY2FsZV9yb3VuZF9wcyhBLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9yb3VuZHNjYWxlX3BkKEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShBKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JvdW5kc2NhbGVfcGQoQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoX19tbWFzazgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yb3VuZHNjYWxlX3BkKEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcm91bmRzY2FsZV9yb3VuZF9wZChBLCBCLCBDLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoX19tbWFzazgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JvdW5kc2NhbGVfcm91bmRfcGQoQSwgQiwgaW1tLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoQSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcm91bmRzY2FsZV9yb3VuZF9wZChBLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfZm1hZGRfcm91bmRfcGQoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza19mbWFkZF9yb3VuZF9wZChBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFzazNfZm1hZGRfcm91bmRfcGQoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2szKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbWFkZF9yb3VuZF9wZChVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFza3ooKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX2Ztc3ViX3JvdW5kX3BkKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrX2Ztc3ViX3JvdW5kX3BkKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm1zdWJfcm91bmRfcGQoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2t6KChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfZm5tYWRkX3JvdW5kX3BkKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrKC0oX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQyksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbm1hZGRfcm91bmRfcGQoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2szKC0oX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm5tYWRkX3JvdW5kX3BkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNreigtKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX2ZubXN1Yl9yb3VuZF9wZChBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzaygtKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2ZubXN1Yl9yb3VuZF9wZChVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFza3ooLShfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9mbWFkZF9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2ZtYWRkX3BkKF9fbTUxMmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2ZtYWRkX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrMyAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZm1hZGRfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2t6ICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9mbXN1Yl9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbXN1Yl9wZChfX201MTJkIF9fQSwgX19tbWFzazggX19VLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZm1zdWJfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2t6ICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm5tYWRkX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzayAoLShfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbm1hZGRfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2szICgtKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZm5tYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNreiAoLShfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2ZubXN1Yl9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKC0oX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2ZubXN1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFza3ogKC0oX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2ZtYWRkX3JvdW5kX3BzKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgKF9fbW1hc2sxNiktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm1hZGRfcm91bmRfcHMoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2szX2ZtYWRkX3JvdW5kX3BzKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2szKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm1hZGRfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFza3ooKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9mbXN1Yl9yb3VuZF9wcyhBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza19mbXN1Yl9yb3VuZF9wcyhBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2Ztc3ViX3JvdW5kX3BzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6KChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX2ZubWFkZF9yb3VuZF9wcyhBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrKC0oX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEMpLCAoX19tbWFzazE2KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFzazNfZm5tYWRkX3JvdW5kX3BzKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2szKC0oX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2ZubWFkZF9yb3VuZF9wcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNreigtKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9mbm1zdWJfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzaygtKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbm1zdWJfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFza3ooLShfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9mbWFkZF9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbWFkZF9wcyhfX201MTIgX19BLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2ZtYWRkX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MsIF9fbW1hc2sxNiBfX1UpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrMyAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9mbWFkZF9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFza3ogKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm1zdWJfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Ztc3ViX3BzKF9fbTUxMiBfX0EsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Ztc3ViX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNreiAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm5tYWRkX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrICgtKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazNfZm5tYWRkX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MsIF9fbW1hc2sxNiBfX1UpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrMyAoLShfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZm5tYWRkX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNreiAoLShfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm5tc3ViX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrICgtKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2ZubXN1Yl9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFza3ogKC0oX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2ZtYWRkc3ViX3JvdW5kX3BkKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm1hZGRzdWJfcm91bmRfcGQoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2szX2ZtYWRkc3ViX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrMygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm1hZGRzdWJfcm91bmRfcGQoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2t6KChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9mbXN1YmFkZF9yb3VuZF9wZChBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza19mbXN1YmFkZF9yb3VuZF9wZChBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2Ztc3ViYWRkX3JvdW5kX3BkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNreigoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm1hZGRzdWJfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbWFkZHN1Yl9wZChfX201MTJkIF9fQSwgX19tbWFzazggX19VLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbWFkZHN1Yl9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzazMgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2ZtYWRkc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNreiAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm1zdWJhZGRfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm1zdWJhZGRfcGQoX19tNTEyZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Ztc3ViYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNreiAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9mbWFkZHN1Yl9yb3VuZF9wcyhBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZtYWRkc3ViX3JvdW5kX3BzKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbWFkZHN1Yl9yb3VuZF9wcyhBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrMygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2ZtYWRkc3ViX3JvdW5kX3BzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2t6KChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfZm1zdWJhZGRfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm1zdWJhZGRfcm91bmRfcHMoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbXN1YmFkZF9yb3VuZF9wcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNreigoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm1hZGRzdWJfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm1hZGRzdWJfcHMoX19tNTEyIF9fQSwgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbWFkZHN1Yl9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DLCBfX21tYXNrMTYgX19VKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzazMgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZm1hZGRzdWJfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2t6ICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Ztc3ViYWRkX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbXN1YmFkZF9wcyhfX201MTIgX19BLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9mbXN1YmFkZF9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFza3ogKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfbWFzazNfZm1zdWJfcm91bmRfcGQoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkNTEyX21hc2szKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2Ztc3ViX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1zdWJwZDUxMl9tYXNrMyAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2szX2Ztc3ViX3JvdW5kX3BzKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBzNTEyX21hc2szKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2Ztc3ViX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MsIF9fbW1hc2sxNiBfX1UpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1zdWJwczUxMl9tYXNrMyAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2szX2Ztc3ViYWRkX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwZDUxMl9tYXNrMygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbXN1YmFkZF9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQ1MTJfbWFzazMgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbXN1YmFkZF9yb3VuZF9wcyhBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwczUxMl9tYXNrMygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbXN1YmFkZF9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DLCBfX21tYXNrMTYgX19VKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcHM1MTJfbWFzazMgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZubWFkZF9yb3VuZF9wZChBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZubWFkZHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbm1hZGRfcGQoX19tNTEyZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfbWFza19mbm1hZGRfcm91bmRfcHMoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZubWFkZHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbm1hZGRfcHMoX19tNTEyIF9fQSwgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfbWFza19mbm1zdWJfcm91bmRfcGQoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbm1zdWJfcm91bmRfcGQoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDUxMl9tYXNrMygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2ZubXN1Yl9wZChfX201MTJkIF9fQSwgX19tbWFzazggX19VLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2ZubXN1Yl9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBkNTEyX21hc2szICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm5tc3ViX3JvdW5kX3BzKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFzazNfZm5tc3ViX3JvdW5kX3BzKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczUxMl9tYXNrMygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2ZubXN1Yl9wcyhfX201MTIgX19BLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZubXN1YnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazNfZm5tc3ViX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MsIF9fbW1hc2sxNiBfX1UpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicHM1MTJfbWFzazMgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworCisKKy8qIFZlY3RvciBwZXJtdXRhdGlvbnMgKi8KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXgydmFyX2VwaTMyKF9fbTUxMmkgX19BLCBfX201MTJpIF9fSSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Blcm11dGV4MnZhcl9lcGkzMiAoX19tNTEyaSBfX0EsIF9fbW1hc2sxNiBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyZDUxMl9tYXNrICgoX192MTZzaSkgX19JCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGVybXV0ZXgydmFyX2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyZDUxMl9tYXNreiAoKF9fdjE2c2kpIF9fSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wZXJtdXRleDJ2YXJfZXBpNjQoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTUxMl9tYXNrICgoX192OGRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbTUxMmkgX19BLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19JLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTUxMl9tYXNrICgoX192OGRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGVybXV0ZXgydmFyX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgX19tNTEyaSBfX0ksIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxNTEyX21hc2t6ICgoX192OGRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworI2RlZmluZSBfbW01MTJfYWxpZ25yX2VwaTY0KEEsIEIsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9hbGlnbnE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShCKSwgKGludCkoSSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfYWxpZ25yX2VwaTY0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9hbGlnbnE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfYWxpZ25yX2VwaTY0KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9hbGlnbnE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2FsaWducl9lcGkzMihBLCBCLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfYWxpZ25kNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShCKSwgKGludCkoSSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19hbGlnbnJfZXBpMzIoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9hbGlnbmQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2FsaWducl9lcGkzMihVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfYWxpZ25kNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKy8qIFZlY3RvciBFeHRyYWN0ICovCisKKyNkZWZpbmUgX21tNTEyX2V4dHJhY3RmNjR4NF9wZChBLCBJKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RmNjR4NF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19leHRyYWN0ZjY0eDRfcGQoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9leHRyYWN0ZjY0eDRfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZXh0cmFjdGY2NHg0X3BkKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfZXh0cmFjdGY2NHg0X21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9leHRyYWN0ZjMyeDRfcHMoQSwgSSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RmMzJ4NF9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZXh0cmFjdGYzMng0X3BzKFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9leHRyYWN0ZjMyeDRfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZXh0cmFjdGYzMng0X3BzKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9leHRyYWN0ZjMyeDRfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorLyogVmVjdG9yIEJsZW5kICovCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYmxlbmRfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX1cpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYmxlbmRfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fVykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMiAoKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYmxlbmRfZXBpNjQoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX1cpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2JsZW5kX2VwaTMyKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fVykKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMiAoKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQSk7Cit9CisKKy8qIENvbXBhcmUgKi8KKworI2RlZmluZSBfbW01MTJfY21wX3JvdW5kX3BzX21hc2soQSwgQiwgUCwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKFApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX3JvdW5kX3BzX21hc2soVSwgQSwgQiwgUCwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKFApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jbXBfcHNfbWFzayhBLCBCLCBQKSBcCisgIF9tbTUxMl9jbXBfcm91bmRfcHNfbWFzaygoQSksIChCKSwgKFApLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX3BzX21hc2soVSwgQSwgQiwgUCkgXAorICBfbW01MTJfbWFza19jbXBfcm91bmRfcHNfbWFzaygoVSksIChBKSwgKEIpLCAoUCksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfY21wX3JvdW5kX3BkX21hc2soQSwgQiwgUCwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShQKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfcm91bmRfcGRfbWFzayhVLCBBLCBCLCBQLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIChpbnQpKFApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfY21wX3BkX21hc2soQSwgQiwgUCkgXAorICBfbW01MTJfY21wX3JvdW5kX3BkX21hc2soKEEpLCAoQiksIChQKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9wZF9tYXNrKFUsIEEsIEIsIFApIFwKKyAgX21tNTEyX21hc2tfY21wX3JvdW5kX3BkX21hc2soKFUpLCAoQSksIChCKSwgKFApLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKy8qIENvbnZlcnNpb24gKi8KKworI2RlZmluZSBfbW01MTJfY3Z0dF9yb3VuZHBzX2VwdTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl91bmRlZmluZWRfZXBpMzIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dHRfcm91bmRwc19lcHUzMihXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dHRfcm91bmRwc19lcHUzMihVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHRwc19lcHUzMihfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1ZHE1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR0cHNfZXB1MzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1ZHE1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHRwc19lcHUzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRlcGkzMl9wcyhBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9jdnRkcTJwczUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZGVwaTMyX3BzKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kZXBpMzJfcHMoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfY3Z0ZHEycHM1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZGVwdTMyX3BzKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kZXB1MzJfcHMoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRlcHUzMl9wcyhVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHM1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwdTMyX3BzIChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3VuZGVmaW5lZF9wcyAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwdTMyX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcHUzMl9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHM1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaTMyX3BkKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBkNTEyX21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpMzJfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBkNTEyX21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaTMyX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBkNTEyX21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcGkzMl9wcyAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwczUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfdW5kZWZpbmVkX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTMyX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaTMyX3BzIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcHUzMl9wZChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQ1MTJfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHUzMl9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkNTEyX21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcHUzMl9wZCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQ1MTJfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBkX3BzKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcGRfcHMoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfY3Z0cGQycHM1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRwZF9wcyhVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9jdnRwZDJwczUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHBkX3BzIChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfdW5kZWZpbmVkX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0cGRfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnRwZDJwczUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRwZF9wcyAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwc19waChBLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfdmN2dHBzMnBoNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwc19waChVLCBXLCBBLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfdmN2dHBzMnBoNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBzX3BoKFcsIEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGg1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoSSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2N2dHBzX3BoKEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGg1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoSSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRwc19waChVLCBXLCBBLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfdmN2dHBzMnBoNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dHBzX3BoKFcsIEEsIEkpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaDUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcGhfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmN2dHBoMnBzNTEyX21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZHBoX3BzKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZjdnRwaDJwczUxMl9tYXNrKChfX3YxNmhpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcGhfcHMoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmN2dHBoMnBzNTEyX21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljICBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cGhfcHMoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHM1MTJfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwaF9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHM1MTJfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cGhfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmN2dHBoMnBzNTEyX21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnR0X3JvdW5kcGRfZXBpMzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnR0X3JvdW5kcGRfZXBpMzIoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0dF9yb3VuZHBkX2VwaTMyKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cGRfZXBpMzIoX19tNTEyZCBfX2EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHE1MTJfbWFzaygoX192OGRmKSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR0cGRfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0dHBkX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0dF9yb3VuZHBzX2VwaTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnR0X3JvdW5kcHNfZXBpMzIoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnR0X3JvdW5kcHNfZXBpMzIoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0dHBzX2VwaTMyKF9fbTUxMiBfX2EpCit7CisgIHJldHVybiAoX19tNTEyaSkKKyAgICBfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHE1MTJfbWFzaygoX192MTZzZikgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwc19lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMmRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnR0cHNfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMmRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwc19lcGkzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMyZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcHNfZXBpMzIoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRwc19lcGkzMihVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMyZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHBzX2VwaTMyIChfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfdW5kZWZpbmVkX2VwaTMyICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHBzX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJkcTUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cHNfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMyZHE1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBkX2VwaTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcGRfZXBpMzIoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcGRfZXBpMzIoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cGRfZXBpMzIgKF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHBkX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cGRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cGQyZHE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBzX2VwdTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwc19lcHUzMihXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMydWRxNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBzX2VwdTMyKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cHNfZXB1MzIgKCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVkcTUxMl9tYXNrICgoX192MTZzZikgX19BLFwKKyAgICAgICAgICAgICAgICAgIChfX3YxNnNpKVwKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl91bmRlZmluZWRfZXBpMzIgKCksXAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsXAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTtcCit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwc19lcHUzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMydWRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRwc19lcHUzMiAoIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMydWRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkgCisgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSAsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwZF9lcHUzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfY3Z0cGQydWRxNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZHBkX2VwdTMyKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBkX2VwdTMyKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHBkX2VwdTMyIChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHBkX2VwdTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHBkX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKy8qIFVucGFjayBhbmQgSW50ZXJsZWF2ZSAqLworCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bnBhY2toaV9wZChfX201MTJkIF9fYSwgX19tNTEyZCBfX2IpCit7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGRmKV9fYSwgKF9fdjhkZilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCA5LCAxKzIsIDkrMiwgMSs0LCA5KzQsIDErNiwgOSs2KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2hpX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bnBhY2toaV9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2hpX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3VucGFja2hpX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bnBhY2tsb19wZChfX201MTJkIF9fYSwgX19tNTEyZCBfX2IpCit7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGRmKV9fYSwgKF9fdjhkZilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCA4LCAwKzIsIDgrMiwgMCs0LCA4KzQsIDArNiwgOCs2KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2xvX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bnBhY2tsb19wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2xvX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bnBhY2tsb19wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bnBhY2toaV9wcyhfX201MTIgX19hLCBfX201MTIgX19iKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZzZilfX2EsIChfX3YxNnNmKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgICAgMTgsICAgIDMsICAgIDE5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKzQsICAxOCs0LCAgMys0LCAgMTkrNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMis4LCAgMTgrOCwgIDMrOCwgIDE5KzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIrMTIsIDE4KzEyLCAzKzEyLCAxOSsxMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2hpX3BzKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5wYWNraGlfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2hpX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VucGFja2hpX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VucGFja2xvX3BzKF9fbTUxMiBfX2EsIF9fbTUxMiBfX2IpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnNmKV9fYSwgKF9fdjE2c2YpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAxNiwgICAgMSwgICAgMTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDArNCwgIDE2KzQsICAxKzQsICAxNys0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKzgsICAxNis4LCAgMSs4LCAgMTcrOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCsxMiwgMTYrMTIsIDErMTIsIDE3KzEyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdW5wYWNrbG9fcHMoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl91bnBhY2tsb19wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfdW5wYWNrbG9fcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5wYWNrbG9fcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNraGlfZXBpMzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2c2kpX19BLCAoX192MTZzaSlfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAgICAxOCwgICAgMywgICAgMTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKzQsICAxOCs0LCAgMys0LCAgMTkrNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIrOCwgIDE4KzgsICAzKzgsICAxOSs4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMisxMiwgMTgrMTIsIDMrMTIsIDE5KzEyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2hpX2VwaTMyKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfdW5wYWNraGlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel91bnBhY2toaV9lcGkzMihfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfdW5wYWNraGlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNrbG9fZXBpMzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2c2kpX19BLCAoX192MTZzaSlfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAxNiwgICAgMSwgICAgMTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKzQsICAxNis0LCAgMSs0LCAgMTcrNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDArOCwgIDE2KzgsICAxKzgsICAxNys4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCsxMiwgMTYrMTIsIDErMTIsIDE3KzEyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2xvX2VwaTMyKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfdW5wYWNrbG9fZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel91bnBhY2tsb19lcGkzMihfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfdW5wYWNrbG9fZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNraGlfZXBpNjQoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhkaSlfX0EsIChfX3Y4ZGkpX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgOSwgMSsyLCA5KzIsIDErNCwgOSs0LCAxKzYsIDkrNik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza191bnBhY2toaV9lcGk2NChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl91bnBhY2toaV9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2hpX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfdW5wYWNraGlfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNrbG9fZXBpNjQgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4ZGkpX19BLCAoX192OGRpKV9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDgsIDArMiwgOCsyLCAwKzQsIDgrNCwgMCs2LCA4KzYpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdW5wYWNrbG9fZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3VucGFja2xvX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfdW5wYWNrbG9fZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfdW5wYWNrbG9fZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKKy8qIEJpdCBUZXN0ICovCisKK3N0YXRpYyBfX2lubGluZSBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdGVzdF9lcGkzMl9tYXNrKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWQ1MTIgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza190ZXN0X2VwaTMyX21hc2sgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWQ1MTIgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl90ZXN0X2VwaTY0X21hc2soX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1xNTEyICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdGVzdF9lcGk2NF9tYXNrIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RtcTUxMiAoKF9fdjhkaSkgX19BLCAoX192OGRpKSBfX0IsIF9fVSk7Cit9CisKKworLyogU0lNRCBsb2FkIG9wcyAqLworCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9sb2FkdV9zaTUxMiAodm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVzaTUxMl9tYXNrICgoY29uc3QgaW50ICopIF9fUCwKKyAgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbG9hZHVfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfbG9hZGRxdXNpNTEyX21hc2sgKChjb25zdCBpbnQgKikgX19QLAorICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZHVfZXBpMzIoX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVzaTUxMl9tYXNrICgoY29uc3QgaW50ICopX19QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbG9hZHVfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1ZGk1MTJfbWFzayAoKGNvbnN0IGxvbmcgbG9uZyAqKSBfX1AsCisgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2xvYWR1X2VwaTY0KF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVkaTUxMl9tYXNrICgoY29uc3QgbG9uZyBsb25nICopX19QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbG9hZHVfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2xvYWR1cHM1MTJfbWFzayAoKGNvbnN0IGZsb2F0ICopIF9fUCwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZHVfcHMoX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbG9hZHVwczUxMl9tYXNrICgoY29uc3QgZmxvYXQgKilfX1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19sb2FkdV9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2xvYWR1cGQ1MTJfbWFzayAoKGNvbnN0IGRvdWJsZSAqKSBfX1AsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZHVfcGQoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbG9hZHVwZDUxMl9tYXNrICgoY29uc3QgZG91YmxlICopX19QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9sb2FkdV9wZChkb3VibGUgY29uc3QgKl9fcCkKK3sKKyAgc3RydWN0IF9fbG9hZHVfcGQgeworICAgIF9fbTUxMmQgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfcGQqKV9fcCktPl9fdjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9sb2FkdV9wcyhmbG9hdCBjb25zdCAqX19wKQoreworICBzdHJ1Y3QgX19sb2FkdV9wcyB7CisgICAgX19tNTEyIF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3BzKilfX3ApLT5fX3Y7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbG9hZF9wcyhmbG9hdCBjb25zdCAqX19wKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbG9hZGFwczUxMl9tYXNrICgoY29uc3QgX192MTZzZiAqKV9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19sb2FkX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9sb2FkYXBzNTEyX21hc2sgKChjb25zdCBfX3YxNnNmICopIF9fUCwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZF9wcyhfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9sb2FkYXBzNTEyX21hc2sgKChjb25zdCBfX3YxNnNmICopX19QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2xvYWRfcGQoZG91YmxlIGNvbnN0ICpfX3ApCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbG9hZGFwZDUxMl9tYXNrICgoY29uc3QgX192OGRmICopX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbG9hZF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2xvYWRhcGQ1MTJfbWFzayAoKGNvbnN0IF9fdjhkZiAqKSBfX1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9sb2FkX3BkKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2xvYWRhcGQ1MTJfbWFzayAoKGNvbnN0IF9fdjhkZiAqKV9fUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbG9hZF9zaTUxMiAodm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKihfX201MTJpICopIF9fUDsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbG9hZF9lcGkzMiAodm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKihfX201MTJpICopIF9fUDsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbG9hZF9lcGk2NCAodm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKihfX201MTJpICopIF9fUDsKK30KKworLyogU0lNRCBzdG9yZSBvcHMgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdG9yZXVfZXBpNjQodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWRxdWRpNTEyX21hc2sgKChsb25nIGxvbmcgKilfX1AsIChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0b3JldV9zaTUxMiAodm9pZCAqX19QLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVzaTUxMl9tYXNrICgoaW50ICopIF9fUCwgKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdG9yZXVfZXBpMzIodm9pZCAqX19QLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVzaTUxMl9tYXNrICgoaW50ICopX19QLCAoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3RvcmV1X3BkKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmV1cGQ1MTJfbWFzayAoKGRvdWJsZSAqKV9fUCwgKF9fdjhkZikgX19BLCAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0b3JldV9wZCh2b2lkICpfX1AsIF9fbTUxMmQgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwZDUxMl9tYXNrKChkb3VibGUgKilfX1AsIChfX3Y4ZGYpX19BLCAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N0b3JldV9wcyh2b2lkICpfX1AsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBzNTEyX21hc2sgKChmbG9hdCAqKV9fUCwgKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3RvcmV1X3BzKHZvaWQgKl9fUCwgX19tNTEyIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmV1cHM1MTJfbWFzaygoZmxvYXQgKilfX1AsIChfX3YxNnNmKV9fQSwgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3RvcmVfcGQodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWFwZDUxMl9tYXNrICgoX192OGRmICopX19QLCAoX192OGRmKSBfX0EsIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3RvcmVfcGQodm9pZCAqX19QLCBfX201MTJkIF9fQSkKK3sKKyAgKihfX201MTJkKilfX1AgPSBfX0E7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3RvcmVfcHModm9pZCAqX19QLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWFwczUxMl9tYXNrICgoX192MTZzZiAqKV9fUCwgKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3RvcmVfcHModm9pZCAqX19QLCBfX201MTIgX19BKQoreworICAqKF9fbTUxMiopX19QID0gX19BOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdG9yZV9zaTUxMiAodm9pZCAqX19QLCBfX201MTJpIF9fQSkKK3sKKyAgKihfX201MTJpICopIF9fUCA9IF9fQTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3RvcmVfZXBpMzIgKHZvaWQgKl9fUCwgX19tNTEyaSBfX0EpCit7CisgICooX19tNTEyaSAqKSBfX1AgPSBfX0E7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0b3JlX2VwaTY0ICh2b2lkICpfX1AsIF9fbTUxMmkgX19BKQoreworICAqKF9fbTUxMmkgKikgX19QID0gX19BOworfQorCisvKiBNYXNrIG9wcyAqLworCitzdGF0aWMgX19pbmxpbmUgX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2tub3QoX19tbWFzazE2IF9fTSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2tub3RoaShfX00pOworfQorCisvKiBJbnRlZ2VyIGNvbXBhcmUgKi8KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGVxX2VwaTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBlcV9lcGkzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZXFkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZXFfZXB1MzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZXFfZXB1MzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGVxX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBlcV9lcGk2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGVxX2VwdTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGVxX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcGkzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ2VfZXBpMzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGdlX2VwdTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGdlX2VwdTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ2VfZXBpNjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGdlX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcHU2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBnZV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ3RfZXBpMzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGd0ZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGd0X2VwaTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBndF9lcHUzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBndF9lcHUzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ3RfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGd0X2VwaTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0cTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ3RfZXB1NjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ3RfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGxlX2VwaTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsZV9lcGkzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbGVfZXB1MzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbGVfZXB1MzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsZV9lcGk2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbGVfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGxlX2VwdTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGxlX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcGkzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbHRfZXBpMzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGx0X2VwdTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGx0X2VwdTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbHRfZXBpNjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGx0X2VwaTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcHU2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsdF9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbmVxX2VwaTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBuZXFfZXBpMzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcG5lcV9lcHUzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBuZXFfZXB1MzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBuZXFfZXBpNjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcG5lcV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbmVxX2VwdTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcG5lcV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaThfZXBpMzIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJkNTEyX21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpOF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJkNTEyX21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaThfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJkNTEyX21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcGk4X2VwaTY0IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hicTUxMl9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGk4X2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hicTUxMl9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXBpOF9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hicTUxMl9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaTMyX2VwaTY0IChfX20yNTZpIF9fWCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hkcTUxMl9tYXNrICgoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTMyX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fWCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hkcTUxMl9tYXNrICgoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGkzMl9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fWCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hkcTUxMl9tYXNrICgoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpMTZfZXBpMzIgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeHdkNTEyX21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpMTZfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbW92c3h3ZDUxMl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGkxNl9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1vdnN4d2Q1MTJfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaTE2X2VwaTY0IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbW92c3h3cTUxMl9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTE2X2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbW92c3h3cTUxMl9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGkxNl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbW92c3h3cTUxMl9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXB1OF9lcGkzMiAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1vdnp4YmQ1MTJfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHU4X2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1vdnp4YmQ1MTJfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXB1OF9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1vdnp4YmQ1MTJfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwdThfZXBpNjQgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJxNTEyX21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwdThfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJxNTEyX21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcHU4X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJxNTEyX21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXB1MzJfZXBpNjQgKF9fbTI1NmkgX19YKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGRxNTEyX21hc2sgKChfX3Y4c2kpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXB1MzJfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGRxNTEyX21hc2sgKChfX3Y4c2kpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwdTMyX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGRxNTEyX21hc2sgKChfX3Y4c2kpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcHUxNl9lcGkzMiAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1vdnp4d2Q1MTJfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHUxNl9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdkNTEyX21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwdTE2X2VwaTMyIChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbW92enh3ZDUxMl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXB1MTZfZXBpNjQgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdxNTEyX21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXB1MTZfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdxNTEyX21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwdTE2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdxNTEyX21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9yb3J2X2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvcnZkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcm9ydl9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wcm9ydmQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9yb3J2X2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvcnZkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9yb3J2X2VwaTY0IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvcnZxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yb3J2X2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvcnZxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9yb3J2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wcm9ydnE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKworCisjZGVmaW5lIF9tbTUxMl9jbXBfZXBpMzJfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2NtcF9lcHUzMl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfY21wX2VwaTY0X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jbXBfZXB1NjRfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwaTMyX21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKG0pKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXB1MzJfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikobSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9lcGk2NF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwdTY0X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW01MTJfcm9sX2VwaTMyKGEsIGIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wcm9sZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcm9sX2VwaTMyKFcsIFUsIGEsIGIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wcm9sZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JvbF9lcGkzMihVLCBhLCBiKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHJvbGQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoYSksIChpbnQpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcm9sX2VwaTY0KGEsIGIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wcm9scTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcm9sX2VwaTY0KFcsIFUsIGEsIGIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wcm9scTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpLCAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcm9sX2VwaTY0KFUsIGEsIGIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wcm9scTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9yb2x2X2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvbHZkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcm9sdl9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wcm9sdmQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9yb2x2X2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvbHZkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9yb2x2X2VwaTY0IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvbHZxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yb2x2X2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvbHZxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9yb2x2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wcm9sdnE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX3Jvcl9lcGkzMihBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHJvcmQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3Jvcl9lcGkzMihXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHJvcmQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yb3JfZXBpMzIoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3Byb3JkNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3Jvcl9lcGk2NChBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHJvcnE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3Jvcl9lcGk2NChXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHJvcnE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSwgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3Jvcl9lcGk2NChVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHJvcnE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc2xsaV9lcGkzMihBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNsbGRpNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NsbGlfZXBpMzIoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzbGxkaTUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2xsaV9lcGkzMihVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNsbGRpNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc2xsaV9lcGk2NChBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNsbHFpNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NsbGlfZXBpNjQoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzbGxxaTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2xsaV9lcGk2NChVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNsbHFpNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworCisKKyNkZWZpbmUgX21tNTEyX3NybGlfZXBpMzIoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzcmxkaTUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zcmxpX2VwaTMyKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3JsZGk1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NybGlfZXBpMzIoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzcmxkaTUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3NybGlfZXBpNjQoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzcmxxaTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zcmxpX2VwaTY0KFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3JscWk1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NybGlfZXBpNjQoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzcmxxaTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19sb2FkX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX21vdmRxYTMybG9hZDUxMl9tYXNrICgoY29uc3QgX192MTZzaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZF9lcGkzMiAoX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX21vdmRxYTMybG9hZDUxMl9tYXNrICgoY29uc3QgX192MTZzaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N0b3JlX2VwaTMyICh2b2lkICpfX1AsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZkcWEzMnN0b3JlNTEyX21hc2sgKChfX3YxNnNpICopIF9fUCwgKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbW92X2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIgKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbW92X2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMiAoKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbW92X2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tb3ZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2xvYWRfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWE2NGxvYWQ1MTJfbWFzayAoKGNvbnN0IF9fdjhkaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2xvYWRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX21vdmRxYTY0bG9hZDUxMl9tYXNrICgoY29uc3QgX192OGRpICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N0b3JlX2VwaTY0ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21vdmRxYTY0c3RvcmU1MTJfbWFzayAoKF9fdjhkaSAqKSBfX1AsIChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbW92ZWR1cF9wZCAoX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGRmKV9fQSwgKF9fdjhkZilfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAyLCAyLCA0LCA0LCA2LCA2KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21vdmVkdXBfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfbW92ZWR1cF9wZChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tb3ZlZHVwX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfbW92ZWR1cF9wZChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX2ZpeHVwaW1tX3JvdW5kX3BkKEEsIEIsIEMsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19maXh1cGltbV9yb3VuZF9wZChBLCBVLCBCLCBDLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9maXh1cGltbV9wZChBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZpeHVwaW1tX3BkKEEsIFUsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9maXh1cGltbV9yb3VuZF9wZChVLCBBLCBCLCBDLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBkNTEyX21hc2t6KChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2ZpeHVwaW1tX3BkKFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcGQ1MTJfbWFza3ooKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX2ZpeHVwaW1tX3JvdW5kX3BzKEEsIEIsIEMsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZml4dXBpbW1wczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZml4dXBpbW1fcm91bmRfcHMoQSwgVSwgQiwgQywgaW1tLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9maXh1cGltbXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2ZpeHVwaW1tX3BzKEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZml4dXBpbW1wczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZml4dXBpbW1fcHMoQSwgVSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9maXh1cGltbXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2ZpeHVwaW1tX3JvdW5kX3BzKFUsIEEsIEIsIEMsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZml4dXBpbW1wczUxMl9tYXNreigoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZml4dXBpbW1fcHMoVSwgQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9maXh1cGltbXBzNTEyX21hc2t6KChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW1fZml4dXBpbW1fcm91bmRfc2QoQSwgQiwgQywgaW1tLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZml4dXBpbW1zZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2ZpeHVwaW1tX3JvdW5kX3NkKEEsIFUsIEIsIEMsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tc2RfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2ZpeHVwaW1tX3NkKEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tc2RfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZml4dXBpbW1fc2QoQSwgVSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZml4dXBpbW1zZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2ZpeHVwaW1tX3JvdW5kX3NkKFUsIEEsIEIsIEMsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tc2RfbWFza3ooKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9maXh1cGltbV9zZChVLCBBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXNkX21hc2t6KChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9maXh1cGltbV9yb3VuZF9zcyhBLCBCLCBDLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tc3NfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZml4dXBpbW1fcm91bmRfc3MoQSwgVSwgQiwgQywgaW1tLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9maXh1cGltbXNzX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fZml4dXBpbW1fc3MoQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9maXh1cGltbXNzX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2ZpeHVwaW1tX3NzKEEsIFUsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZml4dXBpbW1zc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2ZpeHVwaW1tX3JvdW5kX3NzKFUsIEEsIEIsIEMsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZml4dXBpbW1zc19tYXNreigoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9maXh1cGltbV9zcyhVLCBBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tc3NfbWFza3ooKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX2dldGV4cF9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2V0ZXhwc2QxMjhfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9nZXRleHBfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBzZDEyOF9yb3VuZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2dldGV4cF9zZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwc2QxMjhfcm91bmRfbWFzayAoIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfZ2V0ZXhwX3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2dldGV4cHNkMTI4X3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2dldGV4cF9zZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBzZDEyOF9yb3VuZF9tYXNrICggKF9fdjJkZikgX19BLAorICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrel9nZXRleHBfcm91bmRfc2QoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2V0ZXhwc2QxMjhfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9nZXRleHBfcm91bmRfc3MoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2V0ZXhwc3MxMjhfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZ2V0ZXhwX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwc3MxMjhfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwgKF9fdjRzZikgIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2dldGV4cF9zcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9nZXRleHBzczEyOF9yb3VuZF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrX2dldGV4cF9yb3VuZF9zcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dldGV4cHNzMTI4X3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZ2V0ZXhwX3NzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHNzMTI4X3JvdW5kX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfZ2V0ZXhwX3JvdW5kX3NzKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2V0ZXhwc3MxMjhfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fZ2V0bWFudF9yb3VuZF9zZChBLCBCLCBDLCBELCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2V0bWFudHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChEKTw8MikgfCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fZ2V0bWFudF9zZChBLCBCLCBDLCBEKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoRCk8PDIpIHwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZ2V0bWFudF9zZChXLCBVLCBBLCBCLCBDLCBEKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEQpPDwyKSB8IChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2dldG1hbnRfcm91bmRfc2QoVywgVSwgQSwgQiwgQywgRCwgUikoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2V0bWFudHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChEKTw8MikgfCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfZ2V0bWFudF9zZChVLCBBLCBCLCBDLCBEKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEQpPDwyKSB8IChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfZ2V0bWFudF9yb3VuZF9zZChVLCBBLCBCLCBDLCBELCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEQpPDwyKSB8IChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fZ2V0bWFudF9yb3VuZF9zcyhBLCBCLCBDLCBELCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nZXRtYW50c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoRCk8PDIpIHwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9nZXRtYW50X3NzKEEsIEIsIEMsIEQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dldG1hbnRzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChEKTw8MikgfCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19nZXRtYW50X3NzKFcsIFUsIEEsIEIsIEMsIEQpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2V0bWFudHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEQpPDwyKSB8IChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZ2V0bWFudF9yb3VuZF9zcyhXLCBVLCBBLCBCLCBDLCBELCBSKSh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dldG1hbnRzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChEKTw8MikgfCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfZ2V0bWFudF9zcyhVLCBBLCBCLCBDLCBEKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dldG1hbnRzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChEKTw8MikgfCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2dldG1hbnRfcm91bmRfc3MoVSwgQSwgQiwgQywgRCwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nZXRtYW50c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoRCk8PDIpIHwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2ttb3YgKF9fbW1hc2sxNiBfX0EpCit7CisgIHJldHVybiAgX19BOworfQorCisjZGVmaW5lIF9tbV9jb21pX3JvdW5kX3NkKEEsIEIsIFAsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChpbnQpX19idWlsdGluX2lhMzJfdmNvbWlzZCgoX192MmRmKShfX20xMjhkKShBKSwgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFApLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2NvbWlfcm91bmRfc3MoQSwgQiwgUCwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKGludClfX2J1aWx0aW5faWEzMl92Y29taXNzKChfX3Y0c2YpKF9fbTEyOCkoQSksIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFApLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNkX3NpNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChsb25nIGxvbmcpX19idWlsdGluX2lhMzJfdmN2dHNkMnNpNjQoKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fSSwKKyAgICAgICAgIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NsbF9lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzbGxkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NsbF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc2xsX2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbGQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zbGxfZXBpNjQgKF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xscTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zbGxfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xscTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc2xsX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xscTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NsbHZfZXBpMzIgKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjE2c2lfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zbGx2X2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzbGx2MTZzaV9tYXNrICgoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NsbHZfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjE2c2lfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NsbHZfZXBpNjQgKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjhkaV9tYXNrICgoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgX21tNTEyX3VuZGVmaW5lZF9wZCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NsbHZfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjhkaV9tYXNrICgoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc2xsdl9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbHY4ZGlfbWFzayAoKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcmFfZXBpMzIgKF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JhZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zcmFfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYWQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NyYV9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmFkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3JhX2VwaTY0IChfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3JhX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NyYV9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcmF2X2VwaTMyIChfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXYxNnNpX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3Jhdl9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JhdjE2c2lfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zcmF2X2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXYxNnNpX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcmF2X2VwaTY0IChfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXY4ZGlfbWFzayAoKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3Jhdl9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2OGRpX21hc2sgKChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAoX192OGRpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zcmF2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JhdjhkaV9tYXNrICgoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NybF9lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmxkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NybF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JsZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3JsX2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybGQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcmxfZXBpNjQgKF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JscTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zcmxfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JscTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3JsX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JscTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NybHZfZXBpMzIgKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjE2c2lfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zcmx2X2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2MTZzaV9tYXNrICgoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NybHZfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjE2c2lfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NybHZfZXBpNjQgKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjhkaV9tYXNrICgoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zcmx2X2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHY4ZGlfbWFzayAoKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NybHZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2OGRpX21hc2sgKChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAoX192OGRpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX3Rlcm5hcnlsb2dpY19lcGkzMihBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ2Q1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza190ZXJuYXJ5bG9naWNfZXBpMzIoQSwgVSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHRlcm5sb2dkNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel90ZXJuYXJ5bG9naWNfZXBpMzIoVSwgQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHRlcm5sb2dkNTEyX21hc2t6KChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfdGVybmFyeWxvZ2ljX2VwaTY0KEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9ncTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfdGVybmFyeWxvZ2ljX2VwaTY0KEEsIFUsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9ncTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel90ZXJuYXJ5bG9naWNfZXBpNjQoVSwgQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHRlcm5sb2dxNTEyX21hc2t6KChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmRzZF9pNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChsb25nIGxvbmcpX19idWlsdGluX2lhMzJfdmN2dHNkMnNpNjQoKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fY3Z0X3JvdW5kc2Rfc2kzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGludClfX2J1aWx0aW5faWEzMl92Y3Z0c2Qyc2kzMigoX192MmRmKShfX20xMjhkKShBKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmRzZF9pMzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChpbnQpX19idWlsdGluX2lhMzJfdmN2dHNkMnNpMzIoKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fY3Z0X3JvdW5kc2RfdTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAodW5zaWduZWQgaW50KV9fYnVpbHRpbl9pYTMyX3ZjdnRzZDJ1c2kzMigoX192MmRmKShfX20xMjhkKShBKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzZF91MzIgKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKHVuc2lnbmVkKSBfX2J1aWx0aW5faWEzMl92Y3Z0c2QydXNpMzIgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmRzZF91NjQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgICh1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2lhMzJfdmN2dHNkMnVzaTY0KChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNkX3U2NCAoX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKSBfX2J1aWx0aW5faWEzMl92Y3Z0c2QydXNpNjQgKChfX3YyZGYpCisgICAgICAgICAgICAgICAgIF9fQSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fY3Z0X3JvdW5kc3Nfc2kzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGludClfX2J1aWx0aW5faWEzMl92Y3Z0c3Myc2kzMigoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNzX2kzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGludClfX2J1aWx0aW5faWEzMl92Y3Z0c3Myc2kzMigoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNzX3NpNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChsb25nIGxvbmcpX19idWlsdGluX2lhMzJfdmN2dHNzMnNpNjQoKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmRzc19pNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChsb25nIGxvbmcpX19idWlsdGluX2lhMzJfdmN2dHNzMnNpNjQoKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmRzc191MzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgICh1bnNpZ25lZCBpbnQpX19idWlsdGluX2lhMzJfdmN2dHNzMnVzaTMyKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c3NfdTMyIChfX20xMjggX19BKQoreworICByZXR1cm4gKHVuc2lnbmVkKSBfX2J1aWx0aW5faWEzMl92Y3Z0c3MydXNpMzIgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmRzc191NjQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgICh1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2lhMzJfdmN2dHNzMnVzaTY0KChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c3NfdTY0IChfX20xMjggX19BKQoreworICByZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykgX19idWlsdGluX2lhMzJfdmN2dHNzMnVzaTY0ICgoX192NHNmKQorICAgICAgICAgICAgICAgICBfX0EsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX2N2dHRfcm91bmRzZF9pMzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChpbnQpX19idWlsdGluX2lhMzJfdmN2dHRzZDJzaTMyKChfX3YyZGYpKF9fbTEyOGQpKEEpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dHRfcm91bmRzZF9zaTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3ZjdnR0c2Qyc2kzMigoX192MmRmKShfX20xMjhkKShBKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHNkX2kzMiAoX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoaW50KSBfX2J1aWx0aW5faWEzMl92Y3Z0dHNkMnNpMzIgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fY3Z0dF9yb3VuZHNkX3NpNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChsb25nIGxvbmcpX19idWlsdGluX2lhMzJfdmN2dHRzZDJzaTY0KChfX3YyZGYpKF9fbTEyOGQpKEEpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dHRfcm91bmRzZF9pNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChsb25nIGxvbmcpX19idWlsdGluX2lhMzJfdmN2dHRzZDJzaTY0KChfX3YyZGYpKF9fbTEyOGQpKEEpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0c2RfaTY0IChfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChsb25nIGxvbmcpIF9fYnVpbHRpbl9pYTMyX3ZjdnR0c2Qyc2k2NCAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9jdnR0X3JvdW5kc2RfdTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAodW5zaWduZWQgaW50KV9fYnVpbHRpbl9pYTMyX3ZjdnR0c2QydXNpMzIoKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHNkX3UzMiAoX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAodW5zaWduZWQpIF9fYnVpbHRpbl9pYTMyX3ZjdnR0c2QydXNpMzIgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fY3Z0dF9yb3VuZHNkX3U2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl92Y3Z0dHNkMnVzaTY0KChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0c2RfdTY0IChfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpIF9fYnVpbHRpbl9pYTMyX3ZjdnR0c2QydXNpNjQgKChfX3YyZGYpCisgICAgICAgICAgICAgICAgICBfX0EsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9jdnR0X3JvdW5kc3NfaTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3ZjdnR0c3Myc2kzMigoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dHRfcm91bmRzc19zaTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3ZjdnR0c3Myc2kzMigoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0c3NfaTMyIChfX20xMjggX19BKQoreworICByZXR1cm4gKGludCkgX19idWlsdGluX2lhMzJfdmN2dHRzczJzaTMyICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX2N2dHRfcm91bmRzc19pNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChsb25nIGxvbmcpX19idWlsdGluX2lhMzJfdmN2dHRzczJzaTY0KChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fY3Z0dF9yb3VuZHNzX3NpNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChsb25nIGxvbmcpX19idWlsdGluX2lhMzJfdmN2dHRzczJzaTY0KChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzc19pNjQgKF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAobG9uZyBsb25nKSBfX2J1aWx0aW5faWEzMl92Y3Z0dHNzMnNpNjQgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fY3Z0dF9yb3VuZHNzX3UzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKHVuc2lnbmVkIGludClfX2J1aWx0aW5faWEzMl92Y3Z0dHNzMnVzaTMyKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHNzX3UzMiAoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuICh1bnNpZ25lZCkgX19idWlsdGluX2lhMzJfdmN2dHRzczJ1c2kzMiAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9jdnR0X3JvdW5kc3NfdTY0KEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAodW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9pYTMyX3ZjdnR0c3MydXNpNjQoKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHNzX3U2NCAoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpIF9fYnVpbHRpbl9pYTMyX3ZjdnR0c3MydXNpNjQgKChfX3Y0c2YpCisgICAgICAgICAgICAgICAgICBfX0EsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2syX3Blcm11dGV4MnZhcl9wZCAoX19tNTEyZCBfX0EsIF9fbTUxMmkgX19JLCBfX21tYXNrOCBfX1UsCisgICAgICAgICAgICBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAoX192OGRpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrMl9wZXJtdXRleDJ2YXJfcHMgKF9fbTUxMiBfX0EsIF9fbTUxMmkgX19JLCBfX21tYXNrMTYgX19VLAorICAgICAgICAgICAgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fSSwKKyAgICAgICAgIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworI2RlZmluZSBfbW01MTJfcGVybXV0ZV9wZChYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhkZikoX19tNTEyZCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDApICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoQykgPj4gMSkgJiAweDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyAoKChDKSA+PiAyKSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiArICgoKEMpID4+IDMpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgPj4gNCkgJiAweDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSA+PiA1KSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiArICgoKEMpID4+IDYpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICsgKCgoQykgPj4gNykgJiAweDEpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19wZXJtdXRlX3BkKFcsIFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF81MTIoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfcGVybXV0ZV9wZCgoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcGVybXV0ZV9wZChVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3Blcm11dGVfcGQoKFgpLCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9wZXJtdXRlX3BzKFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnNmKShfX201MTIpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoQykgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoQykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoQykgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoQykgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoQykgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoQykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoQykgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoQykgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoQykgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoQykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoQykgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoQykgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoQykgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoQykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoQykgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoQykgPj4gNikgJiAweDMpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19wZXJtdXRlX3BzKFcsIFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfcGVybXV0ZV9wcygoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVykpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9wZXJtdXRlX3BzKFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfcGVybXV0ZV9wcygoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXZhcl9wZCAoX19tNTEyZCBfX0EsIF9fbTUxMmkgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQywKKyAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgX21tNTEyX3VuZGVmaW5lZF9wZCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wZXJtdXRldmFyX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyaSBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19DLAorICAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wZXJtdXRldmFyX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJpIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAoX192OGRpKSBfX0MsCisgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wZXJtdXRldmFyX3BzIChfX201MTIgX19BLCBfX201MTJpIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0MsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgICAgX21tNTEyX3VuZGVmaW5lZF9wcyAoKSwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Blcm11dGV2YXJfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMmkgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQywKKyAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wZXJtdXRldmFyX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTJpIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0MsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXgydmFyX3BkKF9fbTUxMmQgX19BLCBfX201MTJpIF9fSSwgX19tNTEyZCBfX0IpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBkNTEyX21hc2sgKChfX3Y4ZGkpIF9fSQorICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wZXJtdXRleDJ2YXJfcGQgKF9fbTUxMmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19JLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19JCisgICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGVybXV0ZXgydmFyX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJpIF9fSSwKKyAgICAgICAgICAgIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwZDUxMl9tYXNreiAoKF9fdjhkaSkgX19JCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4MnZhcl9wcyhfX201MTIgX19BLCBfX201MTJpIF9fSSwgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwczUxMl9tYXNrICgoX192MTZzaSkgX19JCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Blcm11dGV4MnZhcl9wcyAoX19tNTEyIF9fQSwgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0ksIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycHM1MTJfbWFzayAoKF9fdjE2c2kpIF9fSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3Blcm11dGV4MnZhcl9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyaSBfX0ksCisgICAgICAgICAgICBfX201MTIgX19CKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBzNTEyX21hc2t6ICgoX192MTZzaSkgX19JCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl90ZXN0bl9lcGkzMl9tYXNrIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tZDUxMiAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdGVzdG5fZXBpMzJfbWFzayAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2sxNikgX19idWlsdGluX2lhMzJfcHRlc3RubWQ1MTIgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdGVzdG5fZXBpNjRfbWFzayAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tcTUxMiAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdGVzdG5fZXBpNjRfbWFzayAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm1xNTEyICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAoX192OGRpKSBfX0IsIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dHRfcm91bmRwZF9lcHUzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0dF9yb3VuZHBkX2VwdTMyKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnR0cGQydWRxNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dHRfcm91bmRwZF9lcHUzMihVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cGRfZXB1MzIgKF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1ZHE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwZF9lcHUzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0dHBkX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1ZHE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9yb3VuZHNjYWxlX3JvdW5kX3NkKEEsIEIsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX3JvdW5kc2NhbGVfc2QoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcm91bmRzY2FsZV9zZChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yb3VuZHNjYWxlX3JvdW5kX3NkKFcsIFUsIEEsIEIsIEksIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoSSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcm91bmRzY2FsZV9zZChVLCBBLCBCLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcm91bmRzY2FsZV9yb3VuZF9zZChVLCBBLCBCLCBJLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9yb3VuZHNjYWxlX3JvdW5kX3NzKEEsIEIsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcm5kc2NhbGVzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fcm91bmRzY2FsZV9zcyhBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JvdW5kc2NhbGVfc3MoVywgVSwgQSwgQiwgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcm5kc2NhbGVzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcm91bmRzY2FsZV9yb3VuZF9zcyhXLCBVLCBBLCBCLCBJLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoSSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yb3VuZHNjYWxlX3NzKFUsIEEsIEIsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JvdW5kc2NhbGVfcm91bmRfc3MoVSwgQSwgQiwgSSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcm5kc2NhbGVzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoSSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9zY2FsZWZfcm91bmRfcGQoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc2NhbGVmX3JvdW5kX3BkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2NhbGVmX3JvdW5kX3BkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2NhbGVmX3BkIChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfc2NhbGVmcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICAgIF9tbTUxMl91bmRlZmluZWRfcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc2NhbGVmX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfc2NhbGVmcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zY2FsZWZfcGQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9zY2FsZWZfcm91bmRfcHMoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc2NhbGVmcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NjYWxlZl9yb3VuZF9wcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zY2FsZWZwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NjYWxlZl9yb3VuZF9wcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zY2FsZWZwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NjYWxlZl9wcyAoX19tNTEyIF9fQSwgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICBfbW01MTJfdW5kZWZpbmVkX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCisgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zY2FsZWZfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc2NhbGVmX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfc2NhbGVmcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fc2NhbGVmX3JvdW5kX3NkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zY2FsZWZzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zY2FsZWZfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZzZF9yb3VuZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGYpKCBfX0IpLCAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc2NhbGVmX3NkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZzZF9yb3VuZF9tYXNrICggKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfc2NhbGVmX3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zY2FsZWZzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zY2FsZWZfc2QgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc2NhbGVmc2Rfcm91bmRfbWFzayAoIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2t6X3NjYWxlZl9yb3VuZF9zZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2NhbGVmc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9zY2FsZWZfcm91bmRfc3MoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfc2NhbGVmc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2NhbGVmX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2NhbGVmc3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgIChfX3Y0c2YpKCBfX0IpLCAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc2NhbGVmX3NzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnNzX3JvdW5kX21hc2sgKCAoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrX3NjYWxlZl9yb3VuZF9zcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zY2FsZWZzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NjYWxlZl9zcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zY2FsZWZzc19yb3VuZF9tYXNrICggKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfc2NhbGVmX3JvdW5kX3NzKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NjYWxlZnNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9zcmFpX2VwaTMyKEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3JhZGk1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc3JhaV9lcGkzMihXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNyYWRpNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zcmFpX2VwaTMyKFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3JhZGk1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9zcmFpX2VwaTY0KEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3JhcWk1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc3JhaV9lcGk2NChXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNyYXFpNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zcmFpX2VwaTY0KFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3JhcWk1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9zaHVmZmxlX2YzMng0KEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc2h1Zl9mMzJ4NF9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zaHVmZmxlX2YzMng0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc2h1Zl9mMzJ4NF9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2h1ZmZsZV9mMzJ4NChVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NodWZfZjMyeDRfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc2h1ZmZsZV9mNjR4MihBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zaHVmX2Y2NHgyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zaHVmZmxlX2Y2NHgyKFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NodWZfZjY0eDJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2h1ZmZsZV9mNjR4MihVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zaHVmX2Y2NHgyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9zaHVmZmxlX2kzMng0KEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTMyeDRfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc2h1ZmZsZV9pMzJ4NChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zaHVmX2kzMng0X21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zaHVmZmxlX2kzMng0KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTMyeDRfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9zaHVmZmxlX2k2NHgyKEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTY0eDJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zaHVmZmxlX2k2NHgyKFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTY0eDJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2h1ZmZsZV9pNjR4MihVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zaHVmX2k2NHgyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9zaHVmZmxlX3BkKEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICArICgoKE0pID4+IDApICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICArICgoKE0pID4+IDEpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICArICgoKE0pID4+IDIpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCArICgoKE0pID4+IDMpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKE0pID4+IDQpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKE0pID4+IDUpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICArICgoKE0pID4+IDYpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNCArICgoKE0pID4+IDcpICYgMHgxKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc2h1ZmZsZV9wZChXLCBVLCBBLCBCLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NodWZmbGVfcGQoKEEpLCAoQiksIChNKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2h1ZmZsZV9wZChVLCBBLCBCLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NodWZmbGVfcGQoKEEpLCAoQiksIChNKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3NodWZmbGVfcHMoQSwgQiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoTSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoTSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICsgKCgoTSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICsgKCgoTSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoTSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoTSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwICsgKCgoTSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwICsgKCgoTSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoTSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoTSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0ICsgKCgoTSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0ICsgKCgoTSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoTSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoTSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4ICsgKCgoTSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4ICsgKCgoTSkgPj4gNikgJiAweDMpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zaHVmZmxlX3BzKFcsIFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2h1ZmZsZV9wcygoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NodWZmbGVfcHMoVSwgQSwgQiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zaHVmZmxlX3BzKChBKSwgKEIpLCAoTSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCkpOyB9KQorCisjZGVmaW5lIF9tbV9zcXJ0X3JvdW5kX3NkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zcXJ0c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcXJ0X3NkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zcXJ0c2Rfcm91bmRfbWFzayAoIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrX3NxcnRfcm91bmRfc2QoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NxcnRzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zcXJ0X3NkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3NxcnRzZF9yb3VuZF9tYXNrICggKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfc3FydF9yb3VuZF9zZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc3FydHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fc3FydF9yb3VuZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zcXJ0c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcXJ0X3NzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NxcnRzc19yb3VuZF9tYXNrICggKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfc3FydF9yb3VuZF9zcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zcXJ0c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zcXJ0X3NzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NxcnRzc19yb3VuZF9tYXNrICggKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfc3FydF9yb3VuZF9zcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zcXJ0c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Jyb2FkY2FzdF9mMzJ4NCAoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGYzMng0XzUxMiAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICAgX21tNTEyX3VuZGVmaW5lZF9wcyAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3RfZjMyeDQgKF9fbTUxMiBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmMzJ4NF81MTIgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fTywKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Jyb2FkY2FzdF9mMzJ4NCAoX19tbWFzazE2IF9fTSwgX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGYzMng0XzUxMiAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYnJvYWRjYXN0X2Y2NHg0IChfX20yNTZkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmNjR4NF81MTIgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgICBfbW01MTJfdW5kZWZpbmVkX3BkICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3RfZjY0eDQgKF9fbTUxMmQgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGY2NHg0XzUxMiAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19PLAorICAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfZjY0eDQgKF9fbW1hc2s4IF9fTSwgX19tMjU2ZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjY0eDRfNTEyICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Jyb2FkY2FzdF9pMzJ4NCAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTMyeDRfNTEyICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl91bmRlZmluZWRfZXBpMzIgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3RfaTMyeDQgKF9fbTUxMmkgX19PLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpMzJ4NF81MTIgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX08sCisgICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Jyb2FkY2FzdF9pMzJ4NCAoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTMyeDRfNTEyICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RfaTY0eDQgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGk2NHg0XzUxMiAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl91bmRlZmluZWRfZXBpMzIgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Jyb2FkY2FzdF9pNjR4NCAoX19tNTEyaSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTY0eDRfNTEyICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX08sCisgICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Jyb2FkY2FzdF9pNjR4NCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpNjR4NF81MTIgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3RzZF9wZCAoX19tNTEyZCBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF81MTIoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9icm9hZGNhc3RzZF9wZChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fTyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYnJvYWRjYXN0c2RfcGQgKF9fbW1hc2s4IF9fTSwgX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF81MTIoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9icm9hZGNhc3RzZF9wZChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3Rzc19wcyAoX19tNTEyIF9fTywgX19tbWFzazE2IF9fTSwgX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfYnJvYWRjYXN0c3NfcHMoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX08pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYnJvYWRjYXN0c3NfcHMgKF9fbW1hc2sxNiBfX00sIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX2Jyb2FkY2FzdHNzX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0c2VwaTMyX2VwaTggKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZGI1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fdW5kZWZpbmVkX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0c2VwaTMyX2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2RiNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHNlcGkzMl9lcGk4IChfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2RiNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0c2VwaTMyX3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnNkYjUxMm1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3YxNnNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0c2VwaTMyX2VwaTE2IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHNlcGkzMl9lcGkxNiAoX19tMjU2aSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0c2VwaTMyX2VwaTE2IChfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0c2VwaTMyX3N0b3JldV9lcGkxNiAodm9pZCAqX19QLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnNkdzUxMm1lbV9tYXNrICgoX192MTZoaSopIF9fUCwgKF9fdjE2c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRzZXBpNjRfZXBpOCAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxYjUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3VuZGVmaW5lZF9zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0c2VwaTY0X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWI1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRzZXBpNjRfZXBpOCAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FiNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRzZXBpNjRfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWI1MTJtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192OGRpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0c2VwaTY0X2VwaTMyIChfX201MTJpIF9fQSkKK3sKKyAgX192OHNpIF9fTzsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHNlcGk2NF9lcGkzMiAoX19tMjU2aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnNxZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0c2VwaTY0X2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0c2VwaTY0X3N0b3JldV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92c3FkNTEybWVtX21hc2sgKChfX3Y4c2kgKikgX19QLCAoX192OGRpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0c2VwaTY0X2VwaTE2IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3F3NTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHNlcGk2NF9lcGkxNiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxdzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0c2VwaTY0X2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcXc1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0c2VwaTY0X3N0b3JldV9lcGkxNiAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnNxdzUxMm1lbV9tYXNrICgoX192OGhpICopIF9fUCwgKF9fdjhkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHVzZXBpMzJfZXBpOCAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZGI1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3VuZGVmaW5lZF9zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR1c2VwaTMyX2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNkYjUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnR1c2VwaTMyX2VwaTggKF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2RiNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR1c2VwaTMyX3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnVzZGI1MTJtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192MTZzaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHVzZXBpMzJfZXBpMTYgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dXNlcGkzMl9lcGkxNiAoX19tMjU2aSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fTywKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHVzZXBpMzJfZXBpMTYgKF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR1c2VwaTMyX3N0b3JldV9lcGkxNiAodm9pZCAqX19QLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnVzZHc1MTJtZW1fbWFzayAoKF9fdjE2aGkqKSBfX1AsIChfX3YxNnNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0dXNlcGk2NF9lcGk4IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR1c2VwaTY0X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FiNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0dXNlcGk2NF9lcGk4IChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FiNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FiNTEybWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjhkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHVzZXBpNjRfZXBpMzIgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfdW5kZWZpbmVkX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dXNlcGk2NF9lcGkzMiAoX19tMjU2aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnVzcWQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnR1c2VwaTY0X2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dXNlcGk2NF9zdG9yZXVfZXBpMzIgKHZvaWQqIF9fUCwgX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnVzcWQ1MTJtZW1fbWFzayAoKF9fdjhzaSopIF9fUCwgKF9fdjhkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHVzZXBpNjRfZXBpMTYgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3NTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fdW5kZWZpbmVkX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dXNlcGk2NF9lcGkxNiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzcXc1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnR1c2VwaTY0X2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3NTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dXNlcGk2NF9zdG9yZXVfZXBpMTYgKHZvaWQgKl9fUCwgX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnVzcXc1MTJtZW1fbWFzayAoKF9fdjhoaSopIF9fUCwgKF9fdjhkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaTMyX2VwaTggKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkYjUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3VuZGVmaW5lZF9zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpMzJfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkYjUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaTMyX2VwaTggKF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkYjUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGkzMl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZkYjUxMm1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3YxNnNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpMzJfZXBpMTYgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpMzJfZXBpMTYgKF9fbTI1NmkgX19PLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92ZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGkzMl9lcGkxNiAoX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdmR3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTMyX3N0b3JldV9lcGkxNiAodm9pZCAqIF9fUCwgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZkdzUxMm1lbV9tYXNrICgoX192MTZoaSAqKSBfX1AsIChfX3YxNnNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpNjRfZXBpOCAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFiNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpNjRfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFiNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGk2NF9lcGk4IChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxYjUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTY0X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92cWI1MTJtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192OGRpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpNjRfZXBpMzIgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpNjRfZXBpMzIgKF9fbTI1NmkgX19PLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGk2NF9lcGkzMiAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92cWQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTY0X3N0b3JldV9lcGkzMiAodm9pZCogX19QLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92cWQ1MTJtZW1fbWFzayAoKF9fdjhzaSAqKSBfX1AsIChfX3Y4ZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcGk2NF9lcGkxNiAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnF3NTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3VuZGVmaW5lZF9zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGk2NF9lcGkxNiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnF3NTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaTY0X2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxdzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpNjRfc3RvcmV1X2VwaTE2ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZxdzUxMm1lbV9tYXNrICgoX192OGhpICopIF9fUCwgKF9fdjhkaSkgX19BLCBfX00pOworfQorCisjZGVmaW5lIF9tbTUxMl9leHRyYWN0aTMyeDRfZXBpMzIoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZXh0cmFjdGkzMng0X21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3VuZGVmaW5lZF9zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZXh0cmFjdGkzMng0X2VwaTMyKFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RpMzJ4NF9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZXh0cmFjdGkzMng0X2VwaTMyKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RpMzJ4NF9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2V4dHJhY3RpNjR4NF9lcGk2NChBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9leHRyYWN0aTY0eDRfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4dHJhY3RpNjR4NF9lcGk2NChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9leHRyYWN0aTY0eDRfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZXh0cmFjdGk2NHg0X2VwaTY0KFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RpNjR4NF9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaW5zZXJ0ZjY0eDQoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfaW5zZXJ0ZjY0eDRfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2luc2VydGY2NHg0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2luc2VydGY2NHg0X21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2luc2VydGY2NHg0KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2luc2VydGY2NHg0X21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pbnNlcnRpNjR4NChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9pbnNlcnRpNjR4NF9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2luc2VydGk2NHg0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2luc2VydGk2NHg0X21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2luc2VydGk2NHg0KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2luc2VydGk2NHg0X21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pbnNlcnRmMzJ4NChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2luc2VydGYzMng0X21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaW5zZXJ0ZjMyeDQoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9pbnNlcnRmMzJ4NF9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9pbnNlcnRmMzJ4NChVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2luc2VydGYzMng0X21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaW5zZXJ0aTMyeDQoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfaW5zZXJ0aTMyeDRfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pbnNlcnRpMzJ4NChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9pbnNlcnRpMzJ4NF9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9pbnNlcnRpMzJ4NChVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9pbnNlcnRpMzJ4NF9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfZ2V0bWFudF9yb3VuZF9wZChBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZ2V0bWFudHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2dldG1hbnRfcm91bmRfcGQoVywgVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpIHwgKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2dldG1hbnRfcm91bmRfcGQoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpIHwgKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9nZXRtYW50X3BkKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9nZXRtYW50cGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2dldG1hbnRfcGQoVywgVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpIHwgKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2dldG1hbnRfcGQoVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpIHwgKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9nZXRtYW50X3JvdW5kX3BzKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2dldG1hbnRfcm91bmRfcHMoVywgVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZ2V0bWFudHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2dldG1hbnRfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZ2V0bWFudHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfZ2V0bWFudF9wcyhBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9nZXRtYW50cHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpfChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19nZXRtYW50X3BzKFcsIFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8Mil8KEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9nZXRtYW50X3BzKFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8Mil8KEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX2dldGV4cF9yb3VuZF9wZChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZ2V0ZXhwcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZ2V0ZXhwX3JvdW5kX3BkKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9nZXRleHBwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2dldGV4cF9yb3VuZF9wZChVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZ2V0ZXhwcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9nZXRleHBfcGQgKF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfdW5kZWZpbmVkX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2dldGV4cF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2dldGV4cF9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfZ2V0ZXhwX3JvdW5kX3BzKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2dldGV4cHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2dldGV4cF9yb3VuZF9wcyhXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9nZXRleHBwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZ2V0ZXhwX3JvdW5kX3BzKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2dldGV4cHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9nZXRleHBfcHMgKF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl91bmRlZmluZWRfcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2dldGV4cF9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2dldGV4cF9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9pNjRnYXRoZXJfcHMoaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9nYXRoZXJkaXYxNnNmKChfX3Y4c2YpX21tMjU2X3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2k2NGdhdGhlcl9wcyggX192MV9vbGQsIF9fbWFzaywgX19pbmRleCxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hZGRyLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fKHtcCitfX2J1aWx0aW5faWEzMl9nYXRoZXJkaXYxNnNmICgoX192OHNmKSBfX3YxX29sZCxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FkZHIsKF9fdjhkaSkgX19pbmRleCwgX19tYXNrLCBfX3NjYWxlKTtcCit9KQorCisjZGVmaW5lIF9tbTUxMl9pNjRnYXRoZXJfZXBpMzIoaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkaXYxNnNpKChfX3Y4c2kpX21tMjU2X3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pNjRnYXRoZXJfZXBpMzIodjFfb2xkLCBtYXNrLCBpbmRleCwgYWRkciwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRpdjE2c2koKF9fdjhzaSkoX19tMjU2aSkodjFfb2xkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG1hc2spLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pNjRnYXRoZXJfcGQoaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9nYXRoZXJkaXY4ZGYoKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2k2NGdhdGhlcl9wZCh2MV9vbGQsIG1hc2ssIGluZGV4LCBhZGRyLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZ2F0aGVyZGl2OGRmKChfX3Y4ZGYpKF9fbTUxMmQpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTY0Z2F0aGVyX2VwaTY0KGluZGV4LCBhZGRyLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfZ2F0aGVyZGl2OGRpKChfX3Y4ZGkpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShpbmRleCksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pNjRnYXRoZXJfZXBpNjQodjFfb2xkLCBtYXNrLCBpbmRleCwgYWRkciwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRpdjhkaSgoX192OGRpKShfX201MTJpKSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobWFzayksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2kzMmdhdGhlcl9wcyhpbmRleCwgYWRkciwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZ2F0aGVyc2l2MTZzZigoX192MTZzZilfbW01MTJfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2kzMmdhdGhlcl9wcyh2MV9vbGQsIG1hc2ssIGluZGV4LCBhZGRyLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9nYXRoZXJzaXYxNnNmKChfX3YxNnNmKShfX201MTIpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTMyZ2F0aGVyX2VwaTMyKGluZGV4LCBhZGRyLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfZ2F0aGVyc2l2MTZzaSgoX192MTZzaSlfbW01MTJfdW5kZWZpbmVkX2VwaTMyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaTMyZ2F0aGVyX2VwaTMyKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9nYXRoZXJzaXYxNnNpKChfX3YxNnNpKShfX201MTJpKSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTMyZ2F0aGVyX3BkKGluZGV4LCBhZGRyLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZ2F0aGVyc2l2OGRmKChfX3Y4ZGYpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpbmRleCksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pMzJnYXRoZXJfcGQodjFfb2xkLCBtYXNrLCBpbmRleCwgYWRkciwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnNpdjhkZigoX192OGRmKShfX201MTJkKSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobWFzayksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2kzMmdhdGhlcl9lcGk2NChpbmRleCwgYWRkciwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnNpdjhkaSgoX192OGRpKV9tbTUxMl91bmRlZmluZWRfZXBpMzIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaTMyZ2F0aGVyX2VwaTY0KHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9nYXRoZXJzaXY4ZGkoKF9fdjhkaSkoX19tNTEyaSkodjFfb2xkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG1hc2spLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pNjRzY2F0dGVyX3BzKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXYxNnNmKChmbG9hdCAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pNjRzY2F0dGVyX3BzKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXYxNnNmKChmbG9hdCAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2k2NHNjYXR0ZXJfZXBpMzIoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjE2c2koKGludCAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaTY0c2NhdHRlcl9lcGkzMihhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2MTZzaSgoaW50ICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2k2NHNjYXR0ZXJfcGQoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjhkZigoZG91YmxlICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaTY0c2NhdHRlcl9wZChhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2OGRmKChkb3VibGUgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2k2NHNjYXR0ZXJfZXBpNjQoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjhkaSgobG9uZyBsb25nICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaTY0c2NhdHRlcl9lcGk2NChhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2OGRpKChsb25nIGxvbmcgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2kzMnNjYXR0ZXJfcHMoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjE2c2YoKGZsb2F0ICopKGFkZHIpLCAoX19tbWFzazE2KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2kzMnNjYXR0ZXJfcHMoYWRkciwgbWFzaywgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjE2c2YoKGZsb2F0ICopKGFkZHIpLCAoX19tbWFzazE2KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTMyc2NhdHRlcl9lcGkzMihhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2MTZzaSgoaW50ICopKGFkZHIpLCAoX19tbWFzazE2KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pMzJzY2F0dGVyX2VwaTMyKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXYxNnNpKChpbnQgKikoYWRkciksIChfX21tYXNrMTYpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTMyc2NhdHRlcl9wZChhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2OGRmKChkb3VibGUgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pMzJzY2F0dGVyX3BkKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY4ZGYoKGRvdWJsZSAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTMyc2NhdHRlcl9lcGk2NChhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2OGRpKChsb25nIGxvbmcgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pMzJzY2F0dGVyX2VwaTY0KGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY4ZGkoKGxvbmcgbG9uZyAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm1hZGRfc3MgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfZm1hZGRfcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2ZtYWRkX3NzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNreiAoKF9fdjRzZikgX19BLAorICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfZm1hZGRfcm91bmRfc3MoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFza3ooKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZtYWRkX3NzIChfX20xMjggX19XLCBfX20xMjggX19YLCBfX20xMjggX19ZLCBfX21tYXNrOCBfX1UpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNrMyAoKF9fdjRzZikgX19XLAorICAgICAgICAgIChfX3Y0c2YpIF9fWCwKKyAgICAgICAgICAoX192NHNmKSBfX1ksCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFzazNfZm1hZGRfcm91bmRfc3MoVywgWCwgWSwgVSwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFzazMoKF9fdjRzZikoX19tMTI4KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoWSksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbXN1Yl9zcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgIC0oX192NHNmKSBfX0IsCisgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfZm1zdWJfcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1zdWJfc3MgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2t6ICgoX192NHNmKSBfX0EsCisgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgIC0oX192NHNmKSBfX0MsCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfZm1zdWJfcm91bmRfc3MoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFza3ooKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NHNmKShfX20xMjgpKEMpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2Ztc3ViX3NzIChfX20xMjggX19XLCBfX20xMjggX19YLCBfX20xMjggX19ZLCBfX21tYXNrOCBfX1UpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNrMyAoKF9fdjRzZikgX19XLAorICAgICAgICAgIChfX3Y0c2YpIF9fWCwKKyAgICAgICAgICAtKF9fdjRzZikgX19ZLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2szX2Ztc3ViX3JvdW5kX3NzKFcsIFgsIFksIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2szKChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRzZikoX19tMTI4KShZKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2ZubWFkZF9zcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFzayAoLShfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfZm5tYWRkX3JvdW5kX3NzKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2soLShfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2ZubWFkZF9zcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFza3ogKC0oX192NHNmKSBfX0EsCisgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrel9mbm1hZGRfcm91bmRfc3MoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFza3ooLShfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEMpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZubWFkZF9zcyAoX19tMTI4IF9fVywgX19tMTI4IF9fWCwgX19tMTI4IF9fWSwgX19tbWFzazggX19VKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFzazMgKC0oX192NHNmKSBfX1csCisgICAgICAgICAgKF9fdjRzZikgX19YLAorICAgICAgICAgIChfX3Y0c2YpIF9fWSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrM19mbm1hZGRfcm91bmRfc3MoVywgWCwgWSwgVSwgUikgX19leHRlbnNpb25fXyh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNrMygtKF9fdjRzZikoX19tMTI4KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoWSksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbm1zdWJfc3MgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2sgKC0oX192NHNmKSBfX0EsCisgICAgICAgICAgLShfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza19mbm1zdWJfcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFzaygtKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2ZubXN1Yl9zcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFza3ogKC0oX192NHNmKSBfX0EsCisgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgIC0oX192NHNmKSBfX0MsCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfZm5tc3ViX3JvdW5kX3NzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2t6KC0oX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpKF9fbTEyOCkoQyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZubXN1Yl9zcyAoX19tMTI4IF9fVywgX19tMTI4IF9fWCwgX19tMTI4IF9fWSwgX19tbWFzazggX19VKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFzazMgKC0oX192NHNmKSBfX1csCisgICAgICAgICAgKF9fdjRzZikgX19YLAorICAgICAgICAgIC0oX192NHNmKSBfX1ksCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFzazNfZm5tc3ViX3JvdW5kX3NzKFcsIFgsIFksIFUsIFIpIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFzazMoLShfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRzZikoX19tMTI4KShZKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbWFkZF9zZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2sgKCAoX192MmRmKSBfX0EsCisgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrX2ZtYWRkX3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2ZtYWRkX3NkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFza3ogKCAoX192MmRmKSBfX0EsCisgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrel9mbWFkZF9yb3VuZF9zZChVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFza3ooKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShDKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbWFkZF9zZCAoX19tMTI4ZCBfX1csIF9fbTEyOGQgX19YLCBfX20xMjhkIF9fWSwgX19tbWFzazggX19VKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2szICgoX192MmRmKSBfX1csCisgICAgICAgICAgKF9fdjJkZikgX19YLAorICAgICAgICAgIChfX3YyZGYpIF9fWSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrM19mbWFkZF9yb3VuZF9zZChXLCBYLCBZLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFzazMoKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShZKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm1zdWJfc2QgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNrICggKF9fdjJkZikgX19BLAorICAgICAgICAgIC0oX192MmRmKSBfX0IsCisgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfZm1zdWJfcm91bmRfc2QoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbXN1Yl9zZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2t6ICggKF9fdjJkZikgX19BLAorICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAtKF9fdjJkZikgX19DLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2t6X2Ztc3ViX3JvdW5kX3NkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNreigoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MmRmKShfX20xMjhkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2Ztc3ViX3NkIChfX20xMjhkIF9fVywgX19tMTI4ZCBfX1gsIF9fbTEyOGQgX19ZLCBfX21tYXNrOCBfX1UpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFzazMgKChfX3YyZGYpIF9fVywKKyAgICAgICAgICAoX192MmRmKSBfX1gsCisgICAgICAgICAgLShfX3YyZGYpIF9fWSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrM19mbXN1Yl9yb3VuZF9zZChXLCBYLCBZLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFzazMoKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikoX19tMTI4ZCkoWSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2ZubWFkZF9zZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2sgKCAtKF9fdjJkZikgX19BLAorICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza19mbm1hZGRfcm91bmRfc2QoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2soLShfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbm1hZGRfc2QgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNreiAoIC0oX192MmRmKSBfX0EsCisgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrel9mbm1hZGRfcm91bmRfc2QoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2t6KC0oX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEMpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm5tYWRkX3NkIChfX20xMjhkIF9fVywgX19tMTI4ZCBfX1gsIF9fbTEyOGQgX19ZLCBfX21tYXNrOCBfX1UpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFzazMgKC0oX192MmRmKSBfX1csCisgICAgICAgICAgKF9fdjJkZikgX19YLAorICAgICAgICAgIChfX3YyZGYpIF9fWSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrM19mbm1hZGRfcm91bmRfc2QoVywgWCwgWSwgVSwgUikgX19leHRlbnNpb25fXyh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFzazMoLShfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoWSksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2ZubXN1Yl9zZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2sgKCAtKF9fdjJkZikgX19BLAorICAgICAgICAgIC0oX192MmRmKSBfX0IsCisgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfZm5tc3ViX3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNrKC0oX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2ZubXN1Yl9zZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2t6ICggLShfX3YyZGYpIF9fQSwKKyAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgLShfX3YyZGYpIF9fQywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrel9mbm1zdWJfcm91bmRfc2QoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2t6KC0oX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MmRmKShfX20xMjhkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbm1zdWJfc2QgKF9fbTEyOGQgX19XLCBfX20xMjhkIF9fWCwgX19tMTI4ZCBfX1ksIF9fbW1hc2s4IF9fVSkKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNrMyAoLShfX3YyZGYpIChfX1cpLAorICAgICAgICAgIChfX3YyZGYpIF9fWCwKKyAgICAgICAgICAtKF9fdjJkZikgKF9fWSksCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFzazNfZm5tc3ViX3JvdW5kX3NkKFcsIFgsIFksIFUsIFIpIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2szKC0oX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MmRmKShfX20xMjhkKShZKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9wZXJtdXRleF9wZChYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhkZikoX19tNTEyZCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoQykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChDKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgPj4gNikgJiAweDMpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19wZXJtdXRleF9wZChXLCBVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3Blcm11dGV4X3BkKChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVykpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9wZXJtdXRleF9wZChVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3Blcm11dGV4X3BkKChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcGVybXV0ZXhfZXBpNjQoWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4ZGkpKF9fbTUxMmkpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3VuZGVmaW5lZF9lcGkzMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChDKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoQykgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChDKSA+PiA2KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpID4+IDYpICYgMHgzKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcGVybXV0ZXhfZXBpNjQoVywgVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfcGVybXV0ZXhfZXBpNjQoKFgpLCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcGVybXV0ZXhfZXBpNjQoVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfcGVybXV0ZXhfZXBpNjQoKFgpLCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXh2YXJfcGQgKF9fbTUxMmkgX19YLCBfX201MTJkIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGY1MTJfbWFzayAoKF9fdjhkZikgX19ZLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl91bmRlZmluZWRfcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGVybXV0ZXh2YXJfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJkIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGY1MTJfbWFzayAoKF9fdjhkZikgX19ZLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3Blcm11dGV4dmFyX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJkIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGY1MTJfbWFzayAoKF9fdjhkZikgX19ZLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGVybXV0ZXh2YXJfZXBpNjQgKF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJkaTUxMl9tYXNrICgoX192OGRpKSBfX1ksCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXh2YXJfZXBpNjQgKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGk1MTJfbWFzayAoKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl91bmRlZmluZWRfZXBpMzIgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGVybXV0ZXh2YXJfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19YLAorICAgICAgICAgICAgIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJkaTUxMl9tYXNrICgoX192OGRpKSBfX1ksCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXh2YXJfcHMgKF9fbTUxMmkgX19YLCBfX201MTIgX19ZKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcGVybXZhcnNmNTEyX21hc2sgKChfX3YxNnNmKSBfX1ksCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3VuZGVmaW5lZF9wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Blcm11dGV4dmFyX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fWCwgX19tNTEyIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJzZjUxMl9tYXNrICgoX192MTZzZikgX19ZLAorICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGVybXV0ZXh2YXJfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19YLCBfX201MTIgX19ZKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcGVybXZhcnNmNTEyX21hc2sgKChfX3YxNnNmKSBfX1ksCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wZXJtdXRleHZhcl9lcGkzMiAoX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJzaTUxMl9tYXNrICgoX192MTZzaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXh2YXJfZXBpMzIgKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyc2k1MTJfbWFzayAoKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl91bmRlZmluZWRfZXBpMzIgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Blcm11dGV4dmFyX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX1gsCisgICAgICAgICAgICAgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGVybXZhcnNpNTEyX21hc2sgKChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9rYW5kIChfX21tYXNrMTYgX19BLCBfX21tYXNrMTYgX19CKQoreworICByZXR1cm4gKF9fbW1hc2sxNikgX19idWlsdGluX2lhMzJfa2FuZGhpICgoX19tbWFzazE2KSBfX0EsIChfX21tYXNrMTYpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9rYW5kbiAoX19tbWFzazE2IF9fQSwgX19tbWFzazE2IF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX2thbmRuaGkgKChfX21tYXNrMTYpIF9fQSwgKF9fbW1hc2sxNikgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2tvciAoX19tbWFzazE2IF9fQSwgX19tbWFzazE2IF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX2tvcmhpICgoX19tbWFzazE2KSBfX0EsIChfX21tYXNrMTYpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9rb3J0ZXN0YyAoX19tbWFzazE2IF9fQSwgX19tbWFzazE2IF9fQikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2tvcnRlc3RjaGkgKChfX21tYXNrMTYpIF9fQSwgKF9fbW1hc2sxNikgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2tvcnRlc3R6IChfX21tYXNrMTYgX19BLCBfX21tYXNrMTYgX19CKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfa29ydGVzdHpoaSAoKF9fbW1hc2sxNikgX19BLCAoX19tbWFzazE2KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfa3VucGFja2IgKF9fbW1hc2sxNiBfX0EsIF9fbW1hc2sxNiBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9rdW5wY2toaSAoKF9fbW1hc2sxNikgX19BLCAoX19tbWFzazE2KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfa3hub3IgKF9fbW1hc2sxNiBfX0EsIF9fbW1hc2sxNiBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9reG5vcmhpICgoX19tbWFzazE2KSBfX0EsIChfX21tYXNrMTYpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9reG9yIChfX21tYXNrMTYgX19BLCBfX21tYXNrMTYgX19CKQoreworICByZXR1cm4gKF9fbW1hc2sxNikgX19idWlsdGluX2lhMzJfa3hvcmhpICgoX19tbWFzazE2KSBfX0EsIChfX21tYXNrMTYpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3RyZWFtX3NpNTEyIChfX201MTJpICogX19QLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX25vbnRlbXBvcmFsX3N0b3JlKChfX3Y4ZGkpX19BLCAoX192OGRpKilfX1ApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0cmVhbV9sb2FkX3NpNTEyICh2b2lkICpfX1ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9tb3ZudGRxYTUxMiAoKF9fdjhkaSAqKV9fUCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3RyZWFtX3BkIChkb3VibGUgKl9fUCwgX19tNTEyZCBfX0EpCit7CisgIF9fYnVpbHRpbl9ub250ZW1wb3JhbF9zdG9yZSgoX192OGRmKV9fQSwgKF9fdjhkZiopX19QKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdHJlYW1fcHMgKGZsb2F0ICpfX1AsIF9fbTUxMiBfX0EpCit7CisgIF9fYnVpbHRpbl9ub250ZW1wb3JhbF9zdG9yZSgoX192MTZzZilfX0EsIChfX3YxNnNmKilfX1ApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY29tcHJlc3NfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGY1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2NvbXByZXNzX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGY1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY29tcHJlc3NfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGk1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2NvbXByZXNzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGk1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jb21wcmVzc19wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc2Y1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2NvbXByZXNzX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfY29tcHJlc3NzZjUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jb21wcmVzc19lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc2k1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2NvbXByZXNzX2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NpNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworI2RlZmluZSBfbW1fY21wX3JvdW5kX3NzX21hc2soWCwgWSwgUCwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShZKSwgKGludCkoUCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY21wX3JvdW5kX3NzX21hc2soTSwgWCwgWSwgUCwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShZKSwgKGludCkoUCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jbXBfc3NfbWFzayhYLCBZLCBQKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHNzX21hc2soKF9fdjRzZikoX19tMTI4KShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFkpLCAoaW50KShQKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfc3NfbWFzayhNLCBYLCBZLCBQKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHNzX21hc2soKF9fdjRzZikoX19tMTI4KShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFkpLCAoaW50KShQKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX2NtcF9yb3VuZF9zZF9tYXNrKFgsIFksIFAsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wc2RfbWFzaygoX192MmRmKShfX20xMjhkKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShZKSwgKGludCkoUCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY21wX3JvdW5kX3NkX21hc2soTSwgWCwgWSwgUCwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBzZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFkpLCAoaW50KShQKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2NtcF9zZF9tYXNrKFgsIFksIFApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wc2RfbWFzaygoX192MmRmKShfX20xMjhkKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShZKSwgKGludCkoUCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY21wX3NkX21hc2soTSwgWCwgWSwgUCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBzZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFkpLCAoaW50KShQKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tb3ZlaGR1cF9wcyAoX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2c2YpX19BLCAoX192MTZzZilfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSwgMywgMywgNSwgNSwgNywgNywgOSwgOSwgMTEsIDExLCAxMywgMTMsIDE1LCAxNSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21vdmVoZHVwX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfbW92ZWhkdXBfcHMoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tb3ZlaGR1cF9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX21vdmVoZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21vdmVsZHVwX3BzIChfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZzZilfX0EsIChfX3YxNnNmKV9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAyLCAyLCA0LCA0LCA2LCA2LCA4LCA4LCAxMCwgMTAsIDEyLCAxMiwgMTQsIDE0KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbW92ZWxkdXBfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9tb3ZlbGR1cF9wcyhfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21vdmVsZHVwX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfbW92ZWxkdXBfcHMoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCkpOworfQorCisjZGVmaW5lIF9tbTUxMl9zaHVmZmxlX2VwaTMyKEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3VuZGVmaW5lZF9lcGkzMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoSSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoSSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoSSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoSSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoSSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoSSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoSSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoSSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoSSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoSSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoSSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoSSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoSSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoSSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoSSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoSSkgPj4gNikgJiAweDMpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zaHVmZmxlX2VwaTMyKFcsIFUsIEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2h1ZmZsZV9lcGkzMigoQSksIChJKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2h1ZmZsZV9lcGkzMihVLCBBLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NodWZmbGVfZXBpMzIoKEEpLCAoSSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZXhwYW5kX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkZjUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9leHBhbmRfcGQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfZXhwYW5kZGY1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2V4cGFuZF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfZXhwYW5kZGk1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZXhwYW5kX2VwaTY0ICggX19tbWFzazggX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkaTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZXhwYW5kbG9hZHVfcGQoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkZjUxMl9tYXNrICgoY29uc3QgX192OGRmICopX19QLAorICAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9leHBhbmRsb2FkdV9wZChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGY1MTJfbWFzayAoKGNvbnN0IF9fdjhkZiAqKV9fUCwKKyAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZXhwYW5kbG9hZHVfZXBpNjQoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkaTUxMl9tYXNrICgoY29uc3QgX192OGRpICopX19QLAorICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9leHBhbmRsb2FkdV9lcGk2NChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGk1MTJfbWFzayAoKGNvbnN0IF9fdjhkaSAqKV9fUCwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19leHBhbmRsb2FkdV9wcyhfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2Y1MTJfbWFzayAoKGNvbnN0IF9fdjE2c2YgKilfX1AsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZXhwYW5kbG9hZHVfcHMoX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNmNTEyX21hc2sgKChjb25zdCBfX3YxNnNmICopX19QLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19leHBhbmRsb2FkdV9lcGkzMihfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzaTUxMl9tYXNrICgoY29uc3QgX192MTZzaSAqKV9fUCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9leHBhbmRsb2FkdV9lcGkzMihfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNpNTEyX21hc2sgKChjb25zdCBfX3YxNnNpICopX19QLAorICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZXhwYW5kX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfZXhwYW5kc2Y1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZXhwYW5kX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfZXhwYW5kc2Y1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2V4cGFuZF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNpNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2V4cGFuZF9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfZXhwYW5kc2k1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwc19wZChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfY3Z0cHMycGQ1MTJfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwc19wZChXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfY3Z0cHMycGQ1MTJfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBzX3BkKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9jdnRwczJwZDUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cHNfcGQgKF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cHMycGQ1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgX21tNTEyX3VuZGVmaW5lZF9wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwc19wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRwczJwZDUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cHNfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRwczJwZDUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbW92X3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF81MTIgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbW92X3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQgKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tb3ZfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIgKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAoX192MTZzZikgX19BLAorICAgICAgICAgICAgIChfX3YxNnNmKSBfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbW92X3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyICgoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMgKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY29tcHJlc3NzdG9yZXVfcGQgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZWRmNTEyX21hc2sgKChfX3Y4ZGYgKikgX19QLCAoX192OGRmKSBfX0EsCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jb21wcmVzc3N0b3JldV9lcGk2NCAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3JlZGk1MTJfbWFzayAoKF9fdjhkaSAqKSBfX1AsIChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NvbXByZXNzc3RvcmV1X3BzICh2b2lkICpfX1AsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVzZjUxMl9tYXNrICgoX192MTZzZiAqKSBfX1AsIChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY29tcHJlc3NzdG9yZXVfZXBpMzIgKHZvaWQgKl9fUCwgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVzaTUxMl9tYXNrICgoX192MTZzaSAqKSBfX1AsIChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmRzZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jdnRzZDJzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY3Z0X3JvdW5kc2Rfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfY3Z0c2Qyc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9jdnRfcm91bmRzZF9zcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jdnRzZDJzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0c2Rfc3MgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4ZCBfX0IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRzZDJzc19yb3VuZF9tYXNrICgoX192NHNmKShfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fVyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShfX1UpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0c2Rfc3MgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4ZCBfX0IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRzZDJzc19yb3VuZF9tYXNrICgoX192NHNmKShfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKF9fVSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX2N2dHNzX2kzMiBfbW1fY3Z0c3Nfc2kzMgorI2RlZmluZSBfbW1fY3Z0c3NfaTY0IF9tbV9jdnRzc19zaTY0CisjZGVmaW5lIF9tbV9jdnRzZF9pMzIgX21tX2N2dHNkX3NpMzIKKyNkZWZpbmUgX21tX2N2dHNkX2k2NCBfbW1fY3Z0c2Rfc2k2NAorI2RlZmluZSBfbW1fY3Z0aTMyX3NkIF9tbV9jdnRzaTMyX3NkCisjZGVmaW5lIF9tbV9jdnRpNjRfc2QgX21tX2N2dHNpNjRfc2QKKyNkZWZpbmUgX21tX2N2dGkzMl9zcyBfbW1fY3Z0c2kzMl9zcworI2RlZmluZSBfbW1fY3Z0aTY0X3NzIF9tbV9jdnRzaTY0X3NzCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZGk2NF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY3Z0c2kyc2Q2NCgoX192MmRmKShfX20xMjhkKShBKSwgKGxvbmcgbG9uZykoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNpNjRfc2QoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2N2dHNpMnNkNjQoKF9fdjJkZikoX19tMTI4ZCkoQSksIChsb25nIGxvbmcpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmRzaTMyX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2N2dHNpMnNzMzIoKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoQiksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fY3Z0X3JvdW5kaTMyX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2N2dHNpMnNzMzIoKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoQiksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fY3Z0X3JvdW5kc2k2NF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jdnRzaTJzczY0KChfX3Y0c2YpKF9fbTEyOCkoQSksIChsb25nIGxvbmcpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZGk2NF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jdnRzaTJzczY0KChfX3Y0c2YpKF9fbTEyOCkoQSksIChsb25nIGxvbmcpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNzX3NkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jdnRzczJzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY3Z0X3JvdW5kc3Nfc2QoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2N2dHNzMnNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2N2dF9yb3VuZHNzX3NkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jdnRzczJzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHNzX3NkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4IF9fQikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHNzMnNkX3JvdW5kX21hc2soKF9fdjJkZikoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fVyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShfX1UpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyAKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRzc19zZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4IF9fQikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHNzMnNkX3JvdW5kX21hc2soKF9fdjJkZikoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShfX1UpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyAKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR1MzJfc2QgKF9fbTEyOGQgX19BLCB1bnNpZ25lZCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXNpMnNkMzIgKChfX3YyZGYpIF9fQSwgX19CKTsKK30KKworI2RlZmluZSBfbW1fY3Z0X3JvdW5kdTY0X3NkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jdnR1c2kyc2Q2NCgoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShCKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHU2NF9zZCAoX19tMTI4ZCBfX0EsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0IpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXNpMnNkNjQgKChfX3YyZGYpIF9fQSwgX19CLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmR1MzJfc3MoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfY3Z0dXNpMnNzMzIoKF9fdjRzZikoX19tMTI4KShBKSwgKHVuc2lnbmVkIGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR1MzJfc3MgKF9fbTEyOCBfX0EsIHVuc2lnbmVkIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHVzaTJzczMyICgoX192NHNmKSBfX0EsIF9fQiwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmR1NjRfc3MoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfY3Z0dXNpMnNzNjQoKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKEIpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR1NjRfc3MgKF9fbTEyOCBfX0EsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0IpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1c2kyc3M2NCAoKF9fdjRzZikgX19BLCBfX0IsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NldDFfZXBpMzIgKF9fbTUxMmkgX19PLCBfX21tYXNrMTYgX19NLCBpbnQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RkNTEyX2dwcl9tYXNrIChfX0EsIChfX3YxNnNpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zZXQxX2VwaTY0IChfX201MTJpIF9fTywgX19tbWFzazggX19NLCBsb25nIGxvbmcgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RxNTEyX2dwcl9tYXNrIChfX0EsIChfX3Y4ZGkpIF9fTywKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0X2VwaTMyIChpbnQgX19BLCBpbnQgX19CLCBpbnQgX19DLCBpbnQgX19ELAorICAgICBpbnQgX19FLCBpbnQgX19GLCBpbnQgX19HLCBpbnQgX19ILAorICAgICBpbnQgX19JLCBpbnQgX19KLCBpbnQgX19LLCBpbnQgX19MLAorICAgICBpbnQgX19NLCBpbnQgX19OLCBpbnQgX19PLCBpbnQgX19QKQoreworICByZXR1cm4gX19leHRlbnNpb25fXyAoX19tNTEyaSkoX192MTZzaSkKKyAgeyBfX1AsIF9fTywgX19OLCBfX00sIF9fTCwgX19LLCBfX0osIF9fSSwKKyAgICBfX0gsIF9fRywgX19GLCBfX0UsIF9fRCwgX19DLCBfX0IsIF9fQSB9OworfQorCisjZGVmaW5lIF9tbTUxMl9zZXRyX2VwaTMyKGUwLGUxLGUyLGUzLGU0LGU1LGU2LGU3LCAgICAgICAgICAgXAorICAgICAgIGU4LGU5LGUxMCxlMTEsZTEyLGUxMyxlMTQsZTE1KSAgICAgICAgICBcCisgIF9tbTUxMl9zZXRfZXBpMzIoKGUxNSksKGUxNCksKGUxMyksKGUxMiksKGUxMSksKGUxMCksKGU5KSwoZTgpLChlNyksKGU2KSwgXAorICAgICAgICAgICAgICAgICAgIChlNSksKGU0KSwoZTMpLChlMiksKGUxKSwoZTApKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldF9lcGk2NCAobG9uZyBsb25nIF9fQSwgbG9uZyBsb25nIF9fQiwgbG9uZyBsb25nIF9fQywKKyAgICAgbG9uZyBsb25nIF9fRCwgbG9uZyBsb25nIF9fRSwgbG9uZyBsb25nIF9fRiwKKyAgICAgbG9uZyBsb25nIF9fRywgbG9uZyBsb25nIF9fSCkKK3sKKyAgcmV0dXJuIF9fZXh0ZW5zaW9uX18gKF9fbTUxMmkpIChfX3Y4ZGkpCisgIHsgX19ILCBfX0csIF9fRiwgX19FLCBfX0QsIF9fQywgX19CLCBfX0EgfTsKK30KKworI2RlZmluZSBfbW01MTJfc2V0cl9lcGk2NChlMCxlMSxlMixlMyxlNCxlNSxlNixlNykgICAgICAgICAgIFwKKyAgX21tNTEyX3NldF9lcGk2NCgoZTcpLChlNiksKGU1KSwoZTQpLChlMyksKGUyKSwoZTEpLChlMCkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0X3BkIChkb3VibGUgX19BLCBkb3VibGUgX19CLCBkb3VibGUgX19DLCBkb3VibGUgX19ELAorICAgICAgICBkb3VibGUgX19FLCBkb3VibGUgX19GLCBkb3VibGUgX19HLCBkb3VibGUgX19IKQoreworICByZXR1cm4gX19leHRlbnNpb25fXyAoX19tNTEyZCkKKyAgeyBfX0gsIF9fRywgX19GLCBfX0UsIF9fRCwgX19DLCBfX0IsIF9fQSB9OworfQorCisjZGVmaW5lIF9tbTUxMl9zZXRyX3BkKGUwLGUxLGUyLGUzLGU0LGU1LGU2LGU3KSAgICAgICAgICAgICAgXAorICBfbW01MTJfc2V0X3BkKChlNyksKGU2KSwoZTUpLChlNCksKGUzKSwoZTIpLChlMSksKGUwKSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldF9wcyAoZmxvYXQgX19BLCBmbG9hdCBfX0IsIGZsb2F0IF9fQywgZmxvYXQgX19ELAorICAgICAgICBmbG9hdCBfX0UsIGZsb2F0IF9fRiwgZmxvYXQgX19HLCBmbG9hdCBfX0gsCisgICAgICAgIGZsb2F0IF9fSSwgZmxvYXQgX19KLCBmbG9hdCBfX0ssIGZsb2F0IF9fTCwKKyAgICAgICAgZmxvYXQgX19NLCBmbG9hdCBfX04sIGZsb2F0IF9fTywgZmxvYXQgX19QKQoreworICByZXR1cm4gX19leHRlbnNpb25fXyAoX19tNTEyKQorICB7IF9fUCwgX19PLCBfX04sIF9fTSwgX19MLCBfX0ssIF9fSiwgX19JLAorICAgIF9fSCwgX19HLCBfX0YsIF9fRSwgX19ELCBfX0MsIF9fQiwgX19BIH07Cit9CisKKyNkZWZpbmUgX21tNTEyX3NldHJfcHMoZTAsZTEsZTIsZTMsZTQsZTUsZTYsZTcsZTgsZTksZTEwLGUxMSxlMTIsZTEzLGUxNCxlMTUpIFwKKyAgX21tNTEyX3NldF9wcygoZTE1KSwoZTE0KSwoZTEzKSwoZTEyKSwoZTExKSwoZTEwKSwoZTkpLChlOCksKGU3KSwoZTYpLChlNSksIFwKKyAgICAgICAgICAgICAgICAoZTQpLChlMyksKGUyKSwoZTEpLChlMCkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hYnNfcHMoX19tNTEyIEEpCit7CisgIHJldHVybiAoX19tNTEyKV9tbTUxMl9hbmRfZXBpMzIoX21tNTEyX3NldDFfZXBpMzIoMHg3RkZGRkZGRiksKF9fbTUxMmkpQSkgOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hYnNfcHMoX19tNTEyIFcsIF9fbW1hc2sxNiBLLCBfX201MTIgQSkKK3sKKyAgcmV0dXJuIChfX201MTIpX21tNTEyX21hc2tfYW5kX2VwaTMyKChfX201MTJpKVcsIEssIF9tbTUxMl9zZXQxX2VwaTMyKDB4N0ZGRkZGRkYpLChfX201MTJpKUEpIDsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hYnNfcGQoX19tNTEyZCBBKQoreworICByZXR1cm4gKF9fbTUxMmQpX21tNTEyX2FuZF9lcGk2NChfbW01MTJfc2V0MV9lcGk2NCgweDdGRkZGRkZGRkZGRkZGRkYpLChfX3Y4ZGkpQSkgOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWJzX3BkKF9fbTUxMmQgVywgX19tbWFzazggSywgX19tNTEyZCBBKQoreworICByZXR1cm4gKF9fbTUxMmQpX21tNTEyX21hc2tfYW5kX2VwaTY0KChfX3Y4ZGkpVywgSywgX21tNTEyX3NldDFfZXBpNjQoMHg3RkZGRkZGRkZGRkZGRkZGKSwoX192OGRpKUEpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvLyBfX0FWWDUxMkZJTlRSSU5fSApkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJpZm1haW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmlmbWFpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGVmYmFlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJpZm1haW50cmluLmgKQEAgLTAsMCArMSw5MiBAQAorLyo9PT0tLS0tLS0tLS0tLS0tIGF2eDUxMmlmbWFpbnRyaW4uaCAtIElGTUEgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEyaWZtYWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19JRk1BSU5UUklOX0gKKyNkZWZpbmUgX19JRk1BSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJpZm1hIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hZGQ1MmhpX2VwdTY0IChfX201MTJpIF9fWCwgX19tNTEyaSBfX1ksIF9fbTUxMmkgX19aKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbWFkZDUyaHVxNTEyX21hc2sgKChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1ksCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19aLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWFkZDUyaGlfZXB1NjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19YLAorICAgICAgICAgIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbWFkZDUyaHVxNTEyX21hc2sgKChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tYWRkNTJoaV9lcHU2NCAoX19tbWFzazggX19NLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1ksIF9fbTUxMmkgX19aKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbWFkZDUyaHVxNTEyX21hc2t6ICgoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19aLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFkZDUybG9fZXB1NjQgKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSwgX19tNTEyaSBfX1opCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJsdXE1MTJfbWFzayAoKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1osCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYWRkNTJsb19lcHU2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1gsCisgICAgICAgICAgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJsdXE1MTJfbWFzayAoKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1ksCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21hZGQ1MmxvX2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSwgX19tNTEyaSBfX1opCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJsdXE1MTJfbWFza3ogKChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgICAoX192OGRpKSBfX1osCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyaWZtYXZsaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmlmbWF2bGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMWVlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmlmbWF2bGludHJpbi5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKj09PS0tLS0tLS0tLS0tLS0gYXZ4NTEyaWZtYXZsaW50cmluLmggLSBJRk1BIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMmlmbWF2bGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19JRk1BVkxJTlRSSU5fSAorI2RlZmluZSBfX0lGTUFWTElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEyaWZtYSxhdng1MTJ2bCIpKSkKKworCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFkZDUyaGlfZXB1NjQgKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSwgX19tMTI4aSBfX1opCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJodXExMjhfbWFzayAoKF9fdjJkaSkgX19YLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fWSwKKyAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX1osCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYWRkNTJoaV9lcHU2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwbWFkZDUyaHVxMTI4X21hc2sgKChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX1gsCisgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19ZLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYWRkNTJoaV9lcHU2NCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1ksIF9fbTEyOGkgX19aKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwbWFkZDUyaHVxMTI4X21hc2t6ICgoX192MmRpKSBfX1gsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19aLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFkZDUyaGlfZXB1NjQgKF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSwgX19tMjU2aSBfX1opCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJodXEyNTZfbWFzayAoKF9fdjRkaSkgX19YLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWSwKKyAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1osCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tYWRkNTJoaV9lcHU2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsCisgICAgICAgICAgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJodXEyNTZfbWFzayAoKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1ksCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21hZGQ1MmhpX2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSwgX19tMjU2aSBfX1opCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJodXEyNTZfbWFza3ogKChfX3Y0ZGkpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19ZLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1osCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWRkNTJsb19lcHU2NCAoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZLCBfX20xMjhpIF9fWikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmx1cTEyOF9tYXNrICgoX192MmRpKSBfX1gsCisgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19ZLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fWiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21hZGQ1MmxvX2VwdTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJsdXExMjhfbWFzayAoKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX1ksCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21hZGQ1MmxvX2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSwgX19tMTI4aSBfX1opCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJsdXExMjhfbWFza3ogKChfX3YyZGkpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19ZLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1osCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYWRkNTJsb19lcHU2NCAoX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZLCBfX20yNTZpIF9fWikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmx1cTI1Nl9tYXNrICgoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19ZLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21hZGQ1MmxvX2VwdTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fWCwKKyAgICAgICAgICBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmx1cTI1Nl9tYXNrICgoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19YLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWSwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWFkZDUybG9fZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZLCBfX20yNTZpIF9fWikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmx1cTI1Nl9tYXNreiAoKF9fdjRkaSkgX19YLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1ksCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMnBmaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMnBmaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdmYTNjZgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEycGZpbnRyaW4uaApAQCAtMCwwICsxLDExMSBAQAorLyo9PT0tLS0tLS0tLS0tLS0tIGF2eDUxMnBmaW50cmluLmggLSBQRiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJwZmludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJQRklOVFJJTl9ICisjZGVmaW5lIF9fQVZYNTEyUEZJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMnBmIikpKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3ByZWZldGNoX2kzMmdhdGhlcl9wZChpbmRleCwgbWFzaywgYWRkciwgc2NhbGUsIGhpbnQpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX2dhdGhlcnBmZHBkKChfX21tYXNrOCkobWFzayksIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCAoaW50KShzY2FsZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaGludCkpOyB9KQorICAgICAgICAgICAgICAKKyNkZWZpbmUgX21tNTEyX3ByZWZldGNoX2kzMmdhdGhlcl9wZChpbmRleCwgYWRkciwgc2NhbGUsIGhpbnQpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX2dhdGhlcnBmZHBkKChfX21tYXNrOCkgLTEsIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCAoaW50KShzY2FsZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaGludCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3ByZWZldGNoX2kzMmdhdGhlcl9wcyhpbmRleCwgbWFzaywgYWRkciwgc2NhbGUsIGhpbnQpICh7XAorICBfX2J1aWx0aW5faWEzMl9nYXRoZXJwZmRwcygoX19tbWFzazE2KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoaW5kZXgpLCAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHNjYWxlKSwgKGludCkoaGludCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9wcmVmZXRjaF9pMzJnYXRoZXJfcHMoaW5kZXgsIGFkZHIsIHNjYWxlLCBoaW50KSAoe1wKKyAgX19idWlsdGluX2lhMzJfZ2F0aGVycGZkcHMoKF9fbW1hc2sxNikgLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGluZGV4KSwgKGludCBjb25zdCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShzY2FsZSksIChpbnQpKGhpbnQpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19wcmVmZXRjaF9pNjRnYXRoZXJfcGQoaW5kZXgsIG1hc2ssIGFkZHIsIHNjYWxlLCBoaW50KSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9nYXRoZXJwZnFwZCgoX19tbWFzazgpKG1hc2spLCAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShhZGRyKSwgKGludCkoc2NhbGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGhpbnQpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcHJlZmV0Y2hfaTY0Z2F0aGVyX3BkKGluZGV4LCBhZGRyLCBzY2FsZSwgaGludCkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfZ2F0aGVycGZxcGQoKF9fbW1hc2s4KSAtMSwgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikoYWRkciksIChpbnQpKHNjYWxlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShoaW50KSk7IH0pCisgICAgICAgICAgICAgIAorI2RlZmluZSBfbW01MTJfbWFza19wcmVmZXRjaF9pNjRnYXRoZXJfcHMoaW5kZXgsIG1hc2ssIGFkZHIsIHNjYWxlLCBoaW50KSAoe1wKKyAgX19idWlsdGluX2lhMzJfZ2F0aGVycGZxcHMoKF9fbW1hc2s4KShtYXNrKSwgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikoYWRkciksIChpbnQpKHNjYWxlKSwgKGludCkoaGludCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9wcmVmZXRjaF9pNjRnYXRoZXJfcHMoaW5kZXgsIGFkZHIsIHNjYWxlLCBoaW50KSAoe1wKKyAgX19idWlsdGluX2lhMzJfZ2F0aGVycGZxcHMoKF9fbW1hc2s4KSAtMSwgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikoYWRkciksIChpbnQpKHNjYWxlKSwgKGludCkoaGludCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9wcmVmZXRjaF9pMzJzY2F0dGVyX3BkKGFkZHIsIGluZGV4LCBzY2FsZSwgaGludCkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnBmZHBkKChfX21tYXNrOCktMSwgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nICopKGFkZHIpLCAoaW50KShzY2FsZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGhpbnQpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19wcmVmZXRjaF9pMzJzY2F0dGVyX3BkKGFkZHIsIG1hc2ssIGluZGV4LCBzY2FsZSwgaGludCkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnBmZHBkKChfX21tYXNrOCkobWFzayksIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyAqKShhZGRyKSwgKGludCkoc2NhbGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShoaW50KSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3ByZWZldGNoX2kzMnNjYXR0ZXJfcHMoYWRkciwgaW5kZXgsIHNjYWxlLCBoaW50KSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVycGZkcHMoKF9fbW1hc2sxNiktMSwgKF9fdjE2c2kpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCAqKShhZGRyKSwgKGludCkoc2NhbGUpLCAoaW50KShoaW50KSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcHJlZmV0Y2hfaTMyc2NhdHRlcl9wcyhhZGRyLCBtYXNrLCBpbmRleCwgc2NhbGUsIGhpbnQpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJwZmRwcygoX19tbWFzazE2KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGluZGV4KSwgKGludCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpLCAoaW50KShoaW50KSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3ByZWZldGNoX2k2NHNjYXR0ZXJfcGQoYWRkciwgaW5kZXgsIHNjYWxlLCBoaW50KSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVycGZxcGQoKF9fbW1hc2s4KS0xLCAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgKikoYWRkciksIChpbnQpKHNjYWxlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaGludCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3ByZWZldGNoX2k2NHNjYXR0ZXJfcGQoYWRkciwgbWFzaywgaW5kZXgsIHNjYWxlLCBoaW50KSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVycGZxcGQoKF9fbW1hc2s4KShtYXNrKSwgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nICopKGFkZHIpLCAoaW50KShzY2FsZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGhpbnQpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcHJlZmV0Y2hfaTY0c2NhdHRlcl9wcyhhZGRyLCBpbmRleCwgc2NhbGUsIGhpbnQpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJwZnFwcygoX19tbWFzazgpLTEsIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCAqKShhZGRyKSwgKGludCkoc2NhbGUpLCAoaW50KShoaW50KSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcHJlZmV0Y2hfaTY0c2NhdHRlcl9wcyhhZGRyLCBtYXNrLCBpbmRleCwgc2NhbGUsIGhpbnQpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJwZnFwcygoX19tbWFzazgpKG1hc2spLCAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgKikoYWRkciksIChpbnQpKHNjYWxlKSwgKGludCkoaGludCkpOyB9KQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2Ym1paW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMnZibWlpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzcyMzhlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2Ym1paW50cmluLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qPT09LS0tLS0tLS0tLS0tLSBhdng1MTJ2Ym1paW50cmluLmggLSBWQk1JIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMnZibWlpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fVkJNSUlOVFJJTl9ICisjZGVmaW5lIF9fVkJNSUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEydmJtaSIpKSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2syX3Blcm11dGV4MnZhcl9lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0ksCisgICAgICAgICBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycWk1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4MnZhcl9lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0ksIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxaTUxMl9tYXNrICgoX192NjRxaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Blcm11dGV4MnZhcl9lcGk4IChfX201MTJpIF9fQSwgX19tbWFzazY0IF9fVSwKKyAgICAgICAgX19tNTEyaSBfX0ksIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxaTUxMl9tYXNrICgoX192NjRxaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGVybXV0ZXgydmFyX2VwaTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgX19tNTEyaSBfX0ksIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxaTUxMl9tYXNreiAoKF9fdjY0cWkpIF9fSQorICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wZXJtdXRleHZhcl9lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGVybXZhcnFpNTEyX21hc2sgKChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfdW5kZWZpbmVkX2VwaTMyICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGVybXV0ZXh2YXJfZXBpOCAoX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJxaTUxMl9tYXNrICgoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Blcm11dGV4dmFyX2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFycWk1MTJfbWFzayAoKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX211bHRpc2hpZnRfZXBpNjRfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cG11bHRpc2hpZnRxYjUxMl9tYXNrICgoX192NjRxaSkgX19YLAorICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1ksCisgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bHRpc2hpZnRfZXBpNjRfZXBpOCAoX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbXVsdGlzaGlmdHFiNTEyX21hc2sgKChfX3Y2NHFpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWx0aXNoaWZ0X2VwaTY0X2VwaTggKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cG11bHRpc2hpZnRxYjUxMl9tYXNrICgoX192NjRxaSkgX19YLAorICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1ksCisgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl91bmRlZmluZWRfZXBpMzIgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMnZibWl2bGludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2Ym1pdmxpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDVjNmQxCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2Ym1pdmxpbnRyaW4uaApAQCAtMCwwICsxLDI0NyBAQAorLyo9PT0tLS0tLS0tLS0tLS0tIGF2eDUxMnZibWl2bGludHJpbi5oIC0gVkJNSSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJ2Ym1pdmxpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fVkJNSVZMSU5UUklOX0gKKyNkZWZpbmUgX19WQk1JVkxJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMnZibWksYXZ4NTEydmwiKSkpCisKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpOCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLCBfX21tYXNrMTYgX19VLAorICAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnFpMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpOCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19JLAorICAgICAgICAgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnFpMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wZXJtdXRleDJ2YXJfZXBpOCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycWkxMjhfbWFzayAoKF9fdjE2cWkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSAtCisgICAgICAgICAgICAgIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGVybXV0ZXgydmFyX2VwaTggKF9fbTEyOGkgX19BLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fSSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnFpMTI4X21hc2sgKChfX3YxNnFpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wZXJtdXRleDJ2YXJfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLAorICAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnFpMTI4X21hc2t6ICgoX192MTZxaSkgX19JCisgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX19tbWFzazE2KQorICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleDJ2YXJfZXBpOCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycWkyNTZfbWFzayAoKF9fdjMycWkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtCisgICAgICAgICAgICAgIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcGVybXV0ZXgydmFyX2VwaTggKF9fbTI1NmkgX19BLCBfX21tYXNrMzIgX19VLAorICAgICAgICBfX20yNTZpIF9fSSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnFpMjU2X21hc2sgKChfX3YzMnFpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wZXJtdXRleDJ2YXJfZXBpOCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICBfX20yNTZpIF9fSSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnFpMjU2X21hc2t6ICgoX192MzJxaSkgX19JCisgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX19tbWFzazMyKQorICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wZXJtdXRleHZhcl9lcGk4IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGVybXZhcnFpMTI4X21hc2sgKChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fdW5kZWZpbmVkX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcGVybXV0ZXh2YXJfZXBpOCAoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJxaTEyOF9tYXNrICgoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRleHZhcl9lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGVybXZhcnFpMTI4X21hc2sgKChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXh2YXJfZXBpOCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJxaTI1Nl9tYXNrICgoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4dmFyX2VwaTggKF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFycWkyNTZfbWFzayAoKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcGVybXV0ZXh2YXJfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJxaTI1Nl9tYXNrICgoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsdGlzaGlmdF9lcGk2NF9lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwbXVsdGlzaGlmdHFiMTI4X21hc2sgKChfX3YxNnFpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsdGlzaGlmdF9lcGk2NF9lcGk4IChfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBtdWx0aXNoaWZ0cWIxMjhfbWFzayAoKF9fdjE2cWkpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19ZLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsdGlzaGlmdF9lcGk2NF9lcGk4IChfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBtdWx0aXNoaWZ0cWIxMjhfbWFzayAoKF9fdjE2cWkpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19ZLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKQorICAgICAgICAgICAgICAgIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbXVsdGlzaGlmdF9lcGk2NF9lcGk4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwbXVsdGlzaGlmdHFiMjU2X21hc2sgKChfX3YzMnFpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbXVsdGlzaGlmdF9lcGk2NF9lcGk4IChfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBtdWx0aXNoaWZ0cWIyNTZfbWFzayAoKF9fdjMycWkpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MzJxaSkgX19ZLAorICAgICAgICAgICAgICAgIChfX3YzMnFpKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXVsdGlzaGlmdF9lcGk2NF9lcGk4IChfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBtdWx0aXNoaWZ0cWIyNTZfbWFzayAoKF9fdjMycWkpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MzJxaSkgX19ZLAorICAgICAgICAgICAgICAgIChfX3YzMnFpKQorICAgICAgICAgICAgICAgIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMnZsYndpbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxid2ludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MGU5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMnZsYndpbnRyaW4uaApAQCAtMCwwICsxLDM0MDYgQEAKKy8qPT09LS0tLSBhdng1MTJ2bGJ3aW50cmluLmggLSBBVlg1MTJWTCBhbmQgQVZYNTEyQlcgaW50cmluc2ljcyAtLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMnZsYndpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYNTEyVkxCV0lOVFJJTl9ICisjZGVmaW5lIF9fQVZYNTEyVkxCV0lOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEydmwsYXZ4NTEyYnciKSkpCisKK3N0YXRpYyAgX19pbmxpbmUgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXR6ZXJvX2hpKHZvaWQpeworICAgIHJldHVybiAoX19tMTI4aSkoX192OGhpKXsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworfQorCisvKiBJbnRlZ2VyIGNvbXBhcmUgKi8KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX2VwaThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGVxYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGVxX2VwaThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGVxYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZXFfZXB1OF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBlcV9lcGk4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBlcWIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBlcV9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBlcWIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBlcV9lcHU4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGVxX2VwdThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZXFfZXBpMTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX2VwdTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGVxX2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBlcV9lcGkxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZXF3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZXFfZXBpMTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGVxdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGVxX2VwdTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX2VwaThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGdlX2VwaThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ2VfZXB1OF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBnZV9lcGk4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBnZV9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBnZV9lcHU4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGdlX2VwdThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ2VfZXBpMTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX2VwdTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGdlX2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBnZV9lcGkxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ2VfZXBpMTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGdlX2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGdlX2VwdTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X2VwaThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGd0YjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGd0X2VwaThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGd0YjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ3RfZXB1OF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBndF9lcGk4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBndGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBndF9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBndGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBndF9lcHU4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGd0X2VwdThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ3RfZXBpMTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X2VwdTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGd0X2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBndF9lcGkxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZ3R3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ3RfZXBpMTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGd0dzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGd0X2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGd0X2VwdTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGxlX2VwaThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGxlX2VwaThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGxlX2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbGVfZXB1OF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsZV9lcGk4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsZV9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsZV9lcHU4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGxlX2VwdThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbGVfZXBpMTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGxlX2VwdTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGxlX2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsZV9lcGkxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbGVfZXBpMTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGxlX2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGxlX2VwdTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGx0X2VwaThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbHRfZXB1OF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsdF9lcGk4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsdF9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsdF9lcHU4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGx0X2VwdThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbHRfZXBpMTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwdTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGx0X2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsdF9lcGkxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbHRfZXBpMTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGx0X2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGx0X2VwdTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9lcGk4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBuZXFfZXBpOF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmVxX2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbmVxX2VwdThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbmVxX2VwaThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcG5lcV9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBuZXFfZXB1OF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBuZXFfZXB1OF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbmVxX2VwaTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfZXB1MTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbmVxX2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBuZXFfZXBpMTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcG5lcV9lcGkxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbmVxX2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcG5lcV9lcHUxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hZGRfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQil7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZGIyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRfZXBpOCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZGIyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgIChfX3YzMnFpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hZGRfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZF9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNmhpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdWJfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3ViX2VwaTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAoX192MzJxaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3ViX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YncyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zdWJfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZoaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZF9lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZGIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZGIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnFpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGR3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZHcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGhpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1Yl9lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YmIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YmIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnFpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YncxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGhpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX211bGxvX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bGx3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbXVsbG9fZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZoaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxsb19lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bGx3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tdWxsb19lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4aGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19ibGVuZF9lcGk4IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX1cpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjggKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19ibGVuZF9lcGk4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX1cpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYgKChfX21tYXNrMzIpIF9fVSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2JsZW5kX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fVykKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYmxlbmRfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fVykKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NiAoKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWJzX2VwaTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWJzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWJzX2VwaTggKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWJzX2VwaTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWJzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYWJzX2VwaTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWJzX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWJzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWJzX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWJzX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Fic19lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcGFja3NfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3MTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGFja3NfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3NkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGFja3NfZXBpMzIgKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3NkdzI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcGFja3NfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3NkdzI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3BhY2tzX2VwaTE2IChfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFja3Nzd2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3BhY2tzX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFja3Nzd2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGFja3NfZXBpMTYgKF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3N3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wYWNrc19lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLAorICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcGFja3VzX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXNkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wYWNrdXNfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFja3VzZHcxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3BhY2t1c19lcGkzMiAoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wYWNrdXNfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFja3VzZHcyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcGFja3VzX2VwaTE2IChfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFja3Vzd2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3BhY2t1c19lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wYWNrdXNfZXBpMTYgKF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wYWNrdXNfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFja3Vzd2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZHNfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkc2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRzX2VwaTggKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkc2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWRkc19lcGk4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZHNfZXBpOCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRzX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkc19lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZHN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWRkc19lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYWRkc19lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRzX2VwdTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZHVzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FkZHNfZXB1OCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWRkc19lcHU4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRzX2VwdTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZHNfZXB1MTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZHVzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkc19lcHUxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZHVzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FkZHNfZXB1MTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRzX2VwdTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHVzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hdmdfZXB1OCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhdmdiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYXZnX2VwdTggKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYXZnYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hdmdfZXB1OCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhdmdiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYXZnX2VwdTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYXZnYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hdmdfZXB1MTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYXZndzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYXZnX2VwdTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYXZndzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2F2Z19lcHUxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYXZndzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2F2Z19lcHUxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bhdmd3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfZXBpOCAoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLAorICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9lcGk4IChfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9lcGk4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9lcGkxNiAoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tYXhfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X2VwdTggKF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X2VwdTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYXhfZXB1OCAoX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1YjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tYXhfZXB1OCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1YjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9lcHUxNiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHV3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X2VwdTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHV3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYXhfZXB1MTYgKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWF4X2VwdTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1dzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9lcGk4IChfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21pbl9lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWluX2VwaTggKF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWluc2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWluX2VwaTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWluc2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9taW5fZXBpMTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21pbl9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWluX2VwaTE2IChfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWluc3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9taW5fZXB1OCAoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW51YjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fZXB1OCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLAorICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW51YjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21pbl9lcHU4IChfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnViMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9lcHU4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnViMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX2VwdTE2IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludXcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fZXB1MTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludXcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21pbl9lcHUxNiAoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51dzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19taW5fZXB1MTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnV3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zaHVmZmxlX2VwaTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNodWZiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2h1ZmZsZV9lcGk4IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNodWZiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NodWZmbGVfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc2h1ZmIyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zaHVmZmxlX2VwaTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc2h1ZmIyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3Vic19lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3N1YnNfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdWJzX2VwaTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3Vic19lcGk4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1YnNfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YnN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJzX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3Vic3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdWJzX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3Vic3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zdWJzX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1YnNfZXB1OCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3VidXNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3Vic19lcHU4IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YnVzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdWJzX2VwdTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnVzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3N1YnNfZXB1OCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3Vic19lcHUxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3VidXN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJzX2VwdTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3VidXN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3Vic19lcHUxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnVzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3N1YnNfZXB1MTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3VidXN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwgX19tbWFzazggX19VLAorICAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcmhpMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fSSAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2syX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19JLAorICAgICAgICAgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcmhpMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19JIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmhpMTI4X21hc2sgKChfX3Y4aGkpIF9fSS8qIGlkeCAqLywKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGVybXV0ZXgydmFyX2VwaTE2IChfX20xMjhpIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhpIF9fSSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmhpMTI4X21hc2sgKChfX3Y4aGkpIF9fSS8qIGlkeCAqLywKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLAorICAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmhpMTI4X21hc2t6ICgoX192OGhpKSBfX0kvKiBpZHggKi8sCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXgydmFyX2VwaTE2IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0ksIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJoaTI1Nl9tYXNrICgoX192MTZoaSkgX19JLyogaWR4ICovLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbTI1NmkgX19BLCBfX21tYXNrMTYgX19VLAorICAgICAgICBfX20yNTZpIF9fSSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmhpMjU2X21hc2sgKChfX3YxNmhpKSBfX0kvKiBpZHggKi8sCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGVybXV0ZXgydmFyX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGkyNTZfbWFza3ogKChfX3YxNmhpKSBfX0kvKiBpZHggKi8sCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYWRkdWJzX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHVic3cxMjhfbWFzayAoKF9fdjE2cWkpIF9fWCwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1ksCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWFkZHVic19lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHVic3cxMjhfbWFzayAoKF9fdjE2cWkpIF9fWCwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1ksCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tYWRkdWJzX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX1gsCisgICAgICAgICBfX20yNTZpIF9fWSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkdWJzdzI1Nl9tYXNrICgoX192MzJxaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fWSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21hZGR1YnNfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkdWJzdzI1Nl9tYXNrICgoX192MzJxaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fWSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21hZGRfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYWRkX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkd2QxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21hZGRfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkd2QyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWFkZF9lcGkxNiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhzaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzZXBpMTZfZXBpOCAoX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRzZXBpMTZfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRzZXBpMTZfZXBpOCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHNlcGkxNl9lcGk4IChfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0c2VwaTE2X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRzZXBpMTZfZXBpOCAoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dXNlcGkxNl9lcGk4IChfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpMTZfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHVzZXBpMTZfZXBpOCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHVzZXBpMTZfZXBpOCAoX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpMTZfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dXNlcGkxNl9lcGk4IChfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGkxNl9lcGk4IChfX20xMjhpIF9fQSkgeworCisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdndiMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGkxNl9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcGkxNl9lcGk4IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdndiMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaTE2X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92d2IxMjhtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192OGhpKSBfX0EsIF9fTSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHNlcGkxNl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnN3YjEyOG1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3Y4aGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpMTZfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diMTI4bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjhoaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwaTE2X2VwaTggKF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdndiMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTE2X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpMTZfZXBpOCAoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92d2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTE2X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdndiMjU2bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjE2aGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHNlcGkxNl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2IyNTZtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192MTZoaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dXNlcGkxNl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnVzd2IyNTZtZW1fbWFzayAoKF9fdjE2cWkqKSBfX1AsIChfX3YxNmhpKSBfX0EsIF9fTSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsaHJzX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzEyOF9tYXNrICgoX192OGhpKSBfX1gsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1ksCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsaHJzX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxocnN3MTI4X21hc2sgKChfX3Y4aGkpIF9fWCwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX211bGhyc19lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxocnN3MjU2X21hc2sgKChfX3YxNmhpKSBfX1gsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19ZLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbXVsaHJzX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzI1Nl9tYXNrICgoX192MTZoaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fWSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX211bGhpX2VwdTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bGhpX2VwdTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbXVsaGlfZXB1MTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWxoaV9lcHUxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bGh1dzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX211bGhpX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsaGlfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bGh3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX211bGhpX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWxoaV9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bGh3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNraGlfZXBpOChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fdW5wYWNraGlfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel91bnBhY2toaV9lcGk4KF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3VucGFja2hpX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdW5wYWNraGlfZXBpOChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfdW5wYWNraGlfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2toaV9lcGk4KF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3VucGFja2hpX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNraGlfZXBpMTYoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3VucGFja2hpX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfdW5wYWNraGlfZXBpMTYoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fdW5wYWNraGlfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdW5wYWNraGlfZXBpMTYoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfdW5wYWNraGlfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2toaV9lcGkxNihfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3VucGFja2hpX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNrbG9fZXBpOChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fdW5wYWNrbG9fZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel91bnBhY2tsb19lcGk4KF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3VucGFja2xvX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdW5wYWNrbG9fZXBpOChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfdW5wYWNrbG9fZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2tsb19lcGk4KF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3VucGFja2xvX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNrbG9fZXBpMTYoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3VucGFja2xvX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfdW5wYWNrbG9fZXBpMTYoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fdW5wYWNrbG9fZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdW5wYWNrbG9fZXBpMTYoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfdW5wYWNrbG9fZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2tsb19lcGkxNihfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3VucGFja2xvX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpOF9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJ3MTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcGk4X2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJ3MTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGk4X2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnN4YncyNTZfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpOF9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnN4YncyNTZfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZoaSkKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcHU4X2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnp4YncxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwdThfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnp4YncxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwdThfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92enhidzI1Nl9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRlcHU4X2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92enhidzI1Nl9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNmhpKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKKworI2RlZmluZSBfbW1fY21wX2VwaThfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY21wX2VwaThfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikobSkpOyB9KQorCisjZGVmaW5lIF9tbV9jbXBfZXB1OF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXB1OF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShtKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NtcF9lcGk4X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2NtcF9lcGk4X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwdThfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpKF9fbTI1NmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfY21wX2VwdThfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpKF9fbTI1NmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikobSkpOyB9KQorCisjZGVmaW5lIF9tbV9jbXBfZXBpMTZfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY21wX2VwaTE2X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXB3MTI4X21hc2soKF9fdjhoaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW1fY21wX2VwdTE2X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2NtcF9lcHUxNl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NtcF9lcGkxNl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHcyNTZfbWFzaygoX192MTZoaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXBpMTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikobSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9jbXBfZXB1MTZfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfY21wX2VwdTE2X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKG0pKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19zaHVmZmxlaGlfZXBpMTYoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zaHVmZmxlaGlfZXBpMTYoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkoX19tMTI4aSkoVykpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9zaHVmZmxlaGlfZXBpMTYoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zaHVmZmxlaGlfZXBpMTYoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19oaSgpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlaGlfZXBpMTYoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NodWZmbGVoaV9lcGkxNigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSkoX19tMjU2aSkoVykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zaHVmZmxlaGlfZXBpMTYoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NodWZmbGVoaV9lcGkxNigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19zaHVmZmxlbG9fZXBpMTYoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zaHVmZmxlbG9fZXBpMTYoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkoX19tMTI4aSkoVykpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9zaHVmZmxlbG9fZXBpMTYoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zaHVmZmxlbG9fZXBpMTYoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19oaSgpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlbG9fZXBpMTYoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NodWZmbGVsb19lcGkxNigoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKFcpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc2h1ZmZsZWxvX2VwaTE2KFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zaHVmZmxlbG9fZXBpMTYoKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NsbHZfZXBpMTYgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjE2aGlfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zbGx2X2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjE2aGlfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zbGx2X2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNsbHYxNmhpX21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNmhpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGx2X2VwaTE2IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNsbHY4aGlfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGhpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc2xsdl9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjhoaV9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2xsdl9lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNsbHY4aGlfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGhpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NsbF9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzbGx3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zbGxfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzbGx3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zbGxfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNsbHcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NsbF9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzbGx3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNmhpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfc2xsaV9lcGkxNihXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbHdpMTI4X21hc2soKF9fdjhoaSkoX19tMTI4aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9zbGxpX2VwaTE2KFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2xsd2kxMjhfbWFzaygoX192OGhpKShfX20xMjhpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3NsbGlfZXBpMTYoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzbGx3aTI1Nl9tYXNrKChfX3YxNmhpKShfX20yNTZpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc2xsaV9lcGkxNihVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNsbHdpMjU2X21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3Jsdl9lcGkxNiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2MTZoaV9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZoaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NybHZfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2MTZoaV9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NybHZfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjE2aGlfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybHZfZXBpMTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjhoaV9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4aGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcmx2X2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2OGhpX21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zcmx2X2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjhoaV9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4aGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NyYXZfZXBpMTYgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3JhdjE2aGlfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcmF2X2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3JhdjE2aGlfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmF2X2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNyYXYxNmhpX21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNmhpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmF2X2VwaTE2IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNyYXY4aGlfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGhpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3Jhdl9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhdjhoaV9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3Jhdl9lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNyYXY4aGlfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGhpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NyYV9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzcmF3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zcmFfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzcmF3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcmFfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNyYXcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NyYV9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNmhpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfc3JhaV9lcGkxNihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3Jhd2kxMjhfbWFzaygoX192OGhpKShfX20xMjhpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfc3JhaV9lcGkxNihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3Jhd2kxMjhfbWFzaygoX192OGhpKShfX20xMjhpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfc3JhaV9lcGkxNihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3Jhd2kyNTZfbWFzaygoX192MTZoaSkoX19tMjU2aSkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc3JhaV9lcGkxNihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3Jhd2kyNTZfbWFzaygoX192MTZoaSkoX19tMjU2aSkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcmxfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JsdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3JsX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JsdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4aGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3JsX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmxfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3JsdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZoaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCisjZGVmaW5lIF9tbV9tYXNrX3NybGlfZXBpMTYoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybHdpMTI4X21hc2soKF9fdjhoaSkoX19tMTI4aSkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkoX19tMTI4aSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3NybGlfZXBpMTYoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybHdpMTI4X21hc2soKF9fdjhoaSkoX19tMTI4aSkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3NybGlfZXBpMTYoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybHdpMjU2X21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3NybGlfZXBpMTYoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybHdpMjU2X21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbW92X2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbW92X2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9faGkgKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbW92X2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYgKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21vdl9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYgKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tb3ZfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4ICgoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tb3ZfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjggKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19oaSAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2ICgoX19tbWFzazMyKSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MzJxaSkgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZfZXBpOCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYgKChfX21tYXNrMzIpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NldDFfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2sxNiBfX00sIGNoYXIgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RiMTI4X2dwcl9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2V0MV9lcGk4IChfX21tYXNrMTYgX19NLCBjaGFyIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0YjEyOF9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192MTZxaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zZXQxX2VwaTggKF9fbTI1NmkgX19PLCBfX21tYXNrMzIgX19NLCBjaGFyIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0YjI1Nl9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192MzJxaSkgX19PLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NldDFfZXBpOCAoX19tbWFzazMyIF9fTSwgY2hhciBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdGIyNTZfZ3ByX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjMycWkpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbG9hZHVfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1aGkxMjhfbWFzayAoKF9fdjhoaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWR1X2VwaTE2IChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1aGkxMjhfbWFzayAoKF9fdjhoaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3Y4aGkpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19sb2FkdV9lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1aGkyNTZfbWFzayAoKF9fdjE2aGkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2xvYWR1X2VwaTE2IChfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfbG9hZGRxdWhpMjU2X21hc2sgKChfX3YxNmhpICopIF9fUCwKKyAgICAgICAgICAgICAgICAgKF9fdjE2aGkpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbG9hZHVfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1cWkxMjhfbWFzayAoKF9fdjE2cWkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWR1X2VwaTggKF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1cWkxMjhfbWFzayAoKF9fdjE2cWkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192MTZxaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19sb2FkdV9lcGk4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVxaTI1Nl9tYXNrICgoX192MzJxaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbG9hZHVfZXBpOCAoX19tbWFzazMyIF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVxaTI1Nl9tYXNrICgoX192MzJxaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3YzMnFpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdG9yZXVfZXBpMTYgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVoaTEyOF9tYXNrICgoX192OGhpICopIF9fUCwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3RvcmV1X2VwaTE2ICh2b2lkICpfX1AsIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWRxdWhpMjU2X21hc2sgKChfX3YxNmhpICopIF9fUCwKKyAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdG9yZXVfZXBpOCAodm9pZCAqX19QLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVxaTEyOF9tYXNrICgoX192MTZxaSAqKSBfX1AsCisgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3RvcmV1X2VwaTggKHZvaWQgKl9fUCwgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1cWkyNTZfbWFzayAoKF9fdjMycWkgKikgX19QLAorICAgICAgICAgICAgIChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3RfZXBpOF9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1iMTI4ICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdGVzdF9lcGk4X21hc2sgKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWIxMjggKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAoX192MTZxaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdF9lcGk4X21hc2sgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMzIpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWIyNTYgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza190ZXN0X2VwaThfbWFzayAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2szMikgX19idWlsdGluX2lhMzJfcHRlc3RtYjI1NiAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3RfZXBpMTZfbWFzayAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG13MTI4ICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdGVzdF9lcGkxNl9tYXNrIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RtdzEyOCAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl90ZXN0X2VwaTE2X21hc2sgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bXcyNTYgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza190ZXN0X2VwaTE2X21hc2sgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bXcyNTYgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAoX192MTZoaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdG5fZXBpOF9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tYjEyOCAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdGVzdG5fZXBpOF9tYXNrIChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tYjEyOCAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZxaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdG5fZXBpOF9tYXNrIChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazMyKSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tYjI1NiAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdGVzdG5fZXBpOF9tYXNrIChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazMyKSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tYjI1NiAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MzJxaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0bl9lcGkxNl9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm13MTI4ICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza190ZXN0bl9lcGkxNl9tYXNrIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RubXcxMjggKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RuX2VwaTE2X21hc2sgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm13MjU2ICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza190ZXN0bl9lcGkxNl9tYXNrIChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tdzI1NiAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZoaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZXBpOF9tYXNrIChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX2N2dGIybWFzazEyOCAoKF9fdjE2cWkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZlcGk4X21hc2sgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2szMikgX19idWlsdGluX2lhMzJfY3Z0YjJtYXNrMjU2ICgoX192MzJxaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZXBpMTZfbWFzayAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX2N2dHcybWFzazEyOCAoKF9fdjhoaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdmVwaTE2X21hc2sgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2sxNikgX19idWlsdGluX2lhMzJfY3Z0dzJtYXNrMjU2ICgoX192MTZoaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZtX2VwaTggKF9fbW1hc2sxNiBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0bWFzazJiMTI4IChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdm1fZXBpOCAoX19tbWFzazMyIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRtYXNrMmIyNTYgKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92bV9lcGkxNiAoX19tbWFzazggX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dG1hc2sydzEyOCAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZtX2VwaTE2IChfX21tYXNrMTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dG1hc2sydzI1NiAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2Jyb2FkY2FzdGJfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9icm9hZGNhc3RiX2VwaTgoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Jyb2FkY2FzdGJfZXBpOCAoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOChfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX2Jyb2FkY2FzdGJfZXBpOChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYnJvYWRjYXN0Yl9lcGk4IChfX20yNTZpIF9fTywgX19tbWFzazMyIF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X2Jyb2FkY2FzdGJfZXBpOChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fTyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYnJvYWRjYXN0Yl9lcGk4IChfX21tYXNrMzIgX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfYnJvYWRjYXN0Yl9lcGk4KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19icm9hZGNhc3R3X2VwaTE2IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9icm9hZGNhc3R3X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKSBfX08pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Jyb2FkY2FzdHdfZXBpMTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOChfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fYnJvYWRjYXN0d19lcGkxNihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19icm9hZGNhc3R3X2VwaTE2IChfX20yNTZpIF9fTywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X2Jyb2FkY2FzdHdfZXBpMTYoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX08pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdHdfZXBpMTYgKF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9icm9hZGNhc3R3X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zZXQxX2VwaTE2IChfX20yNTZpIF9fTywgX19tbWFzazE2IF9fTSwgc2hvcnQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3R3MjU2X2dwcl9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc2V0MV9lcGkxNiAoX19tbWFzazE2IF9fTSwgc2hvcnQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3R3MjU2X2dwcl9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NldDFfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIHNob3J0IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0dzEyOF9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192OGhpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2V0MV9lcGkxNiAoX19tbWFzazggX19NLCBzaG9ydCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdHcxMjhfZ3ByX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGVybXV0ZXh2YXJfZXBpMTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyaGkxMjhfbWFzayAoKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3Blcm11dGV4dmFyX2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyaGkxMjhfbWFzayAoKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRleHZhcl9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGVybXZhcmhpMTI4X21hc2sgKChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleHZhcl9lcGkxNiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJoaTI1Nl9tYXNrICgoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4dmFyX2VwaTE2IChfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGVybXZhcmhpMjU2X21hc2sgKChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4dmFyX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGVybXZhcmhpMjU2X21hc2sgKChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfYWxpZ25yX2VwaTgoVywgVSwgQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhbGlnbnIxMjhfbWFzaygoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9hbGlnbnJfZXBpOChVLCBBLCBCLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFsaWducjEyOF9tYXNrKChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShOKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2FsaWducl9lcGk4KFcsIFUsIEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWxpZ25yMjU2X21hc2soKF9fdjMycWkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoQiksIChpbnQpKE4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfYWxpZ25yX2VwaTgoVSwgQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhbGlnbnIyNTZfbWFzaygoX192MzJxaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShCKSwgKGludCkoTiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fZGJzYWRfZXB1OChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9kYnBzYWRidzEyOF9tYXNrKChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9faGkoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZGJzYWRfZXB1OChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9kYnBzYWRidzEyOF9tYXNrKChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2Ric2FkX2VwdTgoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZGJwc2FkYncxMjhfbWFzaygoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfZGJzYWRfZXB1OChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9kYnBzYWRidzI1Nl9tYXNrKChfX3YzMnFpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19kYnNhZF9lcHU4KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2RicHNhZGJ3MjU2X21hc2soKF9fdjMycWkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpKF9fbTI1NmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9kYnNhZF9lcHU4KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2RicHNhZGJ3MjU2X21hc2soKF9fdjMycWkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpKF9fbTI1NmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19BVlg1MTJWTEJXSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxjZGludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2bGNkaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwMmUyZQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxjZGludHJpbi5oCkBAIC0wLDAgKzEsMjYzIEBACisvKj09PS0tLS0gYXZ4NTEydmxjZGludHJpbi5oIC0gQVZYNTEyVkwgYW5kIEFWWDUxMkNEIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEydmxjZGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJWTENESU5UUklOX0gKKyNkZWZpbmUgX19BVlg1MTJWTENESU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJ2bCxhdng1MTJjZCIpKSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Jyb2FkY2FzdG1iX2VwaTY0IChfX21tYXNrOCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0bWIxMjggKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0bWJfZXBpNjQgKF9fbW1hc2s4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RtYjI1NiAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9icm9hZGNhc3Rtd19lcGkzMiAoX19tbWFzazE2IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RtdzEyOCAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3Rtd19lcGkzMiAoX19tbWFzazE2IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RtdzI1NiAoX19BKTsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbmZsaWN0X2VwaTY0IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0ZGlfMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NvbmZsaWN0X2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0ZGlfMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jb25mbGljdF9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0ZGlfMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19kaSAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jb25mbGljdF9lcGk2NCAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdGRpXzI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192NGRpKSAgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY29uZmxpY3RfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RkaV8yNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2NvbmZsaWN0X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RkaV8yNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29uZmxpY3RfZXBpMzIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RzaV8xMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3VuZGVmaW5lZF9zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY29uZmxpY3RfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RzaV8xMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2NvbmZsaWN0X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RzaV8xMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY29uZmxpY3RfZXBpMzIgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RzaV8yNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzaSkgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY29uZmxpY3RfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RzaV8yNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2NvbmZsaWN0X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RzaV8yNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2x6Y250X2VwaTMyIChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250ZF8xMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19semNudF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBsemNudGRfMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbHpjbnRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBsemNudGRfMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9semNudF9lcGkzMiAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBsemNudGRfMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbHpjbnRfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRkXzI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2x6Y250X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRkXzI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbHpjbnRfZXBpNjQgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRxXzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2RpICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2x6Y250X2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250cV8xMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9semNudF9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250cV8xMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19kaSAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2x6Y250X2VwaTY0IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250cV8yNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19semNudF9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBsemNudHFfMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbHpjbnRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBsemNudHFfMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19BVlg1MTJWTENESU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxkcWludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2bGRxaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4N2JjZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxkcWludHJpbi5oCkBAIC0wLDAgKzEsMTI2NSBAQAorLyo9PT0tLS0tIGF2eDUxMnZsZHFpbnRyaW4uaCAtIEFWWDUxMlZMIGFuZCBBVlg1MTJEUSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEydmxkcWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJWTERRSU5UUklOX0gKKyNkZWZpbmUgX19BVlg1MTJWTERRSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJ2bCxhdng1MTJkcSIpKSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tdWxsb19lcGk2NCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgKChfX3Y0ZHUpIF9fQSAqIChfX3Y0ZHUpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tdWxsb19lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bGxxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWxsb19lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsbG9fZXBpNjQgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpICgoX192MmR1KSBfX0EgKiAoX192MmR1KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsbG9fZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxscTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsbG9fZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bGxxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kbm90X3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9hbmRucGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FuZG5vdF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9hbmRucGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hbmRub3RfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FuZG5wZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYW5kbm90X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FuZG5wZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kbm90X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2FuZG5wczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hbmRub3RfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYW5kbnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FuZG5vdF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9hbmRucHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYW5kbm90X3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FuZG5wczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9hbmRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYW5kX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2FuZHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hbmRfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FuZHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hbmRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYW5kcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2FuZHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FuZF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9hbmRwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FuZF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9hbmRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hbmRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYW5kcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfeG9yX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwKKyAgICAgICAgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl94b3JwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfeG9yX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3hvcnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza194b3JfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3hvcnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel94b3JfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfeG9ycGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfeG9yX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3hvcnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3hvcl9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl94b3JwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3hvcl9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl94b3JwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel94b3JfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfeG9ycHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfb3JfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX29ycGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X29yX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX29ycGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfb3JfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX29ycGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X29yX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX29ycGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19vcl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9vcnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X29yX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX29ycHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX29yX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX29ycHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfb3JfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfb3JwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwZF9lcGk2NCAoX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBkX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHBkX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHBkX2VwaTY0IChfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0cGRfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0cGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cGRfZXB1NjQgKF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQydXFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0cGRfZXB1NjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQydXFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHBkX2VwdTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQydXFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRwZF9lcHU2NCAoX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwZF9lcHU2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0cGRfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBzX2VwaTY0IChfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRwc19lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHBzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cHNfZXBpNjQgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBzX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0cHNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwc19lcHU2NCAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBzX2VwdTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydXFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHBzX2VwdTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHBzX2VwdTY0IChfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydXFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0cHNfZXB1NjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0cHNfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXBpNjRfcGQgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGk2NF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcGk2NF9wZCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGk2NF9wZCAoX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTY0X3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXBpNjRfcHMgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwczEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpNjRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXBpNjRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwaTY0X3BzIChfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0cXEycHMyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTY0X3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwczI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaTY0X3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwczI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBkX2VwaTY0IChfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHRwZF9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dHBkX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR0cGRfZXBpNjQgKF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dHBkX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR0cGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRwZF9lcHU2NCAoX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dHBkX2VwdTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dHBkX2VwdTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0dHBkX2VwdTY0IChfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR0cGRfZXB1NjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR0cGRfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cHNfZXBpNjQgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMycXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR0cHNfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMycXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dHBzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMycXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHRwc19lcGk2NCAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHRwc19lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR0cHNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBzX2VwdTY0IChfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHRwc19lcHU2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dHBzX2VwdTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR0cHNfZXB1NjQgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dHBzX2VwdTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR0cHNfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwdTY0X3BkIChfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwZDEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwdTY0X3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwZDEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcHU2NF9wZCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwZDEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1NjRfcGQgKF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfc2V0emVyb19wZCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXB1NjRfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwdTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfc2V0emVyb19wZCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwdTY0X3BzIChfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcHU2NF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXB1NjRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcHU2NF9wcyAoX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXB1NjRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwdTY0X3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHMyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisjZGVmaW5lIF9tbV9yYW5nZV9wZChBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcmFuZ2VwZDEyOF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yYW5nZV9wZChXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgIFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcmFuZ2VwZDEyOF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmFuZ2VfcGQoVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yYW5nZXBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcmFuZ2VfcGQoQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3JhbmdlcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfcmFuZ2VfcGQoVywgVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyAgICAgICBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3JhbmdlcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3JhbmdlX3BkKFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgIFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfcmFuZ2VwZDI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX3JhbmdlX3BzKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JhbmdlcHMxMjhfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JhbmdlX3BzKFcsIFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JhbmdlcHMxMjhfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yYW5nZV9wcyhVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmFuZ2VwczEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9yYW5nZV9wcyhBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9yYW5nZXBzMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19yYW5nZV9wcyhXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9yYW5nZXBzMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFcpLCAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfcmFuZ2VfcHMoVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JhbmdlcHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fcmVkdWNlX3BkKEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDEyOF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmVkdWNlX3BkKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDEyOF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JlZHVjZV9wZChVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7ICAgICBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3JlZHVjZV9wZChBLCBCKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgIFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfcmVkdWNlcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3JlZHVjZV9wZChXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfcmVkdWNlcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9yZWR1Y2VfcGQoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyAgICAgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9yZWR1Y2VfcHMoQSwgQikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmVkdWNlcHMxMjhfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JlZHVjZV9wcyhXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7ICAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmVkdWNlX3BzKFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9yZWR1Y2VfcHMoQSwgQikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfcmVkdWNlcHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3JlZHVjZV9wcyhXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfcmVkdWNlX3BzKFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICAgIFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlcGkzMl9tYXNrIChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfY3Z0ZDJtYXNrMTI4ICgoX192NHNpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZlcGkzMl9tYXNrIChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfY3Z0ZDJtYXNrMjU2ICgoX192OHNpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdm1fZXBpMzIgKF9fbW1hc2s4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRtYXNrMmQxMjggKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbW92bV9lcGkzMiAoX19tbWFzazggX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dG1hc2syZDI1NiAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZtX2VwaTY0IChfX21tYXNrOCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0bWFzazJxMTI4IChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdm1fZXBpNjQgKF9fbW1hc2s4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRtYXNrMnEyNTYgKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVwaTY0X21hc2sgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9jdnRxMm1hc2sxMjggKChfX3YyZGkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdmVwaTY0X21hc2sgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9jdnRxMm1hc2syNTYgKChfX3Y0ZGkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3RfZjMyeDIgKF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmMzJ4Ml8yNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3VuZGVmaW5lZF9wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19icm9hZGNhc3RfZjMyeDIgKF9fbTI1NiBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGYzMngyXzI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9icm9hZGNhc3RfZjMyeDIgKF9fbW1hc2s4IF9fTSwgX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGYzMngyXzI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3RfZjY0eDIgKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGY2NHgyXzI1Nl9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3VuZGVmaW5lZF9wZCgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Jyb2FkY2FzdF9mNjR4MiAoX19tMjU2ZCBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjY0eDJfMjU2X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19PLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdF9mNjR4MiAoX19tbWFzazggX19NLCBfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmNjR4Ml8yNTZfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9icm9hZGNhc3RfaTMyeDIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMngyXzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2Jyb2FkY2FzdF9pMzJ4MiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTMyeDJfMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19PLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Jyb2FkY2FzdF9pMzJ4MiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpMzJ4Ml8xMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3RfaTMyeDIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMngyXzI1Nl9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3VuZGVmaW5lZF9zaTI1NigpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Jyb2FkY2FzdF9pMzJ4MiAoX19tMjU2aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTMyeDJfMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19PLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdF9pMzJ4MiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpMzJ4Ml8yNTZfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3RfaTY0eDIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGk2NHgyXzI1Nl9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3VuZGVmaW5lZF9zaTI1NigpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Jyb2FkY2FzdF9pNjR4MiAoX19tMjU2aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTY0eDJfMjU2X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19PLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdF9pNjR4MiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpNjR4Ml8yNTZfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworI2RlZmluZSBfbW0yNTZfZXh0cmFjdGY2NHgyX3BkKEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RmNjR4Ml8yNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2V4dHJhY3RmNjR4Ml9wZChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9leHRyYWN0ZjY0eDJfMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfZXh0cmFjdGY2NHgyX3BkKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RmNjR4Ml8yNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfZXh0cmFjdGk2NHgyX2VwaTY0KEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RpNjR4Ml8yNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2V4dHJhY3RpNjR4Ml9lcGk2NChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9leHRyYWN0aTY0eDJfMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfZXh0cmFjdGk2NHgyX2VwaTY0KFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RpNjR4Ml8yNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaW5zZXJ0ZjY0eDIoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfaW5zZXJ0ZjY0eDJfMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pbnNlcnRmNjR4MihXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9pbnNlcnRmNjR4Ml8yNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9pbnNlcnRmNjR4MihVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9pbnNlcnRmNjR4Ml8yNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaW5zZXJ0aTY0eDIoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfaW5zZXJ0aTY0eDJfMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pbnNlcnRpNjR4MihXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9pbnNlcnRpNjR4Ml8yNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9pbnNlcnRpNjR4MihVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9pbnNlcnRpNjR4Ml8yNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19mcGNsYXNzX3BkX21hc2soVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2ZwY2xhc3NwZDEyOF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fZnBjbGFzc19wZF9tYXNrKEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9mcGNsYXNzcGQxMjhfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19mcGNsYXNzX3BkX21hc2soVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2ZwY2xhc3NwZDI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfZnBjbGFzc19wZF9tYXNrKEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9mcGNsYXNzcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19mcGNsYXNzX3BzX21hc2soVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2ZwY2xhc3NwczEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9mcGNsYXNzX3BzX21hc2soQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2ZwY2xhc3NwczEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfZnBjbGFzc19wc19tYXNrKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9mcGNsYXNzcHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfZnBjbGFzc19wc19tYXNrKEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9mcGNsYXNzcHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2bGludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2bGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NWNlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMnZsaW50cmluLmgKQEAgLTAsMCArMSw5MTcwIEBACisvKj09PS0tLS0gYXZ4NTEydmxpbnRyaW4uaCAtIEFWWDUxMlZMIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJ2bGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJWTElOVFJJTl9ICisjZGVmaW5lIF9fQVZYNTEyVkxJTlRSSU5fSAorCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMnZsIikpKQorCisvKiBEb2Vzbid0IHJlcXVpcmUgYXZ4NTEydmwsIHVzZWQgaW4gYXZ4NTEyZHFpbnRyaW4uaCAqLworc3RhdGljICBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEyZiIpKSkKK19tbV9zZXR6ZXJvX2RpKHZvaWQpIHsKKyAgcmV0dXJuIChfX20xMjhpKShfX3YyZGkpeyAwTEwsIDBMTH07Cit9CisKKy8qIEludGVnZXIgY29tcGFyZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcGkzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZXFfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX2VwdTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGVxX2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwaTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBlcV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZXFfZXB1MzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZXFfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfZXBpNjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGVxX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcHU2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBlcV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBlcV9lcGk2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZXFfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwdTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGVxX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ2VfZXBpMzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGdlX2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9lcHUzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBnZV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBnZV9lcGkzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ2VfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGdlX2VwdTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGdlX2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX2VwaTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBnZV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ2VfZXB1NjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ2VfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ2VfZXBpNjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGdlX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBnZV9lcHU2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBnZV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9lcGkzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ3RfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X2VwdTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGd0X2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGd0X2VwaTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0ZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBndF9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0ZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXB1MzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ3RfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXBpNjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGd0X2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9lcHU2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBndF9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBndF9lcGk2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ3RfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGd0X2VwdTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGd0X2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGxlX2VwaTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsZV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfZXB1MzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbGVfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbGVfZXBpMzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGxlX2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsZV9lcHUzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsZV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9lcGk2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbGVfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGxlX2VwdTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGxlX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGxlX2VwaTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsZV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbGVfZXB1NjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbGVfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbHRfZXBpMzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGx0X2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9lcHUzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsdF9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsdF9lcGkzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbHRfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGx0X2VwdTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGx0X2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsdF9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbHRfZXB1NjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbHRfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbHRfZXBpNjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGx0X2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsdF9lcHU2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsdF9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfZXBpMzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcG5lcV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmVxX2VwdTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcG5lcV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBuZXFfZXBpMzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcG5lcV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbmVxX2VwdTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcG5lcV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfZXBpNjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcG5lcV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmVxX2VwdTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcG5lcV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBuZXFfZXBpNjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcG5lcV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbmVxX2VwdTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcG5lcV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWRkX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZGQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZGQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FkZF9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdWJfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3ViZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3ViX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3ViZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3ViX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3N1Yl9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3ViX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3N1Yl9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1Yl9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tdWxfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19YLAorICAgICAgICAgICBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHEyNTZfbWFzayAoKF9fdjhzaSkgX19YLAorICAgICAgICAgICAgICAoX192OHNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWxfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxkcTI1Nl9tYXNrICgoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19YLAorICAgICAgICBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHExMjhfbWFzayAoKF9fdjRzaSkgX19YLAorICAgICAgICAgICAgICAoX192NHNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tdWxfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxkcTEyOF9tYXNrICgoX192NHNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tdWxfZXB1MzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19YLAorICAgICAgICAgICBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsdWRxMjU2X21hc2sgKChfX3Y4c2kpIF9fWCwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fWSwKKyAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWxfZXB1MzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHEyNTZfbWFzayAoKF9fdjhzaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjhzaSkgX19ZLAorICAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX211bF9lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX1gsCisgICAgICAgIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHExMjhfbWFzayAoKF9fdjRzaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX19ZLAorICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bF9lcHUzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bHVkcTEyOF9tYXNrICgoX192NHNpKSBfX1gsCisgICAgICAgICAgICAgICAoX192NHNpKSBfX1ksCisgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bGxvX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsbGQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbXVsbG9fZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLAorICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bGxvX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsbGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsbG9fZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsbGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FuZF9lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfYW5kX3NpMjU2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hbmRfZXBpMzIoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfbW0yNTZfbWFza19hbmRfZXBpMzIoX21tMjU2X3NldHplcm9fc2kyNTYoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hbmRfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX2FuZF9zaTEyOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYW5kX2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX21tX21hc2tfYW5kX2VwaTMyKF9tbV9zZXR6ZXJvX3NpMTI4KCksIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kbm90X2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9hbmRub3Rfc2kyNTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FuZG5vdF9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9tbTI1Nl9tYXNrX2FuZG5vdF9lcGkzMihfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYW5kbm90X2VwaTMyKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9hbmRub3Rfc2kxMjgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FuZG5vdF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfbW1fbWFza19hbmRub3RfZXBpMzIoX21tX3NldHplcm9fc2kxMjgoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19vcl9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X29yX3NpMjU2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9vcl9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9tbTI1Nl9tYXNrX29yX2VwaTMyKF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfb3JfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX29yX3NpMTI4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9vcl9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9tbV9tYXNrX29yX2VwaTMyKF9tbV9zZXR6ZXJvX3NpMTI4KCksIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfeG9yX2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl94b3Jfc2kyNTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3hvcl9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9tbTI1Nl9tYXNrX3hvcl9lcGkzMihfbW0yNTZfc2V0emVyb19zaTI1NigpLCBfX1UsIF9fQSwgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3hvcl9lcGkzMihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1feG9yX3NpMTI4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel94b3JfZXBpMzIoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfbW1fbWFza194b3JfZXBpMzIoX21tX3NldHplcm9fc2kxMjgoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hbmRfZXBpNjQoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X2FuZF9zaTI1NihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYW5kX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX21tMjU2X21hc2tfYW5kX2VwaTY0KF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYW5kX2VwaTY0KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9hbmRfc2kxMjgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FuZF9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9tbV9tYXNrX2FuZF9lcGk2NChfbW1fc2V0emVyb19zaTEyOCgpLCBfX1UsIF9fQSwgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FuZG5vdF9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfYW5kbm90X3NpMjU2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hbmRub3RfZXBpNjQoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfbW0yNTZfbWFza19hbmRub3RfZXBpNjQoX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UsIF9fQSwgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FuZG5vdF9lcGk2NChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fYW5kbm90X3NpMTI4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hbmRub3RfZXBpNjQoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfbW1fbWFza19hbmRub3RfZXBpNjQoX21tX3NldHplcm9fc2kxMjgoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19vcl9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfb3Jfc2kyNTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X29yX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX21tMjU2X21hc2tfb3JfZXBpNjQoX21tMjU2X3NldHplcm9fc2kyNTYoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19vcl9lcGk2NChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fb3Jfc2kxMjgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X29yX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX21tX21hc2tfb3JfZXBpNjQoX21tX3NldHplcm9fc2kxMjgoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza194b3JfZXBpNjQoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3hvcl9zaTI1NihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfeG9yX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX21tMjU2X21hc2tfeG9yX2VwaTY0KF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfeG9yX2VwaTY0KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV94b3Jfc2kxMjgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3hvcl9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9tbV9tYXNrX3hvcl9lcGk2NChfbW1fc2V0emVyb19zaTEyOCgpLCBfX1UsIF9fQSwgX19CKTsKK30KKworI2RlZmluZSBfbW1fY21wX2VwaTMyX21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2NtcF9lcGkzMl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tX2NtcF9lcHUzMl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXB1MzJfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9jbXBfZXBpMzJfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfY21wX2VwaTMyX21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwdTMyX21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2NtcF9lcHUzMl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tX2NtcF9lcGk2NF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXBpNjRfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobSkpOyB9KQorCisjZGVmaW5lIF9tbV9jbXBfZXB1NjRfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY21wX2VwdTY0X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwaTY0X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2NtcF9lcGk2NF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NtcF9lcHU2NF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXB1NjRfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9jbXBfcHNfbWFzayhhLCBiLCBwKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwczI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfcHNfbWFzayhtLCBhLCBiLCBwKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwczI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NtcF9wZF9tYXNrKGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBkMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfY21wX3BkX21hc2sobSwgYSwgYiwgcCkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tX2NtcF9wc19tYXNrKGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2NtcF9wc19tYXNrKG0sIGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW1fY21wX3BkX21hc2soYSwgYiwgcCkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcGQxMjhfbWFzaygoX192MmRmKShfX20xMjhkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfcGRfbWFzayhtLCBhLCBiLCBwKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwZDEyOF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2ZtYWRkX3BkKF9fbTEyOGQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm1hZGRfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMTI4X21hc2szICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1hZGRfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMTI4X21hc2t6ICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbXN1Yl9wZChfX20xMjhkIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbXN1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQxMjhfbWFza3ogKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm5tYWRkX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDEyOF9tYXNrMyAoLShfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbm1hZGRfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMTI4X21hc2t6ICgtKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2ZubXN1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQxMjhfbWFza3ogKC0oX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm1hZGRfcGQoX19tMjU2ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbWFkZF9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTZfbWFzazMgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9mbWFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTZfbWFza3ogKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Ztc3ViX3BkKF9fbTI1NmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Ztc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1Nl9tYXNreiAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbm1hZGRfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2X21hc2szICgtKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2ZubWFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTZfbWFza3ogKC0oX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm5tc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1Nl9tYXNreiAoLShfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2ZtYWRkX3BzKF9fbTEyOCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZtYWRkX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMTI4X21hc2szICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbWFkZF9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczEyOF9tYXNreiAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbXN1Yl9wcyhfX20xMjggX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1zdWJfcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFza3ogKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbm1hZGRfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFzazMgKC0oX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbm1hZGRfcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFza3ogKC0oX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbm1zdWJfcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFza3ogKC0oX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19mbWFkZF9wcyhfX20yNTYgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbWFkZF9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1Nl9tYXNrMyAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm1hZGRfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTZfbWFza3ogKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm1zdWJfcHMoX19tMjU2IF9fQSwgX19tbWFzazggX19VLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Ztc3ViX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2t6ICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm5tYWRkX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2szICgtKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm5tYWRkX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2t6ICgtKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm5tc3ViX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2t6ICgtKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2ZtYWRkc3ViX3BkKF9fbTEyOGQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm1hZGRzdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMTI4X21hc2szICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1hZGRzdWJfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMTI4X21hc2t6ICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbXN1YmFkZF9wZChfX20xMjhkIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbXN1YmFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQxMjhfbWFza3ogKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19mbWFkZHN1Yl9wZChfX20yNTZkIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2szX2ZtYWRkc3ViX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDI1Nl9tYXNrMyAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2ZtYWRkc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDI1Nl9tYXNreiAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm1zdWJhZGRfcGQoX19tMjU2ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm1zdWJhZGRfcGQoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMjU2X21hc2t6ICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbWFkZHN1Yl9wcyhfX20xMjggX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbWFkZHN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczEyOF9tYXNrMyAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1hZGRzdWJfcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMxMjhfbWFza3ogKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm1zdWJhZGRfcHMoX19tMTI4IF9fQSwgX19tbWFzazggX19VLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Ztc3ViYWRkX3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMTI4X21hc2t6ICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19mbWFkZHN1Yl9wcyhfX20yNTYgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2szX2ZtYWRkc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMjU2X21hc2szICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9mbWFkZHN1Yl9wcyhfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczI1Nl9tYXNreiAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19mbXN1YmFkZF9wcyhfX20yNTYgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm1zdWJhZGRfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMyNTZfbWFza3ogKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm1zdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkMTI4X21hc2szICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm1zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkMjU2X21hc2szICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbXN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1zdWJwczEyOF9tYXNrMyAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm1zdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtc3VicHMyNTZfbWFzazMgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbXN1YmFkZF9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQxMjhfbWFzazMgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbXN1YmFkZF9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQyNTZfbWFzazMgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2Ztc3ViYWRkX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBzMTI4X21hc2szICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbXN1YmFkZF9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwczI1Nl9tYXNrMyAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm5tYWRkX3BkKF9fbTEyOGQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm5tYWRkX3BkKF9fbTI1NmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbm1hZGRfcHMoX19tMTI4IF9fQSwgX19tbWFzazggX19VLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZubWFkZHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm5tYWRkX3BzKF9fbTI1NiBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbm1zdWJfcGQoX19tMTI4ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm5tc3ViX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicGQxMjhfbWFzazMgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2ZubXN1Yl9wZChfX20yNTZkIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbm1zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDI1Nl9tYXNrMyAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbm1zdWJfcHMoX19tMTI4IF9fQSwgX19tbWFzazggX19VLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZubXN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicHMxMjhfbWFzazMgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm5tc3ViX3BzKF9fbTI1NiBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbm1zdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZubXN1YnBzMjU2X21hc2szICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FkZHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYWRkcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FkZF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfYWRkcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9hZGRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FkZHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FkZF9wcyAoX19tbWFzazE2IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYWRkcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hZGRfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2FkZHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZF9wcyAoX19tbWFzazE2IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYWRkcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYmxlbmRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19XKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjggKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX192NHNpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYmxlbmRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19XKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYmxlbmRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19XKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYmxlbmRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19XKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19ibGVuZF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19XKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjggKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19ibGVuZF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19XKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYmxlbmRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19XKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjggKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYmxlbmRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19XKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY29tcHJlc3NfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY29tcHJlc3NkZjEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY29tcHJlc3NfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RmMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbXByZXNzX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGYyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2NvbXByZXNzX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY29tcHJlc3NkZjI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc19lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RpMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jb21wcmVzc19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGkxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY29tcHJlc3NfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY29tcHJlc3NkaTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY29tcHJlc3NfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RpMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY29tcHJlc3NfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY29tcHJlc3NzZjEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY29tcHJlc3NfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY29tcHJlc3NzZjEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbXByZXNzX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc2YyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2NvbXByZXNzX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc2YyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY29tcHJlc3NfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY29tcHJlc3NzaTEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY29tcHJlc3NfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NpMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbXByZXNzX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc2kyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2NvbXByZXNzX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY29tcHJlc3NzaTI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc3N0b3JldV9wZCAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVkZjEyOF9tYXNrICgoX192MmRmICopIF9fUCwKKyAgICAgICAgICAgIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbXByZXNzc3RvcmV1X3BkICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZWRmMjU2X21hc2sgKChfX3Y0ZGYgKikgX19QLAorICAgICAgICAgICAgKF9fdjRkZikgX19BLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY29tcHJlc3NzdG9yZXVfZXBpNjQgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3JlZGkxMjhfbWFzayAoKF9fdjJkaSAqKSBfX1AsCisgICAgICAgICAgICAoX192MmRpKSBfX0EsCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jb21wcmVzc3N0b3JldV9lcGk2NCAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVkaTI1Nl9tYXNrICgoX192NGRpICopIF9fUCwKKyAgICAgICAgICAgIChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NvbXByZXNzc3RvcmV1X3BzICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3Jlc2YxMjhfbWFzayAoKF9fdjRzZiAqKSBfX1AsCisgICAgICAgICAgICAoX192NHNmKSBfX0EsCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jb21wcmVzc3N0b3JldV9wcyAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZXNmMjU2X21hc2sgKChfX3Y4c2YgKikgX19QLAorICAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY29tcHJlc3NzdG9yZXVfZXBpMzIgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3Jlc2kxMjhfbWFzayAoKF9fdjRzaSAqKSBfX1AsCisgICAgICAgICAgICAoX192NHNpKSBfX0EsCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jb21wcmVzc3N0b3JldV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVzaTI1Nl9tYXNrICgoX192OHNpICopIF9fUCwKKyAgICAgICAgICAgIChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaTMyX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTMyX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0ZHEycGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpMzJfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0ZHEycGQyNTZfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpMzJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwZDI1Nl9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaTMyX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwczEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcGkzMl9wcyAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpMzJfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaTMyX3BzIChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0ZHEycHMyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0cGRfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQyZHExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cGRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwZF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0cGRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHBkX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRwZDJwc19tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBkX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRwZDJwczI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwZF9wcyAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0cGQycHMyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBkX2VwdTMyIChfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBkX2VwdTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHBkX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQydWRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRwZF9lcHUzMiAoX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwZF9lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwZF9lcHUzMiAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRwc19lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHBzX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwc19lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBzX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRwc19wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBkMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHBzX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnRwczJwZDEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwc19wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBkMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBzX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnRwczJwZDI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cHNfZXB1MzIgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRwc19lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHBzX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHBzX2VwdTMyIChfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydWRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0cHNfZXB1MzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwc19lcHUzMiAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydWRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHRwZF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cGRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dHBkX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBkX2VwdTMyIChfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1ZHExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR0cGRfZXB1MzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dHBkX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0dHBkX2VwdTMyIChfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1ZHEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR0cGRfZXB1MzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dHBkX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR0cHNfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cHNfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR0cHNfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR0cHNfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBzX2VwdTMyIChfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHRwc19lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1ZHExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHRwc19lcHUzMiAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0dHBzX2VwdTMyIChfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHRwc19lcHUzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1ZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwc19lcHUzMiAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1MzJfcGQgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXB1MzJfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXB1MzJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwdTMyX3BkIChfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwZDI1Nl9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwdTMyX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwZDI1Nl9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwdTMyX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwdTMyX3BzIChfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcHUzMl9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXB1MzJfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcHUzMl9wcyAoX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXB1MzJfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwdTMyX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHMyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZGl2X3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kaXZwZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZGl2X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2RpdnBkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19kaXZfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLAorICAgICAgICBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2RpdnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9kaXZfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfZGl2cGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZGl2X3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2RpdnBzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Rpdl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9kaXZwc19tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Rpdl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9kaXZwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9kaXZfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfZGl2cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZXhwYW5kX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRmMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2V4cGFuZF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRmMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2V4cGFuZF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkZjI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9leHBhbmRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkZjI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19leHBhbmRfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kZGkxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZXhwYW5kX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kZGkxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZXhwYW5kX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRpMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2V4cGFuZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRpMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2V4cGFuZGxvYWR1X3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGYxMjhfbWFzayAoKF9fdjJkZiAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2V4cGFuZGxvYWR1X3BkIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkZjEyOF9tYXNrICgoX192MmRmICopIF9fUCwKKyAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19leHBhbmRsb2FkdV9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRmMjU2X21hc2sgKChfX3Y0ZGYgKikgX19QLAorICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9leHBhbmRsb2FkdV9wZCAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGYyNTZfbWFzayAoKF9fdjRkZiAqKSBfX1AsCisgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZXhwYW5kbG9hZHVfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkaTEyOF9tYXNrICgoX192MmRpICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZXhwYW5kbG9hZHVfZXBpNjQgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRpMTI4X21hc2sgKChfX3YyZGkgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2V4cGFuZGxvYWR1X2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLAorICAgICAgICAgICAgIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkaTI1Nl9tYXNrICgoX192NGRpICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZXhwYW5kbG9hZHVfZXBpNjQgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRpMjU2X21hc2sgKChfX3Y0ZGkgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZXhwYW5kbG9hZHVfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2YxMjhfbWFzayAoKF9fdjRzZiAqKSBfX1AsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2V4cGFuZGxvYWR1X3BzIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNmMTI4X21hc2sgKChfX3Y0c2YgKikgX19QLAorICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19leHBhbmRsb2FkdV9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzZjI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKKyAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZXhwYW5kbG9hZHVfcHMgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2YyNTZfbWFzayAoKF9fdjhzZiAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19leHBhbmRsb2FkdV9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNpMTI4X21hc2sgKChfX3Y0c2kgKikgX19QLAorICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9leHBhbmRsb2FkdV9lcGkzMiAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2kxMjhfbWFzayAoKF9fdjRzaSAqKSBfX1AsCisgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZXhwYW5kbG9hZHVfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsCisgICAgICAgICAgICAgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNpMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAorICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9leHBhbmRsb2FkdV9lcGkzMiAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2kyNTZfbWFzayAoKF9fdjhzaSAqKSBfX1AsCisgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19leHBhbmRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZXhwYW5kc2YxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZXhwYW5kX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNmMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZXhwYW5kX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNmMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2V4cGFuZF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9leHBhbmRzZjI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19leHBhbmRfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kc2kxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZXhwYW5kX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kc2kxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZXhwYW5kX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNpMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2V4cGFuZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNpMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9nZXRleHBfcGQgKF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19nZXRleHBfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZ2V0ZXhwX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2dldGV4cF9wZCAoX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2dldGV4cF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9nZXRleHBfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9nZXRleHBfcHMgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19nZXRleHBfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZ2V0ZXhwX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2dldGV4cF9wcyAoX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2dldGV4cF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9nZXRleHBwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9nZXRleHBfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tYXhwZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21heHBkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tYXhfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLAorICAgICAgICBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX21heHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYXhfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfbWF4cGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21heHBzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tYXhwc19tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9tYXhwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYXhfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfbWF4cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9taW5wZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21pbnBkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19taW5fcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLAorICAgICAgICBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX21pbnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfbWlucGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21pbnBzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9taW5wc19tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9taW5wczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfbWlucHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tdWxwZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX211bHBkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tdWxfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLAorICAgICAgICBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX211bHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWxfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfbXVscGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX211bHBzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tdWxwc19tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX211bF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9tdWxwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWxfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfbXVscHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWJzX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Fic19lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Fic19lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWJzZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hYnNfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWJzZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWJzX2VwaTY0IChfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWJzX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Fic19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hYnNfZXBpNjQgKF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hYnNfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYWJzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9lcGkzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2QxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2QxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYXhfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX192OHNpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWF4X2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tYXhfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21heF9lcGk2NCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X2VwdTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1ZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfZXB1MzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1ZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9lcHUzMiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWF4X2VwdTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHVxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXhfZXB1NjQgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X2VwdTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYXhfZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHVxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXhfZXB1NjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1cTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWF4X2VwdTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9taW5fZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnNkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21pbl9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnNkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAoX192NHNpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWluX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19taW5fZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9lcGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9lcGk2NCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc3ExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21pbl9lcGk2NCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnNxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19taW5fZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21pbl9lcGk2NCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWluc3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9lcHUzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludWQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX2VwdTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludWQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fZXB1MzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnVkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9lcHUzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnVkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX192OHNpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX2VwdTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludXExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21pbl9lcHU2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnVxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW51cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX2VwdTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWludXEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9lcHU2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnVxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWluX2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51cTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKKyNkZWZpbmUgX21tX3JvdW5kc2NhbGVfcGQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF8xMjhfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisKKyNkZWZpbmUgX21tX21hc2tfcm91bmRzY2FsZV9wZChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkXzEyOF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKworI2RlZmluZSBfbW1fbWFza3pfcm91bmRzY2FsZV9wZChVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkXzEyOF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisKKyNkZWZpbmUgX21tMjU2X3JvdW5kc2NhbGVfcGQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF8yNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisKKyNkZWZpbmUgX21tMjU2X21hc2tfcm91bmRzY2FsZV9wZChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkXzI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKworI2RlZmluZSBfbW0yNTZfbWFza3pfcm91bmRzY2FsZV9wZChVLCBBLCBpbW0pICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF8yNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fcm91bmRzY2FsZV9wcyhBLCBpbW0pICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzXzEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworCisjZGVmaW5lIF9tbV9tYXNrX3JvdW5kc2NhbGVfcHMoVywgVSwgQSwgaW1tKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc18xMjhfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworCisjZGVmaW5lIF9tbV9tYXNrel9yb3VuZHNjYWxlX3BzKFUsIEEsIGltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcm91bmRzY2FsZV9wcyhBLCBpbW0pICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzXzI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19yb3VuZHNjYWxlX3BzKFcsIFUsIEEsIGltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKworI2RlZmluZSBfbW0yNTZfbWFza3pfcm91bmRzY2FsZV9wcyhVLCBBLCBpbW0pICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzXzI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2NhbGVmX3BkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zY2FsZWZfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLAorICAgICAgICBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zY2FsZWZfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc2NhbGVmcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zY2FsZWZfcGQgKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NjYWxlZl9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsCisgICAgICAgICAgIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfc2NhbGVmcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NjYWxlZl9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2NhbGVmX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc2NhbGVmX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NjYWxlZl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zY2FsZWZfcHMgKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zY2FsZWZfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwKKyAgICAgICAgICAgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfc2NhbGVmcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc2NhbGVmX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworI2RlZmluZSBfbW1faTY0c2NhdHRlcl9wZChhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjJkZigoZG91YmxlICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTY0c2NhdHRlcl9wZChhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjJkZigoZG91YmxlICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbV9pNjRzY2F0dGVyX2VwaTY0KGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2MmRpKChsb25nIGxvbmcgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pNjRzY2F0dGVyX2VwaTY0KGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2MmRpKChsb25nIGxvbmcgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2k2NHNjYXR0ZXJfcGQoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY0ZGYoKGRvdWJsZSAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2k2NHNjYXR0ZXJfcGQoYWRkciwgbWFzaywgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY0ZGYoKGRvdWJsZSAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTY0c2NhdHRlcl9lcGk2NChhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRkaSgobG9uZyBsb25nICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTY0c2NhdHRlcl9lcGk2NChhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRkaSgobG9uZyBsb25nICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbV9pNjRzY2F0dGVyX3BzKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2NHNmKChmbG9hdCAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaW5kZXgpLCAoX192NHNmKShfX20xMjgpKHYxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTY0c2NhdHRlcl9wcyhhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRzZigoZmxvYXQgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpbmRleCksIChfX3Y0c2YpKF9fbTEyOCkodjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1faTY0c2NhdHRlcl9lcGkzMihhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRzaSgoaW50ICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTY0c2NhdHRlcl9lcGkzMihhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRzaSgoaW50ICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pNjRzY2F0dGVyX3BzKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2OHNmKChmbG9hdCAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaW5kZXgpLCAoX192NHNmKShfX20xMjgpKHYxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTY0c2NhdHRlcl9wcyhhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjhzZigoZmxvYXQgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpbmRleCksIChfX3Y0c2YpKF9fbTEyOCkodjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTY0c2NhdHRlcl9lcGkzMihhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjhzaSgoaW50ICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTY0c2NhdHRlcl9lcGkzMihhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7ICBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY4c2koKGludCAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1faTMyc2NhdHRlcl9wZChhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2MmRmKChkb3VibGUgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pMzJzY2F0dGVyX3BkKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgIFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjJkZigoZG91YmxlICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbV9pMzJzY2F0dGVyX2VwaTY0KGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2MmRpKChsb25nIGxvbmcgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pMzJzY2F0dGVyX2VwaTY0KGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2MmRpKChsb25nIGxvbmcgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2kzMnNjYXR0ZXJfcGQoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY0ZGYoKGRvdWJsZSAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2kzMnNjYXR0ZXJfcGQoYWRkciwgbWFzaywgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY0ZGYoKGRvdWJsZSAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTMyc2NhdHRlcl9lcGk2NChhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRkaSgobG9uZyBsb25nICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTMyc2NhdHRlcl9lcGk2NChhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRkaSgobG9uZyBsb25nICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbV9pMzJzY2F0dGVyX3BzKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NHNmKChmbG9hdCAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCAoX192NHNmKShfX20xMjgpKHYxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTMyc2NhdHRlcl9wcyhhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRzZigoZmxvYXQgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpbmRleCksIChfX3Y0c2YpKF9fbTEyOCkodjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1faTMyc2NhdHRlcl9lcGkzMihhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRzaSgoaW50ICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTMyc2NhdHRlcl9lcGkzMihhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRzaSgoaW50ICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pMzJzY2F0dGVyX3BzKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2OHNmKChmbG9hdCAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCAoX192OHNmKShfX20yNTYpKHYxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTMyc2NhdHRlcl9wcyhhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjhzZigoZmxvYXQgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpbmRleCksIChfX3Y4c2YpKF9fbTI1NikodjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTMyc2NhdHRlcl9lcGkzMihhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjhzaSgoaW50ICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTMyc2NhdHRlcl9lcGkzMihhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjhzaSgoaW50ICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3FydF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zcXJ0cGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zcXJ0X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc3FydHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NxcnRfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfc3FydHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3FydF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3NxcnRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NxcnRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3FydHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3FydF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zcXJ0cHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcXJ0X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3NxcnRwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NxcnRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfc3FydHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1Yl9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc3VicGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3N1Yl9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zdWJwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3ViX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwKKyAgICAgICAgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9zdWJwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3ViX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3N1YnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1Yl9wcyAoX19tMTI4IF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3VicHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3ViX3BzIChfX21tYXNrMTYgX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zdWJwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1Yl9wcyAoX19tMjU2IF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfc3VicHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3ViX3BzIChfX21tYXNrMTYgX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9zdWJwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazJfcGVybXV0ZXgydmFyX2VwaTMyIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksIF9fbW1hc2s4IF9fVSwKKyAgICAgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fSSwKKyAgICAgICAgIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFyZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2syX3Blcm11dGV4MnZhcl9wZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGkgX19JLCBfX21tYXNrOCBfX1UsCisgICAgICAgICBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrMl9wZXJtdXRleDJ2YXJfcGQgKF9fbTI1NmQgX19BLCBfX20yNTZpIF9fSSwgX19tbWFzazggX19VLAorICAgICAgICAgICAgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrMl9wZXJtdXRleDJ2YXJfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOGkgX19JLCBfX21tYXNrOCBfX1UsCisgICAgICAgICBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2syX3Blcm11dGV4MnZhcl9wcyAoX19tMjU2IF9fQSwgX19tMjU2aSBfX0ksIF9fbW1hc2s4IF9fVSwKKyAgICAgICAgICAgIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2syX3Blcm11dGV4MnZhcl9lcGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLCBfX21tYXNrOCBfX1UsCisgICAgICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazJfcGVybXV0ZXgydmFyX2VwaTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0ksCisgICAgICAgICBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyZDEyOF9tYXNrICgoX192NHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbTEyOGkgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19JLAorICAgICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJkMTI4X21hc2sgKChfX3Y0c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcGVybXV0ZXgydmFyX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwKKyAgICAgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmQxMjhfbWFza3ogKChfX3Y0c2kpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV4MnZhcl9lcGkzMiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJkMjU2X21hc2sgKChfX3Y4c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4MnZhcl9lcGkzMiAoX19tMjU2aSBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0ksCisgICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmQyNTZfbWFzayAoKF9fdjhzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICBfX20yNTZpIF9fSSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyZDI1Nl9tYXNreiAoKF9fdjhzaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGVybXV0ZXgydmFyX3BkIChfX20xMjhkIF9fQSwgX19tMTI4aSBfX0ksIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBkMTI4X21hc2sgKChfX3YyZGkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtCisgICAgICAgICAgICAgIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGVybXV0ZXgydmFyX3BkIChfX20xMjhkIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhpIF9fSSwKKyAgICAgICAgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQxMjhfbWFzayAoKF9fdjJkaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcGVybXV0ZXgydmFyX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhpIF9fSSwKKyAgICAgICAgIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBkMTI4X21hc2t6ICgoX192MmRpKSBfX0kKKyAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV4MnZhcl9wZCAoX19tMjU2ZCBfX0EsIF9fbTI1NmkgX19JLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwZDI1Nl9tYXNrICgoX192NGRpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLQorICAgICAgICAgICAgICAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4MnZhcl9wZCAoX19tMjU2ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0ksCisgICAgICAgICAgIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBkMjU2X21hc2sgKChfX3Y0ZGkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4MnZhcl9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2aSBfX0ksCisgICAgICAgICAgICBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwZDI1Nl9tYXNreiAoKF9fdjRkaSkgX19JCisgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm11dGV4MnZhcl9wcyAoX19tMTI4IF9fQSwgX19tMTI4aSBfX0ksIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwczEyOF9tYXNrICgoX192NHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3Blcm11dGV4MnZhcl9wcyAoX19tMTI4IF9fQSwgX19tbWFzazggX19VLCBfX20xMjhpIF9fSSwKKyAgICAgICAgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wZXJtdXRleDJ2YXJfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4aSBfX0ksCisgICAgICAgICBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycHMxMjhfbWFza3ogKChfX3Y0c2kpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXgydmFyX3BzIChfX20yNTYgX19BLCBfX20yNTZpIF9fSSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBzMjU2X21hc2sgKChfX3Y4c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcGVybXV0ZXgydmFyX3BzIChfX20yNTYgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19JLAorICAgICAgICAgICBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycHMyNTZfbWFzayAoKF9fdjhzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4MnZhcl9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTZpIF9fSSwKKyAgICAgICAgICAgIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwczI1Nl9tYXNreiAoKF9fdjhzaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGVybXV0ZXgydmFyX2VwaTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnExMjhfbWFzayAoKF9fdjJkaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGVybXV0ZXgydmFyX2VwaTY0IChfX20xMjhpIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhpIF9fSSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTEyOF9tYXNrICgoX192MmRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3Blcm11dGV4MnZhcl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksCisgICAgICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxMTI4X21hc2t6ICgoX192MmRpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV4MnZhcl9lcGk2NCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxMjU2X21hc2sgKChfX3Y0ZGkpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4MnZhcl9lcGk2NCAoX19tMjU2aSBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0ksCisgICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnEyNTZfbWFzayAoKF9fdjRkaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICBfX20yNTZpIF9fSSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTI1Nl9tYXNreiAoKF9fdjRkaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGk4X2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hiZDEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXBpOF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hiZDEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpOF9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnN4YmQyNTZfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaThfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnN4YmQyNTZfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaThfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJxMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcGk4X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJxMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGk4X2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hicTI1Nl9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpOF9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hicTI1Nl9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpMzJfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGRxMTI4X21hc2sgKChfX3Y0c2kpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTMyX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGRxMTI4X21hc2sgKChfX3Y0c2kpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTMyX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hkcTI1Nl9tYXNrICgoX192NHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRlcGkzMl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c3hkcTI1Nl9tYXNrICgoX192NHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGkxNl9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnN4d2QxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXBpMTZfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnN4d2QxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpMTZfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeHdkMjU2X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaTE2X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeHdkMjU2X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaTE2X2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3h3cTEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcGkxNl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3h3cTEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkxNl9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnN4d3EyNTZfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpMTZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnN4d3EyNTZfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcHU4X2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92enhiZDEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXB1OF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92enhiZDEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXB1OF9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnp4YmQyNTZfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwdThfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnp4YmQyNTZfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwdThfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJxMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcHU4X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJxMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHU4X2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92enhicTI1Nl9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXB1OF9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92enhicTI1Nl9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXB1MzJfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGRxMTI4X21hc2sgKChfX3Y0c2kpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwdTMyX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGRxMTI4X21hc2sgKChfX3Y0c2kpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwdTMyX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92enhkcTI1Nl9tYXNrICgoX192NHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRlcHUzMl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92enhkcTI1Nl9tYXNrICgoX192NHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcHUxNl9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnp4d2QxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXB1MTZfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnp4d2QxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXB1MTZfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdkMjU2X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwdTE2X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdkMjU2X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwdTE2X2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92enh3cTEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcHUxNl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92enh3cTEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHUxNl9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnp4d3EyNTZfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXB1MTZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnp4d3EyNTZfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisKKyNkZWZpbmUgX21tX3JvbF9lcGkzMihhLCBiKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wcm9sZDEyOF9tYXNrKChfX3Y0c2kpKF9fbTEyOGkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcm9sX2VwaTMyKHcsIHUsIGEsIGIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Byb2xkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoYSksIChpbnQpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkodyksIChfX21tYXNrOCkodSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yb2xfZXBpMzIodSwgYSwgYikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHJvbGQxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKHUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcm9sX2VwaTMyKGEsIGIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Byb2xkMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoYSksIChpbnQpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19yb2xfZXBpMzIodywgdSwgYSwgYikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHJvbGQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKSh3KSwgKF9fbW1hc2s4KSh1KSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3JvbF9lcGkzMih1LCBhLCBiKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wcm9sZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkodSkpOyB9KQorCisjZGVmaW5lIF9tbV9yb2xfZXBpNjQoYSwgYikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHJvbHExMjhfbWFzaygoX192MmRpKShfX20xMjhpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX2RpKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JvbF9lcGk2NCh3LCB1LCBhLCBiKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wcm9scTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKHcpLCAoX19tbWFzazgpKHUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcm9sX2VwaTY0KHUsIGEsIGIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Byb2xxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoYSksIChpbnQpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSh1KSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3JvbF9lcGk2NChhLCBiKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wcm9scTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfcm9sX2VwaTY0KHcsIHUsIGEsIGIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Byb2xxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoYSksIChpbnQpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkodyksIChfX21tYXNrOCkodSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9yb2xfZXBpNjQodSwgYSwgYikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHJvbHEyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKHUpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yb2x2X2VwaTMyIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHJvbHZkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19yb2x2X2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Byb2x2ZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcm9sdl9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHJvbHZkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3JvbHZfZXBpMzIgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wcm9sdmQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3JvbHZfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHJvbHZkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9yb2x2X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wcm9sdmQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcm9sdl9lcGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Byb2x2cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcm9sdl9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wcm9sdnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3JvbHZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Byb2x2cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yb2x2X2VwaTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHJvbHZxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19yb2x2X2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Byb2x2cTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcm9sdl9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHJvbHZxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisjZGVmaW5lIF9tbV9yb3JfZXBpMzIoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Byb3JkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yb3JfZXBpMzIoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Byb3JkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoVyksIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yb3JfZXBpMzIoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Byb3JkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3Jvcl9lcGkzMihBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHJvcmQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3Jvcl9lcGkzMihXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHJvcmQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShXKSwgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3Jvcl9lcGkzMihVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHJvcmQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fcm9yX2VwaTY0KEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wcm9ycTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fZGkoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcm9yX2VwaTY0KFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wcm9ycTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKFcpLCAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcm9yX2VwaTY0KFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wcm9ycTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fZGkoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9yb3JfZXBpNjQoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Byb3JxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19yb3JfZXBpNjQoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Byb3JxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoVyksIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9yb3JfZXBpNjQoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Byb3JxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zbGxfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc2xsZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2xsX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc2xsZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc2xsX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNsbGQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NsbF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNsbGQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworI2RlZmluZSBfbW1fbWFza19zbGxpX2VwaTMyKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2xsZGkxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3NsbGlfZXBpMzIoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzbGxkaTEyOF9tYXNrKChfX3Y0c2kpKF9fbTEyOGkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfc2xsaV9lcGkzMihXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNsbGRpMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zbGxpX2VwaTMyKFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsZGkyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc2xsX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNsbHExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NsbF9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNsbHExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2RpICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NsbF9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzbGxxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zbGxfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzbGxxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfc2xsaV9lcGk2NChXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbHFpMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9zbGxpX2VwaTY0KFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2xscWkxMjhfbWFzaygoX192MmRpKShfX20xMjhpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3NsbGlfZXBpNjQoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzbGxxaTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc2xsaV9lcGk2NChVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNsbHFpMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JvcnZfZXBpMzIgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wcm9ydmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3JvcnZfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHJvcnZkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9yb3J2X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wcm9ydmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcm9ydl9lcGkzMiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2ZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcm9ydl9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wcm9ydmQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3JvcnZfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2ZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yb3J2X2VwaTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHJvcnZxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19kaSAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19yb3J2X2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcm9ydl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHJvcnZxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19kaSAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3JvcnZfZXBpNjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wcm9ydnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3JvcnZfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHJvcnZxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9yb3J2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wcm9ydnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zbGx2X2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fWCwKKyAgICAgICAgIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzbGx2MmRpX21hc2sgKChfX3YyZGkpIF9fWCwKKyAgICAgICAgICAgICAoX192MmRpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zbGx2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjJkaV9tYXNrICgoX192MmRpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19ZLAorICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc2xsdl9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX1gsCisgICAgICBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjRkaV9tYXNrICgoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19ZLAorICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc2xsdl9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNsbHY0ZGlfbWFzayAoKF9fdjRkaSkgX19YLAorICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWSwKKyAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NsbHZfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLAorICAgICAgICAgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNsbHY0c2lfbWFzayAoKF9fdjRzaSkgX19YLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fWSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NsbHZfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzbGx2NHNpX21hc2sgKChfX3Y0c2kpIF9fWCwKKyAgICAgICAgICAgICAoX192NHNpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zbGx2X2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwKKyAgICAgIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzbGx2OHNpX21hc2sgKChfX3Y4c2kpIF9fWCwKKyAgICAgICAgICAgICAoX192OHNpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zbGx2X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjhzaV9tYXNrICgoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjhzaSkgX19ZLAorICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NybHZfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLAorICAgICAgICAgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNybHYyZGlfbWFzayAoKF9fdjJkaSkgX19YLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fWSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NybHZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2MmRpX21hc2sgKChfX3YyZGkpIF9fWCwKKyAgICAgICAgICAgICAoX192MmRpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19kaSAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcmx2X2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwKKyAgICAgIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2NGRpX21hc2sgKChfX3Y0ZGkpIF9fWCwKKyAgICAgICAgICAgICAoX192NGRpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmx2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjRkaV9tYXNrICgoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19ZLAorICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3Jsdl9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsCisgICAgICAgICBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjRzaV9tYXNrICgoX192NHNpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19ZLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3Jsdl9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNybHY0c2lfbWFzayAoKF9fdjRzaSkgX19YLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fWSwKKyAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NybHZfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLAorICAgICAgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNybHY4c2lfbWFzayAoKF9fdjhzaSkgX19YLAorICAgICAgICAgICAgIChfX3Y4c2kpIF9fWSwKKyAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NybHZfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2OHNpX21hc2sgKChfX3Y4c2kpIF9fWCwKKyAgICAgICAgICAgICAoX192OHNpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3JsX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNybGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NybF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNybGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NybF9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmxkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmxfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmxkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfc3JsaV9lcGkzMihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsZGkxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfc3JsaV9lcGkzMihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsZGkxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfc3JsaV9lcGkzMihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JsZGkyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc3JsaV9lcGkzMihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JsZGkyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcmxfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JscTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3JsX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JscTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3JsX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNybHEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NybF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNybHEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworI2RlZmluZSBfbW1fbWFza19zcmxpX2VwaTY0KFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzcmxxaTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9zcmxpX2VwaTY0KFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzcmxxaTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zcmxpX2VwaTY0KFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmxxaTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zcmxpX2VwaTY0KFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmxxaTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NyYXZfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLAorICAgICAgICAgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNyYXY0c2lfbWFzayAoKF9fdjRzaSkgX19YLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fWSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NyYXZfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2NHNpX21hc2sgKChfX3Y0c2kpIF9fWCwKKyAgICAgICAgICAgICAoX192NHNpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcmF2X2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwKKyAgICAgIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2OHNpX21hc2sgKChfX3Y4c2kpIF9fWCwKKyAgICAgICAgICAgICAoX192OHNpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmF2X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3JhdjhzaV9tYXNrICgoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjhzaSkgX19ZLAorICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYXZfZXBpNjQgKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhdnExMjhfbWFzayAoKF9fdjJkaSkgX19YLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2RpICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NyYXZfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLAorICAgICAgICAgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNyYXZxMTI4X21hc2sgKChfX3YyZGkpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19ZLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zcmF2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhdnExMjhfbWFzayAoKF9fdjJkaSkgX19YLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2RpICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3Jhdl9lcGk2NCAoX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2cTI1Nl9tYXNrICgoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3Jhdl9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX1gsCisgICAgICBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3JhdnEyNTZfbWFzayAoKF9fdjRkaSkgX19YLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1ksCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NyYXZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2cTI1Nl9tYXNrICgoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21vdl9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjggKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbW92X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKSBfbW1fc2V0emVyb19zaTEyOCAoKSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21vdl9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbW92X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19sb2FkX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfbW92ZHFhMzJsb2FkMTI4X21hc2sgKChfX3Y0c2kgKikgX19QLAorICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9sb2FkX2VwaTMyIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWEzMmxvYWQxMjhfbWFzayAoKF9fdjRzaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19sb2FkX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfbW92ZHFhMzJsb2FkMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAorICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9sb2FkX2VwaTMyIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWEzMmxvYWQyNTZfbWFzayAoKF9fdjhzaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdG9yZV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZkcWEzMnN0b3JlMTI4X21hc2sgKChfX3Y0c2kgKikgX19QLAorICAgICAgICAgIChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdG9yZV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZkcWEzMnN0b3JlMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAorICAgICAgICAgIChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tb3ZfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRpKSBfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21vdl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fZGkgKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbW92X2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2xvYWRfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWE2NGxvYWQxMjhfbWFzayAoKF9fdjJkaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX21vdmRxYTY0bG9hZDEyOF9tYXNrICgoX192MmRpICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2xvYWRfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWE2NGxvYWQyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2xvYWRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX21vdmRxYTY0bG9hZDI1Nl9tYXNrICgoX192NGRpICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N0b3JlX2VwaTY0ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21vdmRxYTY0c3RvcmUxMjhfbWFzayAoKF9fdjJkaSAqKSBfX1AsCisgICAgICAgICAgKF9fdjJkaSkgX19BLAorICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N0b3JlX2VwaTY0ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21vdmRxYTY0c3RvcmUyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgKF9fdjRkaSkgX19BLAorICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21vdmVkdXBfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fbW92ZWR1cF9wZChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tb3ZlZHVwX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fbW92ZWR1cF9wZChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZlZHVwX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X21vdmVkdXBfcGQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbW92ZWR1cF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X21vdmVkdXBfcGQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCkpOworfQorCisKKyNkZWZpbmUgX21tX21hc2tfc2V0MV9lcGkzMihPLCBNLCBBKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdGQxMjhfZ3ByX21hc2soKGludCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoTyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3NldDFfZXBpMzIoTSwgQSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RkMTI4X2dwcl9tYXNrKChpbnQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zZXQxX2VwaTMyKE8sIE0sIEEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0ZDI1Nl9ncHJfbWFzaygoaW50KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShPKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc2V0MV9lcGkzMihNLCBBKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdGQyNTZfZ3ByX21hc2soKGludCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc2V0MV9lcGk2NCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgbG9uZyBsb25nIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0cTEyOF9ncHJfbWFzayAoX19BLCAoX192MmRpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2V0MV9lcGk2NCAoX19tbWFzazggX19NLCBsb25nIGxvbmcgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RxMTI4X2dwcl9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc2V0MV9lcGk2NCAoX19tMjU2aSBfX08sIF9fbW1hc2s4IF9fTSwgbG9uZyBsb25nIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0cTI1Nl9ncHJfbWFzayAoX19BLCAoX192NGRpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc2V0MV9lcGk2NCAoX19tbWFzazggX19NLCBsb25nIGxvbmcgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RxMjU2X2dwcl9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCisjZGVmaW5lIF9tbV9maXh1cGltbV9wZChBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19maXh1cGltbV9wZChBLCBVLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2ZpeHVwaW1tX3BkKFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcGQxMjhfbWFza3ooKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2ZpeHVwaW1tX3BkKEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2ZpeHVwaW1tX3BkKEEsIFUsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfZml4dXBpbW1fcGQoVSwgQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfZml4dXBpbW1wZDI1Nl9tYXNreigoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fZml4dXBpbW1fcHMoQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZml4dXBpbW1fcHMoQSwgVSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9maXh1cGltbV9wcyhVLCBBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcHMxMjhfbWFza3ooKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9maXh1cGltbV9wcyhBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19maXh1cGltbV9wcyhBLCBVLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X2ZpeHVwaW1tX3BzKFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfZml4dXBpbW1wczI1Nl9tYXNreigoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19sb2FkX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbG9hZGFwZDEyOF9tYXNrICgoX192MmRmICopIF9fUCwKKyAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9sb2FkX3BkIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9sb2FkYXBkMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbG9hZF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2xvYWRhcGQyNTZfbWFzayAoKF9fdjRkZiAqKSBfX1AsCisgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbG9hZF9wZCAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfbG9hZGFwZDI1Nl9tYXNrICgoX192NGRmICopIF9fUCwKKyAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbG9hZF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9sb2FkYXBzMTI4X21hc2sgKChfX3Y0c2YgKikgX19QLAorICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWRfcHMgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbG9hZGFwczEyOF9tYXNrICgoX192NHNmICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbG9hZF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9sb2FkYXBzMjU2X21hc2sgKChfX3Y4c2YgKikgX19QLAorICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2xvYWRfcHMgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfbG9hZGFwczI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2xvYWR1X2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfbG9hZGRxdWRpMTI4X21hc2sgKChfX3YyZGkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9sb2FkdV9lcGk2NCAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfbG9hZGRxdWRpMTI4X21hc2sgKChfX3YyZGkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbG9hZHVfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1ZGkyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2xvYWR1X2VwaTY0IChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1ZGkyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19sb2FkdV9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVzaTEyOF9tYXNrICgoX192NHNpICopIF9fUCwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbG9hZHVfZXBpMzIgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVzaTEyOF9tYXNrICgoX192NHNpICopIF9fUCwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2xvYWR1X2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfbG9hZGRxdXNpMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9sb2FkdV9lcGkzMiAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfbG9hZGRxdXNpMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbG9hZHVfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9sb2FkdXBkMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWR1X3BkIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9sb2FkdXBkMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbG9hZHVfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9sb2FkdXBkMjU2X21hc2sgKChfX3Y0ZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2xvYWR1X3BkIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9sb2FkdXBkMjU2X21hc2sgKChfX3Y0ZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19sb2FkdV9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9sb2FkdXBzMTI4X21hc2sgKChfX3Y0c2YgKikgX19QLAorICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWR1X3BzIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2xvYWR1cHMxMjhfbWFzayAoKF9fdjRzZiAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2xvYWR1X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2xvYWR1cHMyNTZfbWFzayAoKF9fdjhzZiAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbG9hZHVfcHMgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfbG9hZHVwczI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N0b3JlX3BkICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlYXBkMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAoX192MmRmKSBfX0EsCisgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N0b3JlX3BkICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlYXBkMjU2X21hc2sgKChfX3Y0ZGYgKikgX19QLAorICAgICAgICAgICAoX192NGRmKSBfX0EsCisgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N0b3JlX3BzICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVhcHMxMjhfbWFzayAoKF9fdjRzZiAqKSBfX1AsCisgICAgICAgICAgIChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3RvcmVfcHMgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWFwczI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKKyAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdG9yZXVfZXBpNjQgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVkaTEyOF9tYXNrICgoX192MmRpICopIF9fUCwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3RvcmV1X2VwaTY0ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1ZGkyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N0b3JldV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWRxdXNpMTI4X21hc2sgKChfX3Y0c2kgKikgX19QLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdG9yZXVfZXBpMzIgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVzaTI1Nl9tYXNrICgoX192OHNpICopIF9fUCwKKyAgICAgICAgICAgICAoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3RvcmV1X3BkICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBkMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAoX192MmRmKSBfX0EsCisgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N0b3JldV9wZCAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwZDI1Nl9tYXNrICgoX192NGRmICopIF9fUCwKKyAgICAgICAgICAgKF9fdjRkZikgX19BLAorICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdG9yZXVfcHMgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwczEyOF9tYXNrICgoX192NHNmICopIF9fUCwKKyAgICAgICAgICAgKF9fdjRzZikgX19BLAorICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdG9yZXVfcHMgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwczI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKKyAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3VucGFja2hpX3BkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3VucGFja2hpX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfdW5wYWNraGlfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV91bnBhY2toaV9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2hpX3BkKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3VucGFja2hpX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfdW5wYWNraGlfcGQoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl91bnBhY2toaV9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNraGlfcHMoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3VucGFja2hpX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3VucGFja2hpX3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV91bnBhY2toaV9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza191bnBhY2toaV9wcyhfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3VucGFja2hpX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2toaV9wcyhfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3VucGFja2hpX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNrbG9fcGQoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fdW5wYWNrbG9fcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel91bnBhY2tsb19wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3VucGFja2xvX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdW5wYWNrbG9fcGQoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfdW5wYWNrbG9fcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2tsb19wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3VucGFja2xvX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza191bnBhY2tsb19wcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fdW5wYWNrbG9fcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfdW5wYWNrbG9fcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3VucGFja2xvX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2xvX3BzKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfdW5wYWNrbG9fcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3VucGFja2xvX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfdW5wYWNrbG9fcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcmNwMTRfcGQgKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3JjcDE0cGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19yY3AxNF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmNwMTRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9yY3AxNF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yY3AxNHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yY3AxNF9wZCAoX19tMjU2ZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfcmNwMTRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3JjcDE0X3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9yY3AxNHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3JjcDE0X3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JjcDE0cGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcmNwMTRfcHMgKF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yY3AxNHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19yY3AxNF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcmNwMTRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9yY3AxNF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcmNwMTRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yY3AxNF9wcyAoX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3JjcDE0cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3JjcDE0X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yY3AxNHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3JjcDE0X3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yY3AxNHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworI2RlZmluZSBfbW1fbWFza19wZXJtdXRlX3BkKFcsIFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fcGVybXV0ZV9wZCgoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcGVybXV0ZV9wZChVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3Blcm11dGVfcGQoKFgpLCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3Blcm11dGVfcGQoVywgVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9wZXJtdXRlX3BkKChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoVykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9wZXJtdXRlX3BkKFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfcGVybXV0ZV9wZCgoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcGVybXV0ZV9wcyhXLCBVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9wZXJtdXRlX3BzKChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcGVybXV0ZV9wcyhVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9wZXJtdXRlX3BzKChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3Blcm11dGVfcHMoVywgVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfcGVybXV0ZV9wcygoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShXKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3Blcm11dGVfcHMoVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfcGVybXV0ZV9wcygoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3Blcm11dGV2YXJfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLAorICAgICAgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19DLAorICAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wZXJtdXRldmFyX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycGRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRpKSBfX0MsCisgICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wZXJtdXRldmFyX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwKKyAgICAgICAgIF9fbTI1NmkgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQywKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGVybXV0ZXZhcl9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2aSBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19DLAorICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRldmFyX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsCisgICAgICBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwc19tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19DLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wZXJtdXRldmFyX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKSBfX0MsCisgICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV2YXJfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwKKyAgICAgICAgIF9fbTI1NmkgX19DKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0MsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV2YXJfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2aSBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQywKKyAgICAgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdF9lcGkzMl9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWQxMjggKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza190ZXN0X2VwaTMyX21hc2sgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1kMTI4ICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdF9lcGkzMl9tYXNrIChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWQyNTYgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza190ZXN0X2VwaTMyX21hc2sgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1kMjU2ICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdF9lcGk2NF9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bXExMjggKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza190ZXN0X2VwaTY0X21hc2sgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1xMTI4ICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdF9lcGk2NF9tYXNrIChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bXEyNTYgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza190ZXN0X2VwaTY0X21hc2sgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1xMjU2ICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdG5fZXBpMzJfbWFzayAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tZDEyOCAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdGVzdG5fZXBpMzJfbWFzayAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm1kMTI4ICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAoX192NHNpKSBfX0IsIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RuX2VwaTMyX21hc2sgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RubWQyNTYgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Rlc3RuX2VwaTMyX21hc2sgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tZDI1NiAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgKF9fdjhzaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0bl9lcGk2NF9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm1xMTI4ICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza190ZXN0bl9lcGk2NF9tYXNrIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RubXExMjggKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgIChfX3YyZGkpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdG5fZXBpNjRfbWFzayAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tcTI1NiAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdGVzdG5fZXBpNjRfbWFzayAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm1xMjU2ICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAoX192NGRpKSBfX0IsIF9fVSk7Cit9CisKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNraGlfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV91bnBhY2toaV9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3VucGFja2hpX2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV91bnBhY2toaV9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2hpX2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfdW5wYWNraGlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2toaV9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfdW5wYWNraGlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza191bnBhY2toaV9lcGk2NChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3VucGFja2hpX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfdW5wYWNraGlfZXBpNjQoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3VucGFja2hpX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX2RpKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdW5wYWNraGlfZXBpNjQoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl91bnBhY2toaV9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3VucGFja2hpX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl91bnBhY2toaV9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3VucGFja2xvX2VwaTMyKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fdW5wYWNrbG9fZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel91bnBhY2tsb19lcGkzMihfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fdW5wYWNrbG9fZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza191bnBhY2tsb19lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3VucGFja2xvX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfdW5wYWNrbG9fZXBpMzIoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3VucGFja2xvX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNrbG9fZXBpNjQoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV91bnBhY2tsb19lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3VucGFja2xvX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV91bnBhY2tsb19lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2xvX2VwaTY0KF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfdW5wYWNrbG9fZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2tsb19lcGk2NChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfdW5wYWNrbG9fZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcmFfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3JhX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3JhX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNyYWQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NyYV9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNyYWQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworI2RlZmluZSBfbW1fbWFza19zcmFpX2VwaTMyKFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzcmFkaTEyOF9tYXNrKChfX3Y0c2kpKF9fbTEyOGkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9zcmFpX2VwaTMyKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzcmFkaTEyOF9tYXNrKChfX3Y0c2kpKF9fbTEyOGkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zcmFpX2VwaTMyKFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmFkaTI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zcmFpX2VwaTMyKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmFkaTI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmFfZXBpNjQgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcmFfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3JhX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NyYV9lcGk2NCAoX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmFxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NyYV9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmFxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmFfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmFxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tX3NyYWlfZXBpNjQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYXFpMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfc3JhaV9lcGk2NChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JhcWkxMjhfbWFzaygoX192MmRpKShfX20xMjhpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfc3JhaV9lcGk2NChVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JhcWkxMjhfbWFzaygoX192MmRpKShfX20xMjhpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3NyYWlfZXBpNjQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNyYXFpMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfc3JhaV9lcGk2NChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JhcWkyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc3JhaV9lcGk2NChVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JhcWkyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX3Rlcm5hcnlsb2dpY19lcGkzMihBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ2QxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3Rlcm5hcnlsb2dpY19lcGkzMihBLCBVLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ2QxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfdGVybmFyeWxvZ2ljX2VwaTMyKFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9nZDEyOF9tYXNreigoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfdGVybmFyeWxvZ2ljX2VwaTMyKEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9nZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfdGVybmFyeWxvZ2ljX2VwaTMyKEEsIFUsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9nZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel90ZXJuYXJ5bG9naWNfZXBpMzIoVSwgQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHRlcm5sb2dkMjU2X21hc2t6KChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV90ZXJuYXJ5bG9naWNfZXBpNjQoQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHRlcm5sb2dxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza190ZXJuYXJ5bG9naWNfZXBpNjQoQSwgVSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHRlcm5sb2dxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3Rlcm5hcnlsb2dpY19lcGk2NChVLCBBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ3ExMjhfbWFza3ooKF9fdjJkaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3Rlcm5hcnlsb2dpY19lcGk2NChBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ3EyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3Rlcm5hcnlsb2dpY19lcGk2NChBLCBVLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ3EyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfdGVybmFyeWxvZ2ljX2VwaTY0KFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9ncTI1Nl9tYXNreigoX192NGRpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworCisKKyNkZWZpbmUgX21tMjU2X3NodWZmbGVfZjMyeDQoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zaHVmX2YzMng0XzI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlX2YzMng0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfc2h1Zl9mMzJ4NF8yNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc2h1ZmZsZV9mMzJ4NChVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NodWZfZjMyeDRfMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfc2h1ZmZsZV9mNjR4MihBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zaHVmX2Y2NHgyXzI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlX2Y2NHgyKFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NodWZfZjY0eDJfMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zaHVmZmxlX2Y2NHgyKFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NodWZfZjY0eDJfMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfc2h1ZmZsZV9pMzJ4NChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zaHVmX2kzMng0XzI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlX2kzMng0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTMyeDRfMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zaHVmZmxlX2kzMng0KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTMyeDRfMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfc2h1ZmZsZV9pNjR4MihBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zaHVmX2k2NHgyXzI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlX2k2NHgyKFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTY0eDJfMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zaHVmZmxlX2k2NHgyKFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTY0eDJfMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19zaHVmZmxlX3BkKFcsIFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2h1ZmZsZV9wZCgoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVykpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9zaHVmZmxlX3BkKFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2h1ZmZsZV9wZCgoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlX3BkKFcsIFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2h1ZmZsZV9wZCgoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoVykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zaHVmZmxlX3BkKFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2h1ZmZsZV9wZCgoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19zaHVmZmxlX3BzKFcsIFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NodWZmbGVfcHMoKEEpLCAoQiksIChNKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3NodWZmbGVfcHMoVSwgQSwgQiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2h1ZmZsZV9wcygoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3NodWZmbGVfcHMoVywgVSwgQSwgQiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2h1ZmZsZV9wcygoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFcpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc2h1ZmZsZV9wcyhVLCBBLCBCLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zaHVmZmxlX3BzKChBKSwgKEIpLCAoTSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcnNxcnQxNF9wZCAoX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcnNxcnQxNF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcnNxcnQxNF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3JzcXJ0MTRfcGQgKF9fbTI1NmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3JzcXJ0MTRfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3JzcXJ0MTRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JzcXJ0MTRfcHMgKF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3JzcXJ0MTRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3JzcXJ0MTRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yc3FydDE0X3BzIChfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfcnNxcnQxNHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19yc3FydDE0X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9yc3FydDE0X3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0X2YzMng0IChfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjMyeDRfMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl91bmRlZmluZWRfcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Jyb2FkY2FzdF9mMzJ4NCAoX19tMjU2IF9fTywgX19tbWFzazggX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjMyeDRfMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdF9mMzJ4NCAoX19tbWFzazggX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjMyeDRfMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdF9pMzJ4NCAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTMyeDRfMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfdW5kZWZpbmVkX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Jyb2FkY2FzdF9pMzJ4NCAoX19tMjU2aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTMyeDRfMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdF9pMzJ4NCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpMzJ4NF8yNTZfbWFzayAoKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Jyb2FkY2FzdHNkX3BkIChfX20yNTZkIF9fTywgX19tbWFzazggX19NLCBfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X2Jyb2FkY2FzdHNkX3BkKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9icm9hZGNhc3RzZF9wZCAoX19tbWFzazggX19NLCBfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X2Jyb2FkY2FzdHNkX3BkKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2Jyb2FkY2FzdHNzX3BzIChfX20xMjggX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOChfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fYnJvYWRjYXN0c3NfcHMoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fTyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9icm9hZGNhc3Rzc19wcyAoX19tbWFzazggX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX2Jyb2FkY2FzdHNzX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYnJvYWRjYXN0c3NfcHMgKF9fbTI1NiBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9icm9hZGNhc3Rzc19wcyhfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdHNzX3BzIChfX21tYXNrOCBfX00sIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfYnJvYWRjYXN0c3NfcHMoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYnJvYWRjYXN0ZF9lcGkzMiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOChfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKSBfbW1fYnJvYWRjYXN0ZF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9icm9hZGNhc3RkX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX2Jyb2FkY2FzdGRfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYnJvYWRjYXN0ZF9lcGkzMiAoX19tMjU2aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfYnJvYWRjYXN0ZF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9icm9hZGNhc3RkX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX21tMjU2X2Jyb2FkY2FzdGRfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYnJvYWRjYXN0cV9lcGk2NCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOChfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fYnJvYWRjYXN0cV9lcGk2NChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9icm9hZGNhc3RxX2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX2Jyb2FkY2FzdHFfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYnJvYWRjYXN0cV9lcGk2NCAoX19tMjU2aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfYnJvYWRjYXN0cV9lcGk2NChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9icm9hZGNhc3RxX2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X2Jyb2FkY2FzdHFfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNlcGkzMl9lcGk4IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2RiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0c2VwaTMyX2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZGIxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRzZXBpMzJfZXBpOCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2RiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRzZXBpMzJfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZGIxMjhtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192NHNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0c2VwaTMyX2VwaTggKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRzZXBpMzJfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNkYjI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHNlcGkzMl9lcGk4IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHNlcGkzMl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnNkYjI1Nm1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3Y4c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzZXBpMzJfZXBpMTYgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZHcxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0c2VwaTMyX2VwaTE2IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2R3MTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpX19PLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRzZXBpMzJfZXBpMTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRzZXBpMzJfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92c2R3MTI4bWVtX21hc2sgKChfX3Y4aGkgKikgX19QLCAoX192NHNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0c2VwaTMyX2VwaTE2IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2R3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRzZXBpMzJfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZHcyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHNlcGkzMl9lcGkxNiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2R3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHNlcGkzMl9zdG9yZXVfZXBpMTYgKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZHcyNTZtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y4c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzZXBpNjRfZXBpOCAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxYjEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHNlcGk2NF9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FiMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0c2VwaTY0X2VwaTggKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxYjEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0c2VwaTY0X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92c3FiMTI4bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjJkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHNlcGk2NF9lcGk4IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FiMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0c2VwaTY0X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWIyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRzZXBpNjRfZXBpOCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FiMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRzZXBpNjRfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWIyNTZtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192NGRpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2VwaTY0X2VwaTMyIChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRzZXBpNjRfZXBpMzIgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWQxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHNlcGk2NF9lcGkzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHNlcGk2NF9zdG9yZXVfZXBpMzIgKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWQxMjhtZW1fbWFzayAoKF9fdjRzaSAqKSBfX1AsIChfX3YyZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRzZXBpNjRfZXBpMzIgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHNlcGk2NF9lcGkzMiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxZDI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNpKV9fTywKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0c2VwaTY0X2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0c2VwaTY0X3N0b3JldV9lcGkzMiAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnNxZDI1Nm1lbV9tYXNrICgoX192NHNpICopIF9fUCwgKF9fdjRkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNlcGk2NF9lcGkxNiAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxdzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0c2VwaTY0X2VwaTE2IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3F3MTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRzZXBpNjRfZXBpMTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxdzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRzZXBpNjRfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92c3F3MTI4bWVtX21hc2sgKChfX3Y4aGkgKikgX19QLCAoX192MmRpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0c2VwaTY0X2VwaTE2IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3F3MjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRzZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcXcyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHNlcGk2NF9lcGkxNiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3F3MjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHNlcGk2NF9zdG9yZXVfZXBpMTYgKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcXcyNTZtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y0ZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR1c2VwaTMyX2VwaTggKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2RiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR1c2VwaTMyX2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2RiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dXNlcGkzMl9lcGk4IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2RiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpMzJfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2RiMTI4bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjRzaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHVzZXBpMzJfZXBpOCAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpMzJfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR1c2VwaTMyX2VwaTggKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dXNlcGkzMl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnVzZGIyNTZtZW1fbWFzayAoKF9fdjE2cWkqKSBfX1AsIChfX3Y4c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR1c2VwaTMyX2VwaTE2IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR1c2VwaTMyX2VwaTE2IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHVzZXBpMzJfZXBpMTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZHcxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR1c2VwaTMyX3N0b3JldV9lcGkxNiAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnVzZHcxMjhtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y0c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR1c2VwaTMyX2VwaTE2IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNkdzI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dXNlcGkzMl9lcGkxNiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZHcyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR1c2VwaTMyX2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2R3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dXNlcGkzMl9zdG9yZXVfZXBpMTYgKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2R3MjU2bWVtX21hc2sgKChfX3Y4aGkgKikgX19QLCAoX192OHNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dXNlcGk2NF9lcGk4IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dXNlcGk2NF9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHVzZXBpNjRfZXBpOCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR1c2VwaTY0X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjEyOG1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3YyZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR1c2VwaTY0X2VwaTggKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FiMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR1c2VwaTY0X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FiMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dXNlcGk2NF9lcGk4IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FiMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FiMjU2bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjRkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHVzZXBpNjRfZXBpMzIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpNjRfZXBpMzIgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dXNlcGk2NF9lcGkzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxZDEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTMyICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92dXNxZDEyOG1lbV9tYXNrICgoX192NHNpICopIF9fUCwgKF9fdjJkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHVzZXBpNjRfZXBpMzIgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpNjRfZXBpMzIgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dXNlcGk2NF9lcGkzMiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxZDI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTMyICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92dXNxZDI1Nm1lbV9tYXNrICgoX192NHNpICopIF9fUCwgKF9fdjRkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHVzZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3MTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3MTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dXNlcGk2NF9lcGkxNiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxdzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92dXNxdzEyOG1lbV9tYXNrICgoX192OGhpICopIF9fUCwgKF9fdjJkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHVzZXBpNjRfZXBpMTYgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3MjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3MjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dXNlcGk2NF9lcGkxNiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxdzI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcG1vdnVzcXcyNTZtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y0ZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGkzMl9lcGk4IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92ZGIxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpMzJfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdmRiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcGkzMl9lcGk4IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkYjEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnFpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaTMyX3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92ZGIxMjhtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192NHNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpMzJfZXBpOCAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdmRiMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTMyX2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkYjI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpMzJfZXBpOCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92ZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkzMl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdmRiMjU2bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjhzaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTMyX2VwaTE2IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92ZHcxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGkzMl9lcGkxNiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdmR3MTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTMyX2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpMzJfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92ZHcxMjhtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y0c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGkzMl9lcGkxNiAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdmR3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkzMl9lcGkxNiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdmR3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaTMyX2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkdzI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpMzJfc3RvcmV1X2VwaTE2ICh2b2lkICogIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdmR3MjU2bWVtX21hc2sgKChfX3Y4aGkgKikgX19QLCAoX192OHNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXBpNjRfZXBpOCAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFiMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGk2NF9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cWIxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTY0X2VwaTggKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFiMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpNjRfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZxYjEyOG1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3YyZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGk2NF9lcGk4IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cWIyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTY0X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxYjI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpNjRfZXBpOCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cWIyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGk2NF9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnFiMjU2bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjRkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTY0X2VwaTMyIChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cWQxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGk2NF9lcGkzMiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTY0X2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxZDEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpNjRfc3RvcmV1X2VwaTMyICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92cWQxMjhtZW1fbWFzayAoKF9fdjRzaSAqKSBfX1AsIChfX3YyZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGk2NF9lcGkzMiAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTY0X2VwaTMyIChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cWQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpNjRfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGk2NF9zdG9yZXVfZXBpMzIgKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZxZDI1Nm1lbV9tYXNrICgoX192NHNpICopIF9fUCwgKF9fdjRkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTY0X2VwaTE2IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cXcxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGhpKSBfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxdzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpX19PLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTY0X2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxdzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpNjRfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92cXcxMjhtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3YyZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGk2NF9lcGkxNiAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnF3MjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxdzI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRlcGk2NF9lcGkxNiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cXcyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTY0X3N0b3JldV9lcGkxNiAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnF3MjU2bWVtX21hc2sgKChfX3Y4aGkgKikgX19QLCAoX192NGRpKSBfX0EsIF9fTSk7Cit9CisKKyNkZWZpbmUgX21tMjU2X2V4dHJhY3RmMzJ4NF9wcyhBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RmMzJ4NF8yNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfZXh0cmFjdGYzMng0X3BzKFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZXh0cmFjdGYzMng0XzI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9leHRyYWN0ZjMyeDRfcHMoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9leHRyYWN0ZjMyeDRfMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfZXh0cmFjdGkzMng0X2VwaTMyKEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RpMzJ4NF8yNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2V4dHJhY3RpMzJ4NF9lcGkzMihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9leHRyYWN0aTMyeDRfMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfZXh0cmFjdGkzMng0X2VwaTMyKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2V4dHJhY3RpMzJ4NF8yNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaW5zZXJ0ZjMyeDQoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9pbnNlcnRmMzJ4NF8yNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaW5zZXJ0ZjMyeDQoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9pbnNlcnRmMzJ4NF8yNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfaW5zZXJ0ZjMyeDQoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9pbnNlcnRmMzJ4NF8yNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pbnNlcnRpMzJ4NChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9pbnNlcnRpMzJ4NF8yNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2luc2VydGkzMng0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2luc2VydGkzMng0XzI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X2luc2VydGkzMng0KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2luc2VydGkzMng0XzI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9nZXRtYW50X3BkKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2V0bWFudHBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2dldG1hbnRfcGQoVywgVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50cGQxMjhfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2dldG1hbnRfcGQoVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50cGQxMjhfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9nZXRtYW50X3BkKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50cGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfZ2V0bWFudF9wZChXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfZ2V0bWFudHBkMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9nZXRtYW50X3BkKFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50cGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9nZXRtYW50X3BzKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwczEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2dldG1hbnRfcHMoVywgVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2V0bWFudHBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpIHwgKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfZ2V0bWFudF9wcyhVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nZXRtYW50cHMxMjhfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2dldG1hbnRfcHMoQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfZ2V0bWFudHBzMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpIHwgKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfZ2V0bWFudF9wcyhXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9nZXRtYW50cHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9nZXRtYW50X3BzKFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwczI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTY0Z2F0aGVyX3BkKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2MmRmKChfX3YyZGYpKF9fbTEyOGQpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTY0Z2F0aGVyX2VwaTY0KHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2MmRpKChfX3YyZGkpKF9fbTEyOGkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTY0Z2F0aGVyX3BkKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2NGRmKChfX3Y0ZGYpKF9fbTI1NmQpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTY0Z2F0aGVyX2VwaTY0KHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2NGRpKChfX3Y0ZGkpKF9fbTI1NmkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTY0Z2F0aGVyX3BzKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcjNkaXY0c2YoKF9fdjRzZikoX19tMTI4KSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTY0Z2F0aGVyX2VwaTMyKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2NHNpKChfX3Y0c2kpKF9fbTEyOGkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTY0Z2F0aGVyX3BzKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcjNkaXY4c2YoKF9fdjRzZikoX19tMTI4KSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTY0Z2F0aGVyX2VwaTMyKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2OHNpKChfX3Y0c2kpKF9fbTEyOGkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTMyZ2F0aGVyX3BkKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2MmRmKChfX3YyZGYpKF9fbTEyOGQpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTMyZ2F0aGVyX2VwaTY0KHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2MmRpKChfX3YyZGkpKF9fbTEyOGkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTMyZ2F0aGVyX3BkKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2NGRmKChfX3Y0ZGYpKF9fbTI1NmQpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTMyZ2F0aGVyX2VwaTY0KHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2NGRpKChfX3Y0ZGkpKF9fbTI1NmkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTMyZ2F0aGVyX3BzKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcjNzaXY0c2YoKF9fdjRzZikoX19tMTI4KSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTMyZ2F0aGVyX2VwaTMyKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2NHNpKChfX3Y0c2kpKF9fbTEyOGkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTMyZ2F0aGVyX3BzKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2dhdGhlcjNzaXY4c2YoKF9fdjhzZikoX19tMjU2KSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTMyZ2F0aGVyX2VwaTMyKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2OHNpKChfX3Y4c2kpKF9fbTI1NmkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcGVybXV0ZXhfcGQoWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGYpKF9fbTI1NmQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQykgPj4gMCkgJiAweDMsICgoQykgPj4gMikgJiAweDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDKSA+PiA0KSAmIDB4MywgKChDKSA+PiA2KSAmIDB4Myk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfcGVybXV0ZXhfcGQoVywgVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9wZXJtdXRleF9wZCgoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFcpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfcGVybXV0ZXhfcGQoVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9wZXJtdXRleF9wZCgoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3Blcm11dGV4X2VwaTY0KFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRpKShfX20yNTZpKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEMpID4+IDApICYgMHgzLCAoKEMpID4+IDIpICYgMHgzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQykgPj4gNCkgJiAweDMsICgoQykgPj4gNikgJiAweDMpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3Blcm11dGV4X2VwaTY0KFcsIFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3Blcm11dGV4X2VwaTY0KChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3Blcm11dGV4X2VwaTY0KFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3Blcm11dGV4X2VwaTY0KChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV4dmFyX3BkIChfX20yNTZpIF9fWCwgX19tMjU2ZCBfX1kpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfcGVybXZhcmRmMjU2X21hc2sgKChfX3Y0ZGYpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfdW5kZWZpbmVkX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4dmFyX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwKKyAgICAgICAgICBfX20yNTZkIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGYyNTZfbWFzayAoKF9fdjRkZikgX19ZLAorICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4dmFyX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZkIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGYyNTZfbWFzayAoKF9fdjRkZikgX19ZLAorICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGVybXV0ZXh2YXJfZXBpNjQgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJkaTI1Nl9tYXNrICgoX192NGRpKSBfX1ksCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleHZhcl9lcGk2NCAoIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGkyNTZfbWFzayAoKF9fdjRkaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcGVybXV0ZXh2YXJfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19YLAorICAgICAgICAgICAgIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJkaTI1Nl9tYXNrICgoX192NGRpKSBfX1ksCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wZXJtdXRleHZhcl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwKKyAgICAgICAgICBfX20yNTYgX19ZKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfcGVybXZhcnNmMjU2X21hc2sgKChfX3Y4c2YpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4dmFyX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTYgX19ZKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfcGVybXZhcnNmMjU2X21hc2sgKChfX3Y4c2YpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXh2YXJfcHMgKF9fbTI1NmkgX19YLCBfX20yNTYgX19ZKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfcGVybXZhcnNmMjU2X21hc2sgKChfX3Y4c2YpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wZXJtdXRleHZhcl9lcGkzMiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGVybXZhcnNpMjU2X21hc2sgKChfX3Y4c2kpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4dmFyX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fWCwKKyAgICAgICAgICAgICBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyc2kyNTZfbWFzayAoKF9fdjhzaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV4dmFyX2VwaTMyIChfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGVybXZhcnNpMjU2X21hc2sgKChfX3Y4c2kpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCisjZGVmaW5lIF9tbV9hbGlnbnJfZXBpMzIoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWxpZ25kMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19hbGlnbnJfZXBpMzIoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWxpZ25kMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2FsaWducl9lcGkzMihVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9hbGlnbmQxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2FsaWducl9lcGkzMihBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9hbGlnbmQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2FsaWducl9lcGkzMihXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9hbGlnbmQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfYWxpZ25yX2VwaTMyKFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2FsaWduZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fYWxpZ25yX2VwaTY0KEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2FsaWducTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fZGkoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2FsaWducl9lcGk2NChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9hbGlnbnExMjhfbWFzaygoX192MmRpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfYWxpZ25yX2VwaTY0KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2FsaWducTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fZGkoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfYWxpZ25yX2VwaTY0KEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2FsaWducTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfYWxpZ25yX2VwaTY0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2FsaWducTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9hbGlnbnJfZXBpNjQoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfYWxpZ25xMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tb3ZlaGR1cF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX21vdmVoZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tb3ZlaGR1cF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX21vdmVoZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZlaGR1cF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X21vdmVoZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZlaGR1cF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X21vdmVoZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tb3ZlbGR1cF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX21vdmVsZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tb3ZlbGR1cF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX21vdmVsZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZlbGR1cF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X21vdmVsZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZlbGR1cF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X21vdmVsZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCkpOworfQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3NodWZmbGVfZXBpMzIoVywgVSwgQSwgSSkgX19leHRlbnNpb25fXyh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NodWZmbGVfZXBpMzIoKEEpLCAoSSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKFcpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc2h1ZmZsZV9lcGkzMihVLCBBLCBJKSBfX2V4dGVuc2lvbl9fKHtcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2h1ZmZsZV9lcGkzMigoQSksIChJKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19zaHVmZmxlX2VwaTMyKFcsIFUsIEEsIEkpIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zaHVmZmxlX2VwaTMyKChBKSwgKEkpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3NodWZmbGVfZXBpMzIoVSwgQSwgSSkgX19leHRlbnNpb25fXyh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NodWZmbGVfZXBpMzIoKEEpLCAoSSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tb3ZfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tb3ZfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfc2V0emVyb19wZCAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21vdl9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzZikgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21vdl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMgKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAgIChfX3Y4c2YpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzICgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0cGhfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHNfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRwaF9wcyAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZjdnRwaDJwc19tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBoX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmN2dHBoMnBzMjU2X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0cGhfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHMyNTZfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBzX3BoIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaF9tYXNrICgoX192NHNmKSBfX0EsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHBzX3BoIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdmN2dHBzMnBoX21hc2sgKChfX3Y0c2YpIF9fQSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisjZGVmaW5lIF9tbV9tYXNrX2N2dF9yb3VuZHBzX3BoKFcsIFUsIEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGhfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfY3Z0X3JvdW5kcHNfcGgoVSwgQSwgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwc19waCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGgyNTZfbWFzayAoKF9fdjhzZikgX19BLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBzX3BoICggX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaDI1Nl9tYXNrICgoX192OHNmKSBfX0EsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisjZGVmaW5lIF9tbTI1Nl9tYXNrX2N2dF9yb3VuZHBzX3BoKFcsIFUsIEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGgyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfY3Z0X3JvdW5kcHNfcGgoVSwgQSwgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaDI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0FWWDUxMlZMSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4aW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YmZkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eGludHJpbi5oCkBAIC0wLDAgKzEsMjkyOCBAQAorLyo9PT0tLS0tIGF2eGludHJpbi5oIC0gQVZYIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0FWWElOVFJJTl9ICisjZGVmaW5lIF9fQVZYSU5UUklOX0gKKwordHlwZWRlZiBkb3VibGUgX192NGRmIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOwordHlwZWRlZiBmbG9hdCBfX3Y4c2YgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZyBfX3Y0ZGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIGludCBfX3Y4c2kgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIHNob3J0IF9fdjE2aGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIGNoYXIgX192MzJxaSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKKworLyogVW5zaWduZWQgdHlwZXMgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdjRkdSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fdjhzdSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX192MTZodSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3YzMnF1IF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOworCisvKiBXZSBuZWVkIGFuIGV4cGxpY2l0bHkgc2lnbmVkIHZhcmlhbnQgZm9yIGNoYXIuIE5vdGUgdGhhdCB0aGlzIHNob3VsZG4ndAorICogYXBwZWFyIGluIHRoZSBpbnRlcmZhY2UgdGhvdWdoLiAqLwordHlwZWRlZiBzaWduZWQgY2hhciBfX3YzMnFzIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygzMikpKTsKKwordHlwZWRlZiBmbG9hdCBfX20yNTYgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIGRvdWJsZSBfX20yNTZkIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygzMikpKTsKK3R5cGVkZWYgbG9uZyBsb25nIF9fbTI1NmkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDMyKSkpOworCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eCIpKSkKKworLyogQXJpdGhtZXRpYyAqLworLy8vIFxicmllZiBBZGRzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzQgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBRERQRCAvIEFERFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgc3VtcyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZGYpX19hKyhfX3Y0ZGYpX19iKTsKK30KKworLy8vIFxicmllZiBBZGRzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFERFBTIC8gQUREUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBzdW1zIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiAoX19tMjU2KSgoX192OHNmKV9fYSsoX192OHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzQgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZTVUJQRCAvIFNVQlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHN1YnRyYWhlbmQuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbgorLy8vICAgIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZGYpX19hLShfX3Y0ZGYpX19iKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU1VCUFMgLyBTVUJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZC4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4KKy8vLyAgICBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpKChfX3Y4c2YpX19hLShfX3Y4c2YpX19iKTsKK30KKworLy8vIFxicmllZiBBZGRzIHRoZSBldmVuLWluZGV4ZWQgdmFsdWVzIGFuZCBzdWJ0cmFjdHMgdGhlIG9kZC1pbmRleGVkIHZhbHVlcyBvZgorLy8vICAgIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzQgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBRERTVUJQRCAvIEFERFNVQlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGxlZnQgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHJpZ2h0IHNvdXJjZSBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGFsdGVybmF0aW5nIHN1bXMKKy8vLyAgICBhbmQgZGlmZmVyZW5jZXMgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkc3ViX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2FkZHN1YnBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQWRkcyB0aGUgZXZlbi1pbmRleGVkIHZhbHVlcyBhbmQgc3VidHJhY3RzIHRoZSBvZGQtaW5kZXhlZCB2YWx1ZXMgb2YKKy8vLyAgICB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs4IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBRERTVUJQUyAvIEFERFNVQlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbGVmdCBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSByaWdodCBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGFsdGVybmF0aW5nIHN1bXMgYW5kCisvLy8gICAgZGlmZmVyZW5jZXMgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRzdWJfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfYWRkc3VicHMyNTYoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iKTsKK30KKworLy8vIFxicmllZiBEaXZpZGVzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzQgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZESVZQRCAvIERJVlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGRpdmlkZW5kLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBkaXZpc29yLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHF1b3RpZW50cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9kaXZfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZGYpX19hLyhfX3Y0ZGYpX19iKTsKK30KKworLy8vIFxicmllZiBEaXZpZGVzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkRJVlBTIC8gRElWUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBkaXZpZGVuZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBkaXZpc29yLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgcXVvdGllbnRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZGl2X3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiAoX19tMjU2KSgoX192OHNmKV9fYS8oX192OHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0gYW5kIHJldHVybnMgdGhlIGdyZWF0ZXIKKy8vLyAgICBvZiBlYWNoIHBhaXIgb2YgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNQVhQRCAvIE1BWFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIG1heGltdW0gdmFsdWVzCisvLy8gICAgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWF4X3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX21heHBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XSBhbmQgcmV0dXJucyB0aGUgZ3JlYXRlcgorLy8vICAgIG9mIGVhY2ggcGFpciBvZiB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1BWFBTIC8gTUFYUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbWF4aW11bSB2YWx1ZXMKKy8vLyAgICBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21heF9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9tYXhwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzQgeCBkb3VibGVdIGFuZCByZXR1cm5zIHRoZSBsZXNzZXIKKy8vLyAgICBvZiBlYWNoIHBhaXIgb2YgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNSU5QRCAvIE1JTlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIG1pbmltdW0gdmFsdWVzCisvLy8gICAgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX21pbnBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XSBhbmQgcmV0dXJucyB0aGUgbGVzc2VyCisvLy8gICAgb2YgZWFjaCBwYWlyIG9mIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTUlOUFMgLyBNSU5QUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBtaW5pbXVtIHZhbHVlcworLy8vICAgIGJldHdlZW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX21pbnBzMjU2KChfX3Y4c2YpX19hLCAoX192OHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs0IHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTVVMUEQgLyBNVUxQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBwcm9kdWN0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tdWxfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZGYpX19hICogKF9fdjRkZilfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTVVMUFMgLyBNVUxQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBwcm9kdWN0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X211bF9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NikoKF9fdjhzZilfX2EgKiAoX192OHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ2FsY3VsYXRlcyB0aGUgc3F1YXJlIHJvb3RzIG9mIHRoZSB2YWx1ZXMgaW4gYSAyNTYtYml0IHZlY3RvciBvZgorLy8vICAgIFs0IHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU1FSVFBEIC8gU1FSVFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHNxdWFyZSByb290cyBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcXJ0X3BkKF9fbTI1NmQgX19hKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc3FydHBkMjU2KChfX3Y0ZGYpX19hKTsKK30KKworLy8vIFxicmllZiBDYWxjdWxhdGVzIHRoZSBzcXVhcmUgcm9vdHMgb2YgdGhlIHZhbHVlcyBpbiBhIDI1Ni1iaXQgdmVjdG9yIG9mCisvLy8gICAgWzggeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlNRUlRQUyAvIFNRUlRQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3F1YXJlIHJvb3RzIG9mIHRoZQorLy8vICAgIHZhbHVlcyBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3FydF9wcyhfX20yNTYgX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zcXJ0cHMyNTYoKF9fdjhzZilfX2EpOworfQorCisvLy8gXGJyaWVmIENhbGN1bGF0ZXMgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3RzIG9mIHRoZSB2YWx1ZXMgaW4gYSAyNTYtYml0CisvLy8gICAgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZSU1FSVFBTIC8gUlNRUlRQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgcmVjaXByb2NhbCBzcXVhcmUKKy8vLyAgICByb290cyBvZiB0aGUgdmFsdWVzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yc3FydF9wcyhfX20yNTYgX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9yc3FydHBzMjU2KChfX3Y4c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDYWxjdWxhdGVzIHRoZSByZWNpcHJvY2FscyBvZiB0aGUgdmFsdWVzIGluIGEgMjU2LWJpdCB2ZWN0b3Igb2YKKy8vLyAgICBbOCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUkNQUFMgLyBSQ1BQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgcmVjaXByb2NhbHMgb2YgdGhlCisvLy8gICAgdmFsdWVzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yY3BfcHMoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfcmNwcHMyNTYoKF9fdjhzZilfX2EpOworfQorCisvLy8gXGJyaWVmIFJvdW5kcyB0aGUgdmFsdWVzIGluIGEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGFzIHNwZWNpZmllZAorLy8vICAgIGJ5IHRoZSBieXRlIG9wZXJhbmQuIFRoZSBzb3VyY2UgdmFsdWVzIGFyZSByb3VuZGVkIHRvIGludGVnZXIgdmFsdWVzIGFuZAorLy8vICAgIHJldHVybmVkIGFzIDY0LWJpdCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2ZCBfbW0yNTZfcm91bmRfcGQoX19tMjU2ZCBWLCBjb25zdCBpbnQgTSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUk9VTkRQRCAvIFJPVU5EUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBNCisvLy8gICAgQW4gaW50ZWdlciB2YWx1ZSB0aGF0IHNwZWNpZmllcyB0aGUgcm91bmRpbmcgb3BlcmF0aW9uLgorLy8vICAgIEJpdHMgWzc6NF0gYXJlIHJlc2VydmVkLgorLy8vICAgIEJpdCBbM10gaXMgYSBwcmVjaXNpb24gZXhjZXB0aW9uIHZhbHVlOgorLy8vICAgIDA6IEEgbm9ybWFsIFBFIGV4Y2VwdGlvbiBpcyB1c2VkLgorLy8vICAgIDE6IFRoZSBQRSBmaWVsZCBpcyBub3QgdXBkYXRlZC4KKy8vLyAgICBCaXQgWzJdIGlzIHRoZSByb3VuZGluZyBjb250cm9sIHNvdXJjZToKKy8vLyAgICAwOiBVc2UgYml0cyBbMTowXSBvZiBNLgorLy8vICAgIDE6IFVzZSB0aGUgY3VycmVudCBNWENTUiBzZXR0aW5nLgorLy8vICAgIEJpdHMgWzE6MF0gY29udGFpbiB0aGUgcm91bmRpbmcgY29udHJvbCBkZWZpbml0aW9uOgorLy8vICAgIDAwOiBOZWFyZXN0LgorLy8vICAgIDAxOiBEb3dud2FyZCAodG93YXJkIG5lZ2F0aXZlIGluZmluaXR5KS4KKy8vLyAgICAxMDogVXB3YXJkICh0b3dhcmQgcG9zaXRpdmUgaW5maW5pdHkpLgorLy8vICAgIDExOiBUcnVuY2F0ZWQuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgcm91bmRlZCB2YWx1ZXMuCisjZGVmaW5lIF9tbTI1Nl9yb3VuZF9wZChWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9yb3VuZHBkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKFYpLCAoTSkpOyB9KQorCisvLy8gXGJyaWVmIFJvdW5kcyB0aGUgdmFsdWVzIHN0b3JlZCBpbiBhIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGFzCisvLy8gICAgc3BlY2lmaWVkIGJ5IHRoZSBieXRlIG9wZXJhbmQuIFRoZSBzb3VyY2UgdmFsdWVzIGFyZSByb3VuZGVkIHRvIGludGVnZXIKKy8vLyAgICB2YWx1ZXMgYW5kIHJldHVybmVkIGFzIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2IF9tbTI1Nl9yb3VuZF9wcyhfX20yNTYgViwgY29uc3QgaW50IE0pOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlJPVU5EUFMgLyBST1VORFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIFYKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxwYXJhbSBNCisvLy8gICAgQW4gaW50ZWdlciB2YWx1ZSB0aGF0IHNwZWNpZmllcyB0aGUgcm91bmRpbmcgb3BlcmF0aW9uLgorLy8vICAgIEJpdHMgWzc6NF0gYXJlIHJlc2VydmVkLgorLy8vICAgIEJpdCBbM10gaXMgYSBwcmVjaXNpb24gZXhjZXB0aW9uIHZhbHVlOgorLy8vICAgIDA6IEEgbm9ybWFsIFBFIGV4Y2VwdGlvbiBpcyB1c2VkLgorLy8vICAgIDE6IFRoZSBQRSBmaWVsZCBpcyBub3QgdXBkYXRlZC4KKy8vLyAgICBCaXQgWzJdIGlzIHRoZSByb3VuZGluZyBjb250cm9sIHNvdXJjZToKKy8vLyAgICAwOiBVc2UgYml0cyBbMTowXSBvZiBNLgorLy8vICAgIDE6IFVzZSB0aGUgY3VycmVudCBNWENTUiBzZXR0aW5nLgorLy8vICAgIEJpdHMgWzE6MF0gY29udGFpbiB0aGUgcm91bmRpbmcgY29udHJvbCBkZWZpbml0aW9uOgorLy8vICAgIDAwOiBOZWFyZXN0LgorLy8vICAgIDAxOiBEb3dud2FyZCAodG93YXJkIG5lZ2F0aXZlIGluZmluaXR5KS4KKy8vLyAgICAxMDogVXB3YXJkICh0b3dhcmQgcG9zaXRpdmUgaW5maW5pdHkpLgorLy8vICAgIDExOiBUcnVuY2F0ZWQuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSByb3VuZGVkIHZhbHVlcy4KKyNkZWZpbmUgX21tMjU2X3JvdW5kX3BzKFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JvdW5kcHMyNTYoKF9fdjhzZikoX19tMjU2KShWKSwgKE0pKTsgfSkKKworLy8vIFxicmllZiBSb3VuZHMgdXAgdGhlIHZhbHVlcyBzdG9yZWQgaW4gYSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0uIFRoZQorLy8vICAgIHNvdXJjZSB2YWx1ZXMgYXJlIHJvdW5kZWQgdXAgdG8gaW50ZWdlciB2YWx1ZXMgYW5kIHJldHVybmVkIGFzIDY0LWJpdAorLy8vICAgIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTZkIF9tbTI1Nl9jZWlsX3BkKF9fbTI1NmQgVik7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUk9VTkRQRCAvIFJPVU5EUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHJvdW5kZWQgdXAgdmFsdWVzLgorI2RlZmluZSBfbW0yNTZfY2VpbF9wZChWKSAgX21tMjU2X3JvdW5kX3BkKChWKSwgX01NX0ZST1VORF9DRUlMKQorCisvLy8gXGJyaWVmIFJvdW5kcyBkb3duIHRoZSB2YWx1ZXMgc3RvcmVkIGluIGEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vICAgIFRoZSBzb3VyY2UgdmFsdWVzIGFyZSByb3VuZGVkIGRvd24gdG8gaW50ZWdlciB2YWx1ZXMgYW5kIHJldHVybmVkIGFzCisvLy8gICAgNjQtYml0IGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTZkIF9tbTI1Nl9mbG9vcl9wZChfX20yNTZkIFYpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlJPVU5EUEQgLyBST1VORFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIFYKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSByb3VuZGVkIGRvd24KKy8vLyAgICB2YWx1ZXMuCisjZGVmaW5lIF9tbTI1Nl9mbG9vcl9wZChWKSBfbW0yNTZfcm91bmRfcGQoKFYpLCBfTU1fRlJPVU5EX0ZMT09SKQorCisvLy8gXGJyaWVmIFJvdW5kcyB1cCB0aGUgdmFsdWVzIHN0b3JlZCBpbiBhIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLiBUaGUKKy8vLyAgICBzb3VyY2UgdmFsdWVzIGFyZSByb3VuZGVkIHVwIHRvIGludGVnZXIgdmFsdWVzIGFuZCByZXR1cm5lZCBhcworLy8vICAgIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2IF9tbTI1Nl9jZWlsX3BzKF9fbTI1NiBWKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZST1VORFBTIC8gUk9VTkRQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBWCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHJvdW5kZWQgdXAgdmFsdWVzLgorI2RlZmluZSBfbW0yNTZfY2VpbF9wcyhWKSAgX21tMjU2X3JvdW5kX3BzKChWKSwgX01NX0ZST1VORF9DRUlMKQorCisvLy8gXGJyaWVmIFJvdW5kcyBkb3duIHRoZSB2YWx1ZXMgc3RvcmVkIGluIGEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0uIFRoZQorLy8vICAgIHNvdXJjZSB2YWx1ZXMgYXJlIHJvdW5kZWQgZG93biB0byBpbnRlZ2VyIHZhbHVlcyBhbmQgcmV0dXJuZWQgYXMKKy8vLyAgICBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTI1NiBfbW0yNTZfZmxvb3JfcHMoX19tMjU2IFYpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlJPVU5EUFMgLyBST1VORFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIFYKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgcm91bmRlZCBkb3duIHZhbHVlcy4KKyNkZWZpbmUgX21tMjU2X2Zsb29yX3BzKFYpIF9tbTI1Nl9yb3VuZF9wcygoViksIF9NTV9GUk9VTkRfRkxPT1IpCisKKy8qIExvZ2ljYWwgKi8KKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs0IHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQU5EUEQgLyBBTkRQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZQorLy8vICAgIHZhbHVlcyBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hbmRfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZHUpX19hICYgKF9fdjRkdSlfX2IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQU5EUFMgLyBBTkRQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZQorLy8vICAgIHZhbHVlcyBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FuZF9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NikoKF9fdjhzdSlfX2EgJiAoX192OHN1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs0IHggZG91YmxlXSwgdXNpbmcKKy8vLyAgICB0aGUgb25lJ3MgY29tcGxlbWVudCBvZiB0aGUgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFORE5QRCAvIEFORE5QRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBsZWZ0IHNvdXJjZSBvcGVyYW5kLiBUaGUKKy8vLyAgICBvbmUncyBjb21wbGVtZW50IG9mIHRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgYml0d2lzZSBBTkQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHJpZ2h0IHNvdXJjZSBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZQorLy8vICAgIHZhbHVlcyBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHRoZSBvbmUncyBjb21wbGVtZW50IG9mIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hbmRub3RfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKH4oX192NGR1KV9fYSAmIChfX3Y0ZHUpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0sIHVzaW5nCisvLy8gICAgdGhlIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBTkROUFMgLyBBTkROUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBsZWZ0IHNvdXJjZSBvcGVyYW5kLiBUaGUKKy8vLyAgICBvbmUncyBjb21wbGVtZW50IG9mIHRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgYml0d2lzZSBBTkQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgcmlnaHQgc291cmNlIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBiaXR3aXNlIEFORCBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGFuZCB0aGUgb25lJ3MgY29tcGxlbWVudCBvZiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hbmRub3RfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpKH4oX192OHN1KV9fYSAmIChfX3Y4c3UpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgT1Igb2YgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk9SUEQgLyBPUlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgYml0d2lzZSBPUiBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfb3JfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZHUpX19hIHwgKF9fdjRkdSlfX2IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBPUiBvZiB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs4IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZPUlBTIC8gT1JQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgT1Igb2YgdGhlCisvLy8gICAgdmFsdWVzIGJldHdlZW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfb3JfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpKChfX3Y4c3UpX19hIHwgKF9fdjhzdSlfX2IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBYT1Igb2YgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlhPUlBEIC8gWE9SUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBiaXR3aXNlIFhPUiBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfeG9yX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKSgoX192NGR1KV9fYSBeIChfX3Y0ZHUpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgWE9SIG9mIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlhPUlBTIC8gWE9SUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBiaXR3aXNlIFhPUiBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl94b3JfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpKChfX3Y4c3UpX19hIF4gKF9fdjhzdSlfX2IpOworfQorCisvKiBIb3Jpem9udGFsIGFyaXRobWV0aWMgKi8KKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IGFkZHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gdHdvCisvLy8gICAgMjU2LWJpdCB2ZWN0b3JzIG9mIFs0IHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWSEFERFBEIC8gSEFERFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiB0aGUgZXZlbi1pbmRleGVkCisvLy8gICAgZWxlbWVudHMgb2YgYSB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vICAgIFRoZSBob3Jpem9udGFsIHN1bXMgb2YgdGhlIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gdGhlIG9kZC1pbmRleGVkCisvLy8gICAgZWxlbWVudHMgb2YgYSB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgc3VtcyBvZgorLy8vICAgIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oYWRkX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2hhZGRwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBhZGRzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIHR3bworLy8vICAgIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWSEFERFBTIC8gSEFERFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHJldHVybmVkIGluIHRoZSBlbGVtZW50cyB3aXRoCisvLy8gICAgaW5kZXggMCwgMSwgNCwgNSBvZiBhIHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vICAgIFRoZSBob3Jpem9udGFsIHN1bXMgb2YgdGhlIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gdGhlIGVsZW1lbnRzIHdpdGgKKy8vLyAgICBpbmRleCAyLCAzLCA2LCA3IG9mIGEgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBzdW1zIG9mCisvLy8gICAgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfaGFkZF9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9oYWRkcHMyNTYoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iKTsKK30KKworLy8vIFxicmllZiBIb3Jpem9udGFsbHkgc3VidHJhY3RzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIHR3bworLy8vICAgIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkhTVUJQRCAvIEhTVUJQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vICAgIFRoZSBob3Jpem9udGFsIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gdGhlCisvLy8gICAgZXZlbi1pbmRleGVkIGVsZW1lbnRzIG9mIGEgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHJldHVybmVkIGluIHRoZQorLy8vICAgIG9kZC1pbmRleGVkIGVsZW1lbnRzIG9mIGEgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsCisvLy8gICAgZGlmZmVyZW5jZXMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2hzdWJfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfaHN1YnBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IHN1YnRyYWN0cyB0aGUgYWRqYWNlbnQgcGFpcnMgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiB0d28KKy8vLyAgICAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkhTVUJQUyAvIEhTVUJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGhvcml6b250YWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiB0aGUKKy8vLyAgICBlbGVtZW50cyB3aXRoIGluZGV4IDAsIDEsIDQsIDUgb2YgYSB2ZWN0b3Igb2YgWzggeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHJldHVybmVkIGluIHRoZQorLy8vICAgIGVsZW1lbnRzIHdpdGggaW5kZXggMiwgMywgNiwgNyBvZiBhIHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwKKy8vLyAgICBkaWZmZXJlbmNlcyBvZiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oc3ViX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2hzdWJwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOworfQorCisvKiBWZWN0b3IgcGVybXV0YXRpb25zICovCisvLy8gXGJyaWVmIENvcGllcyB0aGUgdmFsdWVzIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGFzIHNwZWNpZmllZAorLy8vICAgIGJ5IHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFUk1JTFBEIC8gUEVSTUlMUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIF9fYworLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIHNwZWNpZnlpbmcgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlCisvLy8gICAgY29waWVkLgorLy8vICAgIEJpdCBbMV06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxOiBCaXRzIFsxMjc6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFs2NV06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzEyNzo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGNvcGllZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wZXJtdXRldmFyX3BkKF9fbTEyOGQgX19hLCBfX20xMjhpIF9fYykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwZCgoX192MmRmKV9fYSwgKF9fdjJkaSlfX2MpOworfQorCisvLy8gXGJyaWVmIENvcGllcyB0aGUgdmFsdWVzIGluIGEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGFzCisvLy8gICAgc3BlY2lmaWVkIGJ5IHRoZSAyNTYtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFUk1JTFBEIC8gUEVSTUlMUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIF9fYworLy8vICAgIEEgMjU2LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIHNwZWNpZnlpbmcgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlCisvLy8gICAgY29waWVkLgorLy8vICAgIEJpdCBbMV06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxOiBCaXRzIFsxMjc6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFs2NV06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzEyNzo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdCBbMTI5XToKKy8vLyAgICAwOiBCaXRzIFsxOTE6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzI1NToxOTJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTI4XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFsxOTNdOgorLy8vICAgIDA6IEJpdHMgWzE5MToxMjhdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTkyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTogQml0cyBbMjU1OjE5Ml0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzI1NToxOTJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBjb3BpZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXZhcl9wZChfX20yNTZkIF9fYSwgX19tMjU2aSBfX2MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycGQyNTYoKF9fdjRkZilfX2EsIChfX3Y0ZGkpX19jKTsKK30KKworLy8vIFxicmllZiBDb3BpZXMgdGhlIHZhbHVlcyBzdG9yZWQgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBhcworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQRVJNSUxQUyAvIFBFUk1JTFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYworLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIHNwZWNpZnlpbmcgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlCisvLy8gICAgY29waWVkLgorLy8vICAgIEJpdHMgWzE6MF06CisvLy8gICAgMDA6IEJpdHMgWzMxOjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFszMTowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzMxOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMTogQml0cyBbMTI3Ojk2XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzMzOjMyXToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MzJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbOTU6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzozMl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzozMl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzY1OjY0XToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbOTU6NjRdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbOTU6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzk3Ojk2XToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFs2MzozMl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvcGllZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm11dGV2YXJfcHMoX19tMTI4IF9fYSwgX19tMTI4aSBfX2MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwcygoX192NHNmKV9fYSwgKF9fdjRzaSlfX2MpOworfQorCisvLy8gXGJyaWVmIENvcGllcyB0aGUgdmFsdWVzIHN0b3JlZCBpbiBhIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGFzCisvLy8gICAgc3BlY2lmaWVkIGJ5IHRoZSAyNTYtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFUk1JTFBTIC8gUEVSTUlMUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19jCisvLy8gICAgQSAyNTYtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQgc3BlY2lmeWluZyBob3cgdGhlIHZhbHVlcyBhcmUgdG8gYmUKKy8vLyAgICBjb3BpZWQuCisvLy8gICAgQml0cyBbMTowXToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzMxOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFszMTowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTA6IEJpdHMgWzk1OjY0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFszMTowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbMzM6MzJdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MzJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzozMl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbNjU6NjRdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbOTU6NjRdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbOTc6OTZdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3Ojk2XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3Ojk2XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTA6IEJpdHMgWzk1OjY0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3Ojk2XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzEyOToxMjhdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzE2MToxNjBdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjE2MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjE2MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjE2MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjE2MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzE5MzoxOTJdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjIzOjE5Ml0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjIzOjE5Ml0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjIzOjE5Ml0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjIzOjE5Ml0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzIyNToyMjRdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29waWVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXZhcl9wcyhfX20yNTYgX19hLCBfX20yNTZpIF9fYykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBzMjU2KChfX3Y4c2YpX19hLCAoX192OHNpKV9fYyk7Cit9CisKKy8vLyBcYnJpZWYgQ29waWVzIHRoZSB2YWx1ZXMgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gYXMKKy8vLyAgICBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOGQgX21tX3Blcm11dGVfcGQoX19tMTI4ZCBBLCBjb25zdCBpbnQgQyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEVSTUlMUEQgLyBQRVJNSUxQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBBCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIEMKKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIHNwZWNpZnlpbmcgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlIGNvcGllZC4KKy8vLyAgICBCaXQgWzBdOgorLy8vICAgIDA6IEJpdHMgWzYzOjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTogQml0cyBbMTI3OjY0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdCBbMV06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzEyNzo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGNvcGllZCB2YWx1ZXMuCisjZGVmaW5lIF9tbV9wZXJtdXRlX3BkKEEsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEMpID4+IDApICYgMHgxLCAoKEMpID4+IDEpICYgMHgxKTsgfSkKKworLy8vIFxicmllZiBDb3BpZXMgdGhlIHZhbHVlcyBpbiBhIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBhcworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2ZCBfbW0yNTZfcGVybXV0ZV9wZChfX20yNTZkIEEsIGNvbnN0IGludCBDKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQRVJNSUxQRCAvIFBFUk1JTFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIEEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gQworLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQgc3BlY2lmeWluZyBob3cgdGhlIHZhbHVlcyBhcmUgdG8gYmUgY29waWVkLgorLy8vICAgIEJpdCBbMF06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxOiBCaXRzIFsxMjc6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFsxXToKKy8vLyAgICAwOiBCaXRzIFs2MzowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTogQml0cyBbMTI3OjY0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFsyXToKKy8vLyAgICAwOiBCaXRzIFsxOTE6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzI1NToxOTJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTI4XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFszXToKKy8vLyAgICAwOiBCaXRzIFsxOTE6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjE5Ml0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzI1NToxOTJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTkyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgY29waWVkIHZhbHVlcy4KKyNkZWZpbmUgX21tMjU2X3Blcm11dGVfcGQoQSwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChDKSA+PiAwKSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDEpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICsgKCgoQykgPj4gMikgJiAweDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyAoKChDKSA+PiAzKSAmIDB4MSkpOyB9KQorCisvLy8gXGJyaWVmIENvcGllcyB0aGUgdmFsdWVzIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gYXMKKy8vLyAgICBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOCBfbW1fcGVybXV0ZV9wcyhfX20xMjggQSwgY29uc3QgaW50IEMpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFUk1JTFBTIC8gUEVSTUlMUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gQQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIEMKKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIHNwZWNpZnlpbmcgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlIGNvcGllZC4KKy8vLyAgICBCaXRzIFsxOjBdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFs2MzozMl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzMxOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbOTU6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFszMTowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzMxOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICBCaXRzIFszOjJdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MzJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzozMl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbNTo0XToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbOTU6NjRdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbOTU6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzc6Nl06CisvLy8gICAgMDA6IEJpdHMgWzMxOjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbOTU6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMTogQml0cyBbMTI3Ojk2XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3Ojk2XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb3BpZWQgdmFsdWVzLgorI2RlZmluZSBfbW1fcGVybXV0ZV9wcyhBLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEMpID4+IDApICYgMHgzLCAoKEMpID4+IDIpICYgMHgzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDKSA+PiA0KSAmIDB4MywgKChDKSA+PiA2KSAmIDB4Myk7IH0pCisKKy8vLyBcYnJpZWYgQ29waWVzIHRoZSB2YWx1ZXMgaW4gYSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBhcworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2IF9tbTI1Nl9wZXJtdXRlX3BzKF9fbTI1NiBBLCBjb25zdCBpbnQgQyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEVSTUlMUFMgLyBQRVJNSUxQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBBCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gQworLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQgc3BlY2lmeWluZyBob3cgdGhlIHZhbHVlcyBhcmUgdG8gYmUgY29waWVkLgorLy8vICAgIEJpdHMgWzE6MF06CisvLy8gICAgMDA6IEJpdHMgWzMxOjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFszMTowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzMxOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMTogQml0cyBbMTI3Ojk2XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzM6Ml06CisvLy8gICAgMDA6IEJpdHMgWzMxOjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzozMl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFs2MzozMl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTA6IEJpdHMgWzk1OjY0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MzJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMTogQml0cyBbMTI3Ojk2XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MzJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICBCaXRzIFs1OjRdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbOTU6NjRdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbNzo2XToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFs2MzozMl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICBCaXRzIFsxOjBdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzM6Ml06CisvLy8gICAgMDA6IEJpdHMgWzE1OToxMjhdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTYwXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzE5MToxNjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTYwXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTA6IEJpdHMgWzIyMzoxOTJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTYwXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzI1NToyMjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTYwXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbNTo0XToKKy8vLyAgICAwMDogQml0cyBbMTU5OjEyOF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzIyMzoxOTJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbMTkxOjE2MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzIyMzoxOTJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbMjIzOjE5Ml0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzIyMzoxOTJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMTogQml0cyBbMjU1OjIyNF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzIyMzoxOTJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICBCaXRzIFs3OjZdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29waWVkIHZhbHVlcy4KKyNkZWZpbmUgX21tMjU2X3Blcm11dGVfcHMoQSwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChDKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoQykgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSA+PiA2KSAmIDB4MykpOyB9KQorCisvLy8gXGJyaWVmIFBlcm11dGVzIDEyOC1iaXQgZGF0YSB2YWx1ZXMgc3RvcmVkIGluIHR3byAyNTYtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbNCB4IGRvdWJsZV0sIGFzIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2ZCBfbW0yNTZfcGVybXV0ZTJmMTI4X3BkKF9fbTI1NmQgVjEsIF9fbTI1NmQgVjIsIGNvbnN0IGludCBNKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQRVJNMkYxMjggLyBQRVJNMkYxMjggaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVjEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gVjIKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlLgorLy8vIFxwYXJhbSBNCisvLy8gICAgQW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCBzcGVjaWZ5aW5nIGhvdyB0aGUgdmFsdWVzIGFyZSB0byBiZQorLy8vICAgIHBlcm11dGVkLgorLy8vICAgIEJpdHMgWzE6MF06CisvLy8gICAgMDA6IEJpdHMgWzEyNzowXSBvZiBvcGVyYW5kIFYxIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDAxOiBCaXRzIFsyNTU6MTI4XSBvZiBvcGVyYW5kIFYxIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDEwOiBCaXRzIFsxMjc6MF0gb2Ygb3BlcmFuZCBWMiBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAxMTogQml0cyBbMjU1OjEyOF0gb2Ygb3BlcmFuZCBWMiBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFs1OjRdOgorLy8vICAgIDAwOiBCaXRzIFsxMjc6MF0gb2Ygb3BlcmFuZCBWMSBhcmUgY29waWVkIHRvIGJpdHMgWzI1NToxMjhdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDAxOiBCaXRzIFsyNTU6MTI4XSBvZiBvcGVyYW5kIFYxIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjEyOF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMTA6IEJpdHMgWzEyNzowXSBvZiBvcGVyYW5kIFYyIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjEyOF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMTE6IEJpdHMgWzI1NToxMjhdIG9mIG9wZXJhbmQgVjIgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTI4XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBjb3BpZWQgdmFsdWVzLgorI2RlZmluZSBfbW0yNTZfcGVybXV0ZTJmMTI4X3BkKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZwZXJtMmYxMjhfcGQyNTYoKF9fdjRkZikoX19tMjU2ZCkoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoVjIpLCAoTSkpOyB9KQorCisvLy8gXGJyaWVmIFBlcm11dGVzIDEyOC1iaXQgZGF0YSB2YWx1ZXMgc3RvcmVkIGluIHR3byAyNTYtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbOCB4IGZsb2F0XSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTYgX21tMjU2X3Blcm11dGUyZjEyOF9wcyhfX20yNTYgVjEsIF9fbTI1NiBWMiwgY29uc3QgaW50IE0pOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFUk0yRjEyOCAvIFBFUk0yRjEyOCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBWMQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0uCisvLy8gXHBhcmFtIFYyCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gTQorLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQgc3BlY2lmeWluZyBob3cgdGhlIHZhbHVlcyBhcmUgdG8gYmUKKy8vLyAgICBwZXJtdXRlZC4KKy8vLyAgICBCaXRzIFsxOjBdOgorLy8vICAgIDAwOiBCaXRzIFsxMjc6MF0gb2Ygb3BlcmFuZCBWMSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAwMTogQml0cyBbMjU1OjEyOF0gb2Ygb3BlcmFuZCBWMSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAxMDogQml0cyBbMTI3OjBdIG9mIG9wZXJhbmQgVjIgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6MF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMTE6IEJpdHMgWzI1NToxMjhdIG9mIG9wZXJhbmQgVjIgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6MF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNTo0XToKKy8vLyAgICAwMDogQml0cyBbMTI3OjBdIG9mIG9wZXJhbmQgVjEgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTI4XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAwMTogQml0cyBbMjU1OjEyOF0gb2Ygb3BlcmFuZCBWMSBhcmUgY29waWVkIHRvIGJpdHMgWzI1NToxMjhdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDEwOiBCaXRzIFsxMjc6MF0gb2Ygb3BlcmFuZCBWMiBhcmUgY29waWVkIHRvIGJpdHMgWzI1NToxMjhdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MTI4XSBvZiBvcGVyYW5kIFYyIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjEyOF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb3BpZWQgdmFsdWVzLgorI2RlZmluZSBfbW0yNTZfcGVybXV0ZTJmMTI4X3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfdnBlcm0yZjEyOF9wczI1NigoX192OHNmKShfX20yNTYpKFYxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShWMiksIChNKSk7IH0pCisKKy8vLyBcYnJpZWYgUGVybXV0ZXMgMTI4LWJpdCBkYXRhIHZhbHVlcyBzdG9yZWQgaW4gdHdvIDI1Ni1iaXQgaW50ZWdlciB2ZWN0b3JzLAorLy8vICAgIGFzIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2aSBfbW0yNTZfcGVybXV0ZTJmMTI4X3NpMjU2KF9fbTI1NmkgVjEsIF9fbTI1NmkgVjIsIGNvbnN0IGludCBNKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQRVJNMkYxMjggLyBQRVJNMkYxMjggaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVjEKKy8vLyAgICBBIDI1Ni1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHBhcmFtIFYyCisvLy8gICAgQSAyNTYtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxwYXJhbSBNCisvLy8gICAgQW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCBzcGVjaWZ5aW5nIGhvdyB0aGUgdmFsdWVzIGFyZSB0byBiZSBjb3BpZWQuCisvLy8gICAgQml0cyBbMTowXToKKy8vLyAgICAwMDogQml0cyBbMTI3OjBdIG9mIG9wZXJhbmQgVjEgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6MF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMDE6IEJpdHMgWzI1NToxMjhdIG9mIG9wZXJhbmQgVjEgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6MF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMTA6IEJpdHMgWzEyNzowXSBvZiBvcGVyYW5kIFYyIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MTI4XSBvZiBvcGVyYW5kIFYyIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdHMgWzU6NF06CisvLy8gICAgMDA6IEJpdHMgWzEyNzowXSBvZiBvcGVyYW5kIFYxIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjEyOF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMDE6IEJpdHMgWzI1NToxMjhdIG9mIG9wZXJhbmQgVjEgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTI4XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAxMDogQml0cyBbMTI3OjBdIG9mIG9wZXJhbmQgVjIgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTI4XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAxMTogQml0cyBbMjU1OjEyOF0gb2Ygb3BlcmFuZCBWMiBhcmUgY29waWVkIHRvIGJpdHMgWzI1NToxMjhdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb3BpZWQgdmFsdWVzLgorI2RlZmluZSBfbW0yNTZfcGVybXV0ZTJmMTI4X3NpMjU2KFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3ZwZXJtMmYxMjhfc2kyNTYoKF9fdjhzaSkoX19tMjU2aSkoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoVjIpLCAoTSkpOyB9KQorCisvKiBWZWN0b3IgQmxlbmQgKi8KKy8vLyBcYnJpZWYgTWVyZ2VzIDY0LWJpdCBkb3VibGUtcHJlY2lzaW9uIGRhdGEgdmFsdWVzIHN0b3JlZCBpbiBlaXRoZXIgb2YgdGhlCisvLy8gICAgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0sIGFzIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlCisvLy8gICAgaW50ZWdlciBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTZkIF9tbTI1Nl9ibGVuZF9wZChfX20yNTZkIFYxLCBfX20yNTZkIFYyLCBjb25zdCBpbnQgTSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQkxFTkRQRCAvIEJMRU5EUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVjEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gVjIKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gTQorLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQsIHdpdGggbWFzayBiaXRzIFszOjBdIHNwZWNpZnlpbmcgaG93IHRoZQorLy8vICAgIHZhbHVlcyBhcmUgdG8gYmUgY29waWVkLiBUaGUgcG9zaXRpb24gb2YgdGhlIG1hc2sgYml0IGNvcnJlc3BvbmRzIHRvIHRoZQorLy8vICAgIGluZGV4IG9mIGEgY29waWVkIHZhbHVlLiBXaGVuIGEgbWFzayBiaXQgaXMgMCwgdGhlIGNvcnJlc3BvbmRpbmcgNjQtYml0CisvLy8gICAgZWxlbWVudCBpbiBvcGVyYW5kIFYxIGlzIGNvcGllZCB0byB0aGUgc2FtZSBwb3NpdGlvbiBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgV2hlbiBhIG1hc2sgYml0IGlzIDEsIHRoZSBjb3JyZXNwb25kaW5nIDY0LWJpdCBlbGVtZW50IGluIG9wZXJhbmQgVjIgaXMKKy8vLyAgICBjb3BpZWQgdG8gdGhlIHNhbWUgcG9zaXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGNvcGllZCB2YWx1ZXMuCisjZGVmaW5lIF9tbTI1Nl9ibGVuZF9wZChWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKShfX20yNTZkKShWMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoVjIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyA0IDogMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAyKSA/IDUgOiAxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gNiA6IDIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwOCkgPyA3IDogMykpOyB9KQorCisvLy8gXGJyaWVmIE1lcmdlcyAzMi1iaXQgc2luZ2xlLXByZWNpc2lvbiBkYXRhIHZhbHVlcyBzdG9yZWQgaW4gZWl0aGVyIG9mIHRoZQorLy8vICAgIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0sIGFzIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlCisvLy8gICAgaW50ZWdlciBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTYgX21tMjU2X2JsZW5kX3BzKF9fbTI1NiBWMSwgX19tMjU2IFYyLCBjb25zdCBpbnQgTSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQkxFTkRQUyAvIEJMRU5EUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVjEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxwYXJhbSBWMgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0uCisvLy8gXHBhcmFtIE0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kLCB3aXRoIG1hc2sgYml0cyBbNzowXSBzcGVjaWZ5aW5nIGhvdyB0aGUKKy8vLyAgICB2YWx1ZXMgYXJlIHRvIGJlIGNvcGllZC4gVGhlIHBvc2l0aW9uIG9mIHRoZSBtYXNrIGJpdCBjb3JyZXNwb25kcyB0byB0aGUKKy8vLyAgICBpbmRleCBvZiBhIGNvcGllZCB2YWx1ZS4gV2hlbiBhIG1hc2sgYml0IGlzIDAsIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdAorLy8vICAgIGVsZW1lbnQgaW4gb3BlcmFuZCBWMSBpcyBjb3BpZWQgdG8gdGhlIHNhbWUgcG9zaXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIFdoZW4gYSBtYXNrIGJpdCBpcyAxLCB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZWxlbWVudCBpbiBvcGVyYW5kIFYyIGlzCisvLy8gICAgY29waWVkIHRvIHRoZSBzYW1lIHBvc2l0aW9uIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvcGllZCB2YWx1ZXMuCisjZGVmaW5lIF9tbTI1Nl9ibGVuZF9wcyhWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2YpKF9fbTI1NikoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShWMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gIDggOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyAgOSA6IDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA0KSA/IDEwIDogMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gMTEgOiAzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgxMCkgPyAxMiA6IDQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDIwKSA/IDEzIDogNSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4NDApID8gMTQgOiA2KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg4MCkgPyAxNSA6IDcpKTsgfSkKKworLy8vIFxicmllZiBNZXJnZXMgNjQtYml0IGRvdWJsZS1wcmVjaXNpb24gZGF0YSB2YWx1ZXMgc3RvcmVkIGluIGVpdGhlciBvZiB0aGUKKy8vLyAgICB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs0IHggZG91YmxlXSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSAyNTYtYml0IHZlY3RvcgorLy8vICAgIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkJMRU5EVlBEIC8gQkxFTkRWUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBfX2MKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9wZXJhbmQsIHdpdGggbWFzayBiaXRzIDI1NSwgMTkxLCAxMjcsIGFuZCA2MyBzcGVjaWZ5aW5nCisvLy8gICAgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlIGNvcGllZC4gVGhlIHBvc2l0aW9uIG9mIHRoZSBtYXNrIGJpdCBjb3JyZXNwb25kcworLy8vICAgIHRvIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBhIGNvcGllZCB2YWx1ZS4gV2hlbiBhIG1hc2sgYml0IGlzIDAsIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgNjQtYml0IGVsZW1lbnQgaW4gb3BlcmFuZCBfX2EgaXMgY29waWVkIHRvIHRoZSBzYW1lCisvLy8gICAgcG9zaXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uLiBXaGVuIGEgbWFzayBiaXQgaXMgMSwgdGhlIGNvcnJlc3BvbmRpbmcKKy8vLyAgICA2NC1iaXQgZWxlbWVudCBpbiBvcGVyYW5kIF9fYiBpcyBjb3BpZWQgdG8gdGhlIHNhbWUgcG9zaXRpb24gaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgY29waWVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2JsZW5kdl9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IsIF9fbTI1NmQgX19jKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfYmxlbmR2cGQyNTYoCisgICAgKF9fdjRkZilfX2EsIChfX3Y0ZGYpX19iLCAoX192NGRmKV9fYyk7Cit9CisKKy8vLyBcYnJpZWYgTWVyZ2VzIDMyLWJpdCBzaW5nbGUtcHJlY2lzaW9uIGRhdGEgdmFsdWVzIHN0b3JlZCBpbiBlaXRoZXIgb2YgdGhlCisvLy8gICAgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSAyNTYtYml0IHZlY3RvcgorLy8vICAgIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkJMRU5EVlBTIC8gQkxFTkRWUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19jCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvcGVyYW5kLCB3aXRoIG1hc2sgYml0cyAyNTUsIDIyMywgMTkxLCAxNTksIDEyNywgOTUsIDYzLAorLy8vICAgIGFuZCAzMSBzcGVjaWZ5aW5nIGhvdyB0aGUgdmFsdWVzIGFyZSB0byBiZSBjb3BpZWQuIFRoZSBwb3NpdGlvbiBvZiB0aGUKKy8vLyAgICBtYXNrIGJpdCBjb3JyZXNwb25kcyB0byB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgYSBjb3BpZWQgdmFsdWUuIFdoZW4KKy8vLyAgICBhIG1hc2sgYml0IGlzIDAsIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBlbGVtZW50IGluIG9wZXJhbmQgX19hIGlzCisvLy8gICAgY29waWVkIHRvIHRoZSBzYW1lIHBvc2l0aW9uIGluIHRoZSBkZXN0aW5hdGlvbi4gV2hlbiBhIG1hc2sgYml0IGlzIDEsIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgMzItYml0IGVsZW1lbnQgaW4gb3BlcmFuZCBfX2IgaXMgY29waWVkIHRvIHRoZSBzYW1lCisvLy8gICAgcG9zaXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29waWVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYmxlbmR2X3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IsIF9fbTI1NiBfX2MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2JsZW5kdnBzMjU2KAorICAgIChfX3Y4c2YpX19hLCAoX192OHNmKV9fYiwgKF9fdjhzZilfX2MpOworfQorCisvKiBWZWN0b3IgRG90IFByb2R1Y3QgKi8KKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdHdvIGRvdCBwcm9kdWN0cyBpbiBwYXJhbGxlbCwgdXNpbmcgdGhlIGxvd2VyIGFuZCB1cHBlcgorLy8vICAgIGhhbHZlcyBvZiB0d28gWzggeCBmbG9hdF0gdmVjdG9ycyBhcyBpbnB1dCB0byB0aGUgdHdvIGNvbXB1dGF0aW9ucywgYW5kCisvLy8gICAgcmV0dXJuaW5nIHRoZSB0d28gZG90IHByb2R1Y3RzIGluIHRoZSBsb3dlciBhbmQgdXBwZXIgaGFsdmVzIG9mIHRoZQorLy8vICAgIFs4IHggZmxvYXRdIHJlc3VsdC4gVGhlIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQgY29udHJvbHMgd2hpY2gKKy8vLyAgICBpbnB1dCBlbGVtZW50cyB3aWxsIGNvbnRyaWJ1dGUgdG8gdGhlIGRvdCBwcm9kdWN0LCBhbmQgd2hlcmUgdGhlIGZpbmFsCisvLy8gICAgcmVzdWx0cyBhcmUgcmV0dXJuZWQuIEluIGdlbmVyYWwsIGZvciBlYWNoIGRvdCBwcm9kdWN0LCB0aGUgZm91cgorLy8vICAgIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhlIGlucHV0IHZlY3RvcnMgYXJlIG11bHRpcGxpZWQ7IHRoZSBmaXJzdAorLy8vICAgIHR3byBhbmQgc2Vjb25kIHR3byBwcm9kdWN0cyBhcmUgc3VtbWVkLCB0aGVuIHRoZSB0d28gc3VtcyBhcmUgYWRkZWQgdG8KKy8vLyAgICBmb3JtIHRoZSBmaW5hbCByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTI1NiBfbW0yNTZfZHBfcHMoX19tMjU2IFYxLCBfX20yNTYgVjIsIGNvbnN0IGludCBNKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZEUFBTIC8gRFBQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBWMQorLy8vICAgIEEgdmVjdG9yIG9mIFs4IHggZmxvYXRdIHZhbHVlcywgdHJlYXRlZCBhcyB0d28gWzQgeCBmbG9hdF0gdmVjdG9ycy4KKy8vLyBccGFyYW0gVjIKKy8vLyAgICBBIHZlY3RvciBvZiBbOCB4IGZsb2F0XSB2YWx1ZXMsIHRyZWF0ZWQgYXMgdHdvIFs0IHggZmxvYXRdIHZlY3RvcnMuCisvLy8gXHBhcmFtIE0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBhcmd1bWVudC4gQml0cyBbNzo0XSBkZXRlcm1pbmUgd2hpY2ggZWxlbWVudHMgb2YKKy8vLyAgICB0aGUgaW5wdXQgdmVjdG9ycyBhcmUgdXNlZCwgd2l0aCBiaXQgWzRdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvd2VzdAorLy8vICAgIGVsZW1lbnQgYW5kIGJpdCBbN10gY29ycmVzcG9uZGluZyB0byB0aGUgaGlnaGVzdCBlbGVtZW50IG9mIGVhY2ggWzQgeAorLy8vICAgIGZsb2F0XSBzdWJ2ZWN0b3IuIElmIGEgYml0IGlzIHNldCwgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgZnJvbSB0aGUKKy8vLyAgICB0d28gaW5wdXQgdmVjdG9ycyBhcmUgdXNlZCBhcyBhbiBpbnB1dCBmb3IgZG90IHByb2R1Y3Q7IG90aGVyd2lzZSB0aGF0CisvLy8gICAgaW5wdXQgaXMgdHJlYXRlZCBhcyB6ZXJvLiBCaXRzIFszOjBdIGRldGVybWluZSB3aGljaCBlbGVtZW50cyBvZiB0aGUKKy8vLyAgICByZXN1bHQgd2lsbCByZWNlaXZlIGEgY29weSBvZiB0aGUgZmluYWwgZG90IHByb2R1Y3QsIHdpdGggYml0IFswXQorLy8vICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvd2VzdCBlbGVtZW50IGFuZCBiaXQgWzNdIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisvLy8gICAgaGlnaGVzdCBlbGVtZW50IG9mIGVhY2ggWzQgeCBmbG9hdF0gc3VidmVjdG9yLiBJZiBhIGJpdCBpcyBzZXQsIHRoZSBkb3QKKy8vLyAgICBwcm9kdWN0IGlzIHJldHVybmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQ7IG90aGVyd2lzZSB0aGF0IGVsZW1lbnQKKy8vLyAgICBpcyBzZXQgdG8gemVyby4gVGhlIGJpdG1hc2sgaXMgYXBwbGllZCBpbiB0aGUgc2FtZSB3YXkgdG8gZWFjaCBvZiB0aGUKKy8vLyAgICB0d28gcGFyYWxsZWwgZG90IHByb2R1Y3QgY29tcHV0YXRpb25zLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgdHdvIGRvdCBwcm9kdWN0cy4KKyNkZWZpbmUgX21tMjU2X2RwX3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfZHBwczI1NigoX192OHNmKShfX20yNTYpKFYxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShWMiksIChNKSk7IH0pCisKKy8qIFZlY3RvciBzaHVmZmxlICovCisvLy8gXGJyaWVmIFNlbGVjdHMgOCBmbG9hdCB2YWx1ZXMgZnJvbSB0aGUgMjU2LWJpdCBvcGVyYW5kcyBvZiBbOCB4IGZsb2F0XSwgYXMKKy8vLyAgICBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSB2YWx1ZSBvcGVyYW5kLiBUaGUgZm91ciBzZWxlY3RlZCBlbGVtZW50cyBpbgorLy8vICAgIGVhY2ggb3BlcmFuZCBhcmUgY29waWVkIHRvIHRoZSBkZXN0aW5hdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGJpdHMKKy8vLyAgICBzcGVjaWZpZWQgaW4gdGhlIGltbWVkaWF0ZSBvcGVyYW5kLiBUaGUgc2VsZWN0ZWQgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3QKKy8vLyAgICAyNTYtYml0IG9wZXJhbmQgYXJlIGNvcGllZCB0byBiaXRzIFs2MzowXSBhbmQgYml0cyBbMTkxOjEyOF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24sIGFuZCB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgZnJvbSB0aGUgc2Vjb25kIDI1Ni1iaXQgb3BlcmFuZAorLy8vICAgIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjY0XSBhbmQgYml0cyBbMjU1OjE5Ml0gb2YgdGhlIGRlc3RpbmF0aW9uLiBGb3IKKy8vLyAgICBleGFtcGxlLCBpZiBiaXRzIFs3OjBdIG9mIHRoZSBpbW1lZGlhdGUgb3BlcmFuZCBjb250YWluIGEgdmFsdWUgb2YgMHhGRiwKKy8vLyAgICB0aGUgMjU2LWJpdCBkZXN0aW5hdGlvbiB2ZWN0b3Igd291bGQgY29udGFpbiB0aGUgZm9sbG93aW5nIHZhbHVlczogYls3XSwKKy8vLyAgICBiWzddLCBhWzddLCBhWzddLCBiWzNdLCBiWzNdLCBhWzNdLCBhWzNdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTYgX21tMjU2X3NodWZmbGVfcHMoX19tMjU2IGEsIF9fbTI1NiBiLCBjb25zdCBpbnQgbWFzayk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU0hVRlBTIC8gU0hVRlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLiBUaGUgZm91ciBzZWxlY3RlZCBlbGVtZW50cyBpbiB0aGlzCisvLy8gICAgb3BlcmFuZCBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjBdIGFuZCBiaXRzIFsxOTE6MTI4XSBpbiB0aGUgZGVzdGluYXRpb24sCisvLy8gICAgYWNjb3JkaW5nIHRvIHRoZSBiaXRzIHNwZWNpZmllZCBpbiB0aGUgaW1tZWRpYXRlIG9wZXJhbmQuCisvLy8gXHBhcmFtIGIKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLiBUaGUgZm91ciBzZWxlY3RlZCBlbGVtZW50cyBpbiB0aGlzCisvLy8gICAgb3BlcmFuZCBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gYW5kIGJpdHMgWzI1NToxOTJdIGluIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLCBhY2NvcmRpbmcgdG8gdGhlIGJpdHMgc3BlY2lmaWVkIGluIHRoZSBpbW1lZGlhdGUgb3BlcmFuZC4KKy8vLyBccGFyYW0gbWFzaworLy8vICAgIEFuIGltbWVkaWF0ZSB2YWx1ZSBjb250YWluaW5nIGFuIDgtYml0IHZhbHVlIHNwZWNpZnlpbmcgd2hpY2ggZWxlbWVudHMgdG8KKy8vLyAgICBjb3B5IGZyb20gYSBhbmQgYi4gQml0cyBbMzowXSBzcGVjaWZ5IHRoZSB2YWx1ZXMgY29waWVkIGZyb20gb3BlcmFuZCBhLgorLy8vICAgIEJpdHMgWzc6NF0gc3BlY2lmeSB0aGUgdmFsdWVzIGNvcGllZCBmcm9tIG9wZXJhbmQgYi4KKy8vLyAgICBUaGUgZGVzdGluYXRpb25zIHdpdGhpbiB0aGUgMjU2LWJpdCBkZXN0aW5hdGlvbiBhcmUgYXNzaWduZWQgdmFsdWVzIGFzCisvLy8gICAgZm9sbG93cywgYWNjb3JkaW5nIHRvIHRoZSBiaXQgdmFsdWUgYXNzaWdubWVudHMgZGVzY3JpYmVkIGJlbG93OgorLy8vICAgIEJpdHMgWzE6MF0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFszMTowXSBhbmQgWzE1OToxMjhdIGluIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdHMgWzM6Ml0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFs2MzozMl0gYW5kIFsxOTE6MTYwXSBpbiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFs1OjRdIGFyZSB1c2VkIHRvIGFzc2lnbiB2YWx1ZXMgdG8gYml0cyBbOTU6NjRdIGFuZCBbMjIzOjE5Ml0gaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNzo2XSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzEyNzo5Nl0gYW5kIFsyNTU6MjI0XSBpbgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXQgdmFsdWUgYXNzaWdubWVudHM6CisvLy8gICAgMDA6IEJpdHMgWzMxOjBdIGFuZCBbMTU5OjEyOF0gYXJlIGNvcGllZCBmcm9tIHRoZSBzZWxlY3RlZCBvcGVyYW5kLgorLy8vICAgIDAxOiBCaXRzIFs2MzozMl0gYW5kIFsxOTE6MTYwXSBhcmUgY29waWVkIGZyb20gdGhlIHNlbGVjdGVkIG9wZXJhbmQuCisvLy8gICAgMTA6IEJpdHMgWzk1OjY0XSBhbmQgWzIyMzoxOTJdIGFyZSBjb3BpZWQgZnJvbSB0aGUgc2VsZWN0ZWQgb3BlcmFuZC4KKy8vLyAgICAxMTogQml0cyBbMTI3Ojk2XSBhbmQgWzI1NToyMjRdIGFyZSBjb3BpZWQgZnJvbSB0aGUgc2VsZWN0ZWQgb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHNodWZmbGVkIHZhbHVlcy4KKyNkZWZpbmUgX21tMjU2X3NodWZmbGVfcHMoYSwgYiwgbWFzaykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzZikoX19tMjU2KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICArICgoKG1hc2spID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgobWFzaykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgKyAoKChtYXNrKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICArICgoKG1hc2spID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgobWFzaykgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgKyAoKChtYXNrKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKG1hc2spID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgobWFzaykgPj4gNikgJiAweDMpKTsgfSkKKworLy8vIFxicmllZiBTZWxlY3RzIGZvdXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgZnJvbSB0aGUgMjU2LWJpdCBvcGVyYW5kcyBvZgorLy8vICAgIFs0IHggZG91YmxlXSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBpbW1lZGlhdGUgdmFsdWUgb3BlcmFuZC4gVGhlIHNlbGVjdGVkCisvLy8gICAgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3QgMjU2LWJpdCBvcGVyYW5kIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MF0gYW5kCisvLy8gICAgYml0cyBbMTkxOjEyOF0gaW4gdGhlIGRlc3RpbmF0aW9uLCBhbmQgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIGZyb20gdGhlCisvLy8gICAgc2Vjb25kIDI1Ni1iaXQgb3BlcmFuZCBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gYW5kIGJpdHMgWzI1NToxOTJdIGluCisvLy8gICAgdGhlIGRlc3RpbmF0aW9uLiBGb3IgZXhhbXBsZSwgaWYgYml0cyBbMzowXSBvZiB0aGUgaW1tZWRpYXRlIG9wZXJhbmQKKy8vLyAgICBjb250YWluIGEgdmFsdWUgb2YgMHhGLCB0aGUgMjU2LWJpdCBkZXN0aW5hdGlvbiB2ZWN0b3Igd291bGQgY29udGFpbiB0aGUKKy8vLyAgICBmb2xsb3dpbmcgdmFsdWVzOiBiWzNdLCBhWzNdLCBiWzFdLCBhWzFdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTZkIF9tbTI1Nl9zaHVmZmxlX3BkKF9fbTI1NmQgYSwgX19tMjU2ZCBiLCBjb25zdCBpbnQgbWFzayk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU0hVRlBEIC8gU0hVRlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBtYXNrCisvLy8gICAgQW4gaW1tZWRpYXRlIHZhbHVlIGNvbnRhaW5pbmcgOC1iaXQgdmFsdWVzIHNwZWNpZnlpbmcgd2hpY2ggZWxlbWVudHMgdG8KKy8vLyAgICBjb3B5IGZyb20gYSBhbmQgYjoKKy8vLyAgICBCaXQgWzBdPTA6IEJpdHMgWzYzOjBdIGFyZSBjb3BpZWQgZnJvbSBhIHRvIGJpdHMgWzYzOjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdCBbMF09MTogQml0cyBbMTI3OjY0XSBhcmUgY29waWVkIGZyb20gYSB0byBiaXRzIFs2MzowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXQgWzFdPTA6IEJpdHMgWzYzOjBdIGFyZSBjb3BpZWQgZnJvbSBiIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0IFsxXT0xOiBCaXRzIFsxMjc6NjRdIGFyZSBjb3BpZWQgZnJvbSBiIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0IFsyXT0wOiBCaXRzIFsxOTE6MTI4XSBhcmUgY29waWVkIGZyb20gYSB0byBiaXRzIFsxOTE6MTI4XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXQgWzJdPTE6IEJpdHMgWzI1NToxOTJdIGFyZSBjb3BpZWQgZnJvbSBhIHRvIGJpdHMgWzE5MToxMjhdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdCBbM109MDogQml0cyBbMTkxOjEyOF0gYXJlIGNvcGllZCBmcm9tIGIgdG8gYml0cyBbMjU1OjE5Ml0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0IFszXT0xOiBCaXRzIFsyNTU6MTkyXSBhcmUgY29waWVkIGZyb20gYiB0byBiaXRzIFsyNTU6MTkyXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBzaHVmZmxlZCB2YWx1ZXMuCisjZGVmaW5lIF9tbTI1Nl9zaHVmZmxlX3BkKGEsIGIsIG1hc2spIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKShfX20yNTZkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgobWFzaykgPj4gMCkgJiAweDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChtYXNrKSA+PiAxKSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiArICgoKG1hc2spID4+IDIpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICsgKCgobWFzaykgPj4gMykgJiAweDEpKTsgfSkKKworLyogQ29tcGFyZSAqLworI2RlZmluZSBfQ01QX0VRX09RICAgIDB4MDAgLyogRXF1YWwgKG9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0xUX09TICAgIDB4MDEgLyogTGVzcy10aGFuIChvcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0xFX09TICAgIDB4MDIgLyogTGVzcy10aGFuLW9yLWVxdWFsIChvcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX1VOT1JEX1EgIDB4MDMgLyogVW5vcmRlcmVkIChub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfVVEgICAweDA0IC8qIE5vdC1lcXVhbCAodW5vcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OTFRfVVMgICAweDA1IC8qIE5vdC1sZXNzLXRoYW4gKHVub3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OTEVfVVMgICAweDA2IC8qIE5vdC1sZXNzLXRoYW4tb3ItZXF1YWwgKHVub3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9PUkRfUSAgICAweDA3IC8qIE9yZGVyZWQgKG5vbnNpZ25hbGluZykgICAqLworI2RlZmluZSBfQ01QX0VRX1VRICAgIDB4MDggLyogRXF1YWwgKHVub3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfTkdFX1VTICAgMHgwOSAvKiBOb3QtZ3JlYXRlci10aGFuLW9yLWVxdWFsICh1bm9yZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OR1RfVVMgICAweDBhIC8qIE5vdC1ncmVhdGVyLXRoYW4gKHVub3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9GQUxTRV9PUSAweDBiIC8qIEZhbHNlIChvcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfT1EgICAweDBjIC8qIE5vdC1lcXVhbCAob3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfR0VfT1MgICAgMHgwZCAvKiBHcmVhdGVyLXRoYW4tb3ItZXF1YWwgKG9yZGVyZWQsIHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfR1RfT1MgICAgMHgwZSAvKiBHcmVhdGVyLXRoYW4gKG9yZGVyZWQsIHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfVFJVRV9VUSAgMHgwZiAvKiBUcnVlICh1bm9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0VRX09TICAgIDB4MTAgLyogRXF1YWwgKG9yZGVyZWQsIHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfTFRfT1EgICAgMHgxMSAvKiBMZXNzLXRoYW4gKG9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0xFX09RICAgIDB4MTIgLyogTGVzcy10aGFuLW9yLWVxdWFsIChvcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9VTk9SRF9TICAweDEzIC8qIFVub3JkZXJlZCAoc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfVVMgICAweDE0IC8qIE5vdC1lcXVhbCAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX05MVF9VUSAgIDB4MTUgLyogTm90LWxlc3MtdGhhbiAodW5vcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OTEVfVVEgICAweDE2IC8qIE5vdC1sZXNzLXRoYW4tb3ItZXF1YWwgKHVub3JkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9PUkRfUyAgICAweDE3IC8qIE9yZGVyZWQgKHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfRVFfVVMgICAgMHgxOCAvKiBFcXVhbCAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX05HRV9VUSAgIDB4MTkgLyogTm90LWdyZWF0ZXItdGhhbi1vci1lcXVhbCAodW5vcmQsIG5vbi1zaWduKSAgKi8KKyNkZWZpbmUgX0NNUF9OR1RfVVEgICAweDFhIC8qIE5vdC1ncmVhdGVyLXRoYW4gKHVub3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfRkFMU0VfT1MgMHgxYiAvKiBGYWxzZSAob3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfT1MgICAweDFjIC8qIE5vdC1lcXVhbCAob3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9HRV9PUSAgICAweDFkIC8qIEdyZWF0ZXItdGhhbi1vci1lcXVhbCAob3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfR1RfT1EgICAgMHgxZSAvKiBHcmVhdGVyLXRoYW4gKG9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX1RSVUVfVVMgIDB4MWYgLyogVHJ1ZSAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLworCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgb2YgdHdvCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSwgdXNpbmcgdGhlIG9wZXJhdGlvbiBzcGVjaWZpZWQgYnkgdGhlCisvLy8gICAgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZC4gUmV0dXJucyBhIFsyIHggZG91YmxlXSB2ZWN0b3IgY29uc2lzdGluZyBvZgorLy8vICAgIHR3byBkb3VibGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR3byBjb21wYXJpc29uIHJlc3VsdHM6IHplcm8gaWYgdGhlCisvLy8gICAgY29tcGFyaXNvbiBpcyBmYWxzZSwgYW5kIGFsbCAxJ3MgaWYgdGhlIGNvbXBhcmlzb24gaXMgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4ZCBfbW1fY21wX3BkKF9fbTEyOGQgYSwgX19tMTI4ZCBiLCBjb25zdCBpbnQgYyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QUEQgLyBDTVBQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIGIKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccGFyYW0gYworLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQsIHdpdGggYml0cyBbNDowXSBzcGVjaWZ5aW5nIHdoaWNoIGNvbXBhcmlzb24KKy8vLyAgICBvcGVyYXRpb24gdG8gdXNlOgorLy8vICAgIDAwaCwgMDhoLCAxMGgsIDE4aDogRXF1YWwKKy8vLyAgICAwMWgsIDA5aCwgMTFoLCAxOWg6IExlc3MgdGhhbgorLy8vICAgIDAyaCwgMEFoLCAxMmgsIDFBaDogTGVzcyB0aGFuIG9yIGVxdWFsIC8gR3JlYXRlciB0aGFuIG9yIGVxdWFsIChzd2FwcGVkCisvLy8gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kcykKKy8vLyAgICAwM2gsIDBCaCwgMTNoLCAxQmg6IFVub3JkZXJlZAorLy8vICAgIDA0aCwgMENoLCAxNGgsIDFDaDogTm90IGVxdWFsCisvLy8gICAgMDVoLCAwRGgsIDE1aCwgMURoOiBOb3QgbGVzcyB0aGFuIC8gTm90IGdyZWF0ZXIgdGhhbiAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwNmgsIDBFaCwgMTZoLCAxRWg6IE5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgLyBOb3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisvLy8gICAgICAgICAgICAgICAgICAgICAgICAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwN2gsIDBGaCwgMTdoLCAxRmg6IE9yZGVyZWQKKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCisjZGVmaW5lIF9tbV9jbXBfcGQoYSwgYiwgYykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcHBkKChfX3YyZGYpKF9fbTEyOGQpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKGIpLCAoYykpOyB9KQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIG9mIHR3byAxMjgtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbNCB4IGZsb2F0XSwgdXNpbmcgdGhlIG9wZXJhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSBpbnRlZ2VyCisvLy8gICAgb3BlcmFuZC4gUmV0dXJucyBhIFs0IHggZmxvYXRdIHZlY3RvciBjb25zaXN0aW5nIG9mIGZvdXIgZmxvYXRzCisvLy8gICAgY29ycmVzcG9uZGluZyB0byB0aGUgZm91ciBjb21wYXJpc29uIHJlc3VsdHM6IHplcm8gaWYgdGhlIGNvbXBhcmlzb24gaXMKKy8vLyAgICBmYWxzZSwgYW5kIGFsbCAxJ3MgaWYgdGhlIGNvbXBhcmlzb24gaXMgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4IF9tbV9jbXBfcHMoX19tMTI4IGEsIF9fbTEyOCBiLCBjb25zdCBpbnQgYyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QUFMgLyBDTVBQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIGMKKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kLCB3aXRoIGJpdHMgWzQ6MF0gc3BlY2lmeWluZyB3aGljaCBjb21wYXJpc29uCisvLy8gICAgb3BlcmF0aW9uIHRvIHVzZToKKy8vLyAgICAwMGgsIDA4aCwgMTBoLCAxOGg6IEVxdWFsCisvLy8gICAgMDFoLCAwOWgsIDExaCwgMTloOiBMZXNzIHRoYW4KKy8vLyAgICAwMmgsIDBBaCwgMTJoLCAxQWg6IExlc3MgdGhhbiBvciBlcXVhbCAvIEdyZWF0ZXIgdGhhbiBvciBlcXVhbCAoc3dhcHBlZAorLy8vICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHMpCisvLy8gICAgMDNoLCAwQmgsIDEzaCwgMUJoOiBVbm9yZGVyZWQKKy8vLyAgICAwNGgsIDBDaCwgMTRoLCAxQ2g6IE5vdCBlcXVhbAorLy8vICAgIDA1aCwgMERoLCAxNWgsIDFEaDogTm90IGxlc3MgdGhhbiAvIE5vdCBncmVhdGVyIHRoYW4gKHN3YXBwZWQgb3BlcmFuZHMpCisvLy8gICAgMDZoLCAwRWgsIDE2aCwgMUVoOiBOb3QgbGVzcyB0aGFuIG9yIGVxdWFsIC8gTm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorLy8vICAgICAgICAgICAgICAgICAgICAgICAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwN2gsIDBGaCwgMTdoLCAxRmg6IE9yZGVyZWQKKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KKyNkZWZpbmUgX21tX2NtcF9wcyhhLCBiLCBjKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBwcygoX192NHNmKShfX20xMjgpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShiKSwgKGMpKTsgfSkKKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIG9mIHR3bworLy8vICAgIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0sIHVzaW5nIHRoZSBvcGVyYXRpb24gc3BlY2lmaWVkIGJ5IHRoZQorLy8vICAgIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQuIFJldHVybnMgYSBbNCB4IGRvdWJsZV0gdmVjdG9yIGNvbnNpc3Rpbmcgb2YKKy8vLyAgICBmb3VyIGRvdWJsZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZm91ciBjb21wYXJpc29uIHJlc3VsdHM6IHplcm8gaWYgdGhlCisvLy8gICAgY29tcGFyaXNvbiBpcyBmYWxzZSwgYW5kIGFsbCAxJ3MgaWYgdGhlIGNvbXBhcmlzb24gaXMgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2ZCBfbW0yNTZfY21wX3BkKF9fbTI1NmQgYSwgX19tMjU2ZCBiLCBjb25zdCBpbnQgYyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QUEQgLyBDTVBQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIGIKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gYworLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQsIHdpdGggYml0cyBbNDowXSBzcGVjaWZ5aW5nIHdoaWNoIGNvbXBhcmlzb24KKy8vLyAgICBvcGVyYXRpb24gdG8gdXNlOgorLy8vICAgIDAwaCwgMDhoLCAxMGgsIDE4aDogRXF1YWwKKy8vLyAgICAwMWgsIDA5aCwgMTFoLCAxOWg6IExlc3MgdGhhbgorLy8vICAgIDAyaCwgMEFoLCAxMmgsIDFBaDogTGVzcyB0aGFuIG9yIGVxdWFsIC8gR3JlYXRlciB0aGFuIG9yIGVxdWFsIChzd2FwcGVkCisvLy8gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kcykKKy8vLyAgICAwM2gsIDBCaCwgMTNoLCAxQmg6IFVub3JkZXJlZAorLy8vICAgIDA0aCwgMENoLCAxNGgsIDFDaDogTm90IGVxdWFsCisvLy8gICAgMDVoLCAwRGgsIDE1aCwgMURoOiBOb3QgbGVzcyB0aGFuIC8gTm90IGdyZWF0ZXIgdGhhbiAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwNmgsIDBFaCwgMTZoLCAxRWg6IE5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgLyBOb3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisvLy8gICAgICAgICAgICAgICAgICAgICAgICAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwN2gsIDBGaCwgMTdoLCAxRmg6IE9yZGVyZWQKKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCisjZGVmaW5lIF9tbTI1Nl9jbXBfcGQoYSwgYiwgYykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2NtcHBkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKGIpLCAoYykpOyB9KQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIG9mIHR3byAyNTYtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbOCB4IGZsb2F0XSwgdXNpbmcgdGhlIG9wZXJhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSBpbnRlZ2VyCisvLy8gICAgb3BlcmFuZC4gUmV0dXJucyBhIFs4IHggZmxvYXRdIHZlY3RvciBjb25zaXN0aW5nIG9mIGVpZ2h0IGZsb2F0cworLy8vICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVpZ2h0IGNvbXBhcmlzb24gcmVzdWx0czogemVybyBpZiB0aGUgY29tcGFyaXNvbiBpcworLy8vICAgIGZhbHNlLCBhbmQgYWxsIDEncyBpZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTYgX21tMjU2X2NtcF9wcyhfX20yNTYgYSwgX19tMjU2IGIsIGNvbnN0IGludCBjKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBQUyAvIENNUFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxwYXJhbSBiCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gYworLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQsIHdpdGggYml0cyBbNDowXSBzcGVjaWZ5aW5nIHdoaWNoIGNvbXBhcmlzb24KKy8vLyAgICBvcGVyYXRpb24gdG8gdXNlOgorLy8vICAgIDAwaCwgMDhoLCAxMGgsIDE4aDogRXF1YWwKKy8vLyAgICAwMWgsIDA5aCwgMTFoLCAxOWg6IExlc3MgdGhhbgorLy8vICAgIDAyaCwgMEFoLCAxMmgsIDFBaDogTGVzcyB0aGFuIG9yIGVxdWFsIC8gR3JlYXRlciB0aGFuIG9yIGVxdWFsIChzd2FwcGVkCisvLy8gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kcykKKy8vLyAgICAwM2gsIDBCaCwgMTNoLCAxQmg6IFVub3JkZXJlZAorLy8vICAgIDA0aCwgMENoLCAxNGgsIDFDaDogTm90IGVxdWFsCisvLy8gICAgMDVoLCAwRGgsIDE1aCwgMURoOiBOb3QgbGVzcyB0aGFuIC8gTm90IGdyZWF0ZXIgdGhhbiAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwNmgsIDBFaCwgMTZoLCAxRWg6IE5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgLyBOb3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisvLy8gICAgICAgICAgICAgICAgICAgICAgIChzd2FwcGVkIG9wZXJhbmRzKQorLy8vICAgIDA3aCwgMEZoLCAxN2gsIDFGaDogT3JkZXJlZAorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorI2RlZmluZSBfbW0yNTZfY21wX3BzKGEsIGIsIGMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2NtcHBzMjU2KChfX3Y4c2YpKF9fbTI1NikoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKGIpLCAoYykpOyB9KQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2NhbGFyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIG9mCisvLy8gICAgdHdvIDEyOC1iaXQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0sIHVzaW5nIHRoZSBvcGVyYXRpb24gc3BlY2lmaWVkIGJ5IHRoZQorLy8vICAgIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQuIElmIHRoZSByZXN1bHQgaXMgdHJ1ZSwgYWxsIDY0IGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24gdmVjdG9yIGFyZSBzZXQ7IG90aGVyd2lzZSB0aGV5IGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20xMjhkIF9tbV9jbXBfc2QoX19tMTI4ZCBhLCBfX20xMjhkIGIsIGNvbnN0IGludCBjKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBTRCAvIENNUFNEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccGFyYW0gYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBjCisvLy8gICAgQW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCwgd2l0aCBiaXRzIFs0OjBdIHNwZWNpZnlpbmcgd2hpY2ggY29tcGFyaXNvbgorLy8vICAgIG9wZXJhdGlvbiB0byB1c2U6CisvLy8gICAgMDBoLCAwOGgsIDEwaCwgMThoOiBFcXVhbAorLy8vICAgIDAxaCwgMDloLCAxMWgsIDE5aDogTGVzcyB0aGFuCisvLy8gICAgMDJoLCAwQWgsIDEyaCwgMUFoOiBMZXNzIHRoYW4gb3IgZXF1YWwgLyBHcmVhdGVyIHRoYW4gb3IgZXF1YWwgKHN3YXBwZWQKKy8vLyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRzKQorLy8vICAgIDAzaCwgMEJoLCAxM2gsIDFCaDogVW5vcmRlcmVkCisvLy8gICAgMDRoLCAwQ2gsIDE0aCwgMUNoOiBOb3QgZXF1YWwKKy8vLyAgICAwNWgsIDBEaCwgMTVoLCAxRGg6IE5vdCBsZXNzIHRoYW4gLyBOb3QgZ3JlYXRlciB0aGFuIChzd2FwcGVkIG9wZXJhbmRzKQorLy8vICAgIDA2aCwgMEVoLCAxNmgsIDFFaDogTm90IGxlc3MgdGhhbiBvciBlcXVhbCAvIE5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwKKy8vLyAgICAgICAgICAgICAgICAgICAgICAgKHN3YXBwZWQgb3BlcmFuZHMpCisvLy8gICAgMDdoLCAwRmgsIDE3aCwgMUZoOiBPcmRlcmVkCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorI2RlZmluZSBfbW1fY21wX3NkKGEsIGIsIGMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBzZCgoX192MmRmKShfX20xMjhkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShiKSwgKGMpKTsgfSkKKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNjYWxhciB2YWx1ZXMgb2YgdHdvIDEyOC1iaXQKKy8vLyAgICB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdLCB1c2luZyB0aGUgb3BlcmF0aW9uIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlCisvLy8gICAgaW50ZWdlciBvcGVyYW5kLiBJZiB0aGUgcmVzdWx0IGlzIHRydWUsIGFsbCAzMiBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbgorLy8vICAgIHZlY3RvciBhcmUgc2V0OyBvdGhlcndpc2UgdGhleSBhcmUgY2xlYXJlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4IF9tbV9jbXBfc3MoX19tMTI4IGEsIF9fbTEyOCBiLCBjb25zdCBpbnQgYyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QU1MgLyBDTVBTUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIGMKKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kLCB3aXRoIGJpdHMgWzQ6MF0gc3BlY2lmeWluZyB3aGljaCBjb21wYXJpc29uCisvLy8gICAgb3BlcmF0aW9uIHRvIHVzZToKKy8vLyAgICAwMGgsIDA4aCwgMTBoLCAxOGg6IEVxdWFsCisvLy8gICAgMDFoLCAwOWgsIDExaCwgMTloOiBMZXNzIHRoYW4KKy8vLyAgICAwMmgsIDBBaCwgMTJoLCAxQWg6IExlc3MgdGhhbiBvciBlcXVhbCAvIEdyZWF0ZXIgdGhhbiBvciBlcXVhbCAoc3dhcHBlZAorLy8vICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHMpCisvLy8gICAgMDNoLCAwQmgsIDEzaCwgMUJoOiBVbm9yZGVyZWQKKy8vLyAgICAwNGgsIDBDaCwgMTRoLCAxQ2g6IE5vdCBlcXVhbAorLy8vICAgIDA1aCwgMERoLCAxNWgsIDFEaDogTm90IGxlc3MgdGhhbiAvIE5vdCBncmVhdGVyIHRoYW4gKHN3YXBwZWQgb3BlcmFuZHMpCisvLy8gICAgMDZoLCAwRWgsIDE2aCwgMUVoOiBOb3QgbGVzcyB0aGFuIG9yIGVxdWFsIC8gTm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorLy8vICAgICAgICAgICAgICAgICAgICAgICAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwN2gsIDBGaCwgMTdoLCAxRmg6IE9yZGVyZWQKKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KKyNkZWZpbmUgX21tX2NtcF9zcyhhLCBiLCBjKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBzcygoX192NHNmKShfX20xMjgpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShiKSwgKGMpKTsgfSkKKworLy8vIFxicmllZiBUYWtlcyBhIFs4IHggaTMyXSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHZlY3RvciBlbGVtZW50IHZhbHVlCisvLy8gICAgaW5kZXhlZCBieSB0aGUgaW1tZWRpYXRlIGNvbnN0YW50IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkVYVFJBQ1RGMTI4K0NPTVBPU0lURSAvCisvLy8gICBFWFRSQUNURjEyOCtDT01QT1NJVEUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGkzMl0uCisvLy8gXHBhcmFtIF9faW1tCisvLy8gICAgQW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCB3aXRoIGJpdHMgWzI6MF0gZGV0ZXJtaW5pbmcgd2hpY2ggdmVjdG9yCisvLy8gICAgZWxlbWVudCBpcyBleHRyYWN0ZWQgYW5kIHJldHVybmVkLgorLy8vIFxyZXR1cm5zIEEgMzItYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgZXh0cmFjdGVkIDMyIGJpdHMgb2YgZXh0ZW5kZWQKKy8vLyAgICBwYWNrZWQgZGF0YS4KK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZXh0cmFjdF9lcGkzMihfX20yNTZpIF9fYSwgY29uc3QgaW50IF9faW1tKQoreworICBfX3Y4c2kgX19iID0gKF9fdjhzaSlfX2E7CisgIHJldHVybiBfX2JbX19pbW0gJiA3XTsKK30KKworLy8vIFxicmllZiBUYWtlcyBhIFsxNiB4IGkxNl0gdmVjdG9yIGFuZCByZXR1cm5zIHRoZSB2ZWN0b3IgZWxlbWVudCB2YWx1ZQorLy8vICAgIGluZGV4ZWQgYnkgdGhlIGltbWVkaWF0ZSBjb25zdGFudCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZFWFRSQUNURjEyOCtDT01QT1NJVEUgLworLy8vICAgIEVYVFJBQ1RGMTI4K0NPTVBPU0lURSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzE2IHggaTE2XS4KKy8vLyBccGFyYW0gX19pbW0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIHdpdGggYml0cyBbMzowXSBkZXRlcm1pbmluZyB3aGljaCB2ZWN0b3IKKy8vLyAgICBlbGVtZW50IGlzIGV4dHJhY3RlZCBhbmQgcmV0dXJuZWQuCisvLy8gXHJldHVybnMgQSAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgMTYgYml0cyBvZiB6ZXJvIGV4dGVuZGVkCisvLy8gICAgcGFja2VkIGRhdGEuCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2V4dHJhY3RfZXBpMTYoX19tMjU2aSBfX2EsIGNvbnN0IGludCBfX2ltbSkKK3sKKyAgX192MTZoaSBfX2IgPSAoX192MTZoaSlfX2E7CisgIHJldHVybiAodW5zaWduZWQgc2hvcnQpX19iW19faW1tICYgMTVdOworfQorCisvLy8gXGJyaWVmIFRha2VzIGEgWzMyIHggaThdIHZlY3RvciBhbmQgcmV0dXJucyB0aGUgdmVjdG9yIGVsZW1lbnQgdmFsdWUKKy8vLyAgICBpbmRleGVkIGJ5IHRoZSBpbW1lZGlhdGUgY29uc3RhbnQgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWRVhUUkFDVEYxMjgrQ09NUE9TSVRFIC8KKy8vLyAgICBFWFRSQUNURjEyOCtDT01QT1NJVEUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IGludGVnZXIgdmVjdG9yIG9mIFszMiB4IGk4XS4KKy8vLyBccGFyYW0gX19pbW0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIHdpdGggYml0cyBbNDowXSBkZXRlcm1pbmluZyB3aGljaCB2ZWN0b3IKKy8vLyAgICBlbGVtZW50IGlzIGV4dHJhY3RlZCBhbmQgcmV0dXJuZWQuCisvLy8gXHJldHVybnMgQSAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgOCBiaXRzIG9mIHplcm8gZXh0ZW5kZWQKKy8vLyAgICBwYWNrZWQgZGF0YS4KK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZXh0cmFjdF9lcGk4KF9fbTI1NmkgX19hLCBjb25zdCBpbnQgX19pbW0pCit7CisgIF9fdjMycWkgX19iID0gKF9fdjMycWkpX19hOworICByZXR1cm4gKHVuc2lnbmVkIGNoYXIpX19iW19faW1tICYgMzFdOworfQorCisjaWZkZWYgX194ODZfNjRfXworLy8vIFxicmllZiBUYWtlcyBhIFs0IHggaTY0XSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHZlY3RvciBlbGVtZW50IHZhbHVlCisvLy8gICAgaW5kZXhlZCBieSB0aGUgaW1tZWRpYXRlIGNvbnN0YW50IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkVYVFJBQ1RGMTI4K0NPTVBPU0lURSAvCisvLy8gICAgRVhUUkFDVEYxMjgrQ09NUE9TSVRFIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGk2NF0uCisvLy8gXHBhcmFtIF9faW1tCisvLy8gICAgQW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCB3aXRoIGJpdHMgWzE6MF0gZGV0ZXJtaW5pbmcgd2hpY2ggdmVjdG9yCisvLy8gICAgZWxlbWVudCBpcyBleHRyYWN0ZWQgYW5kIHJldHVybmVkLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgZXh0cmFjdGVkIDY0IGJpdHMgb2YgZXh0ZW5kZWQKKy8vLyAgICBwYWNrZWQgZGF0YS4KK3N0YXRpYyBfX2lubGluZSBsb25nIGxvbmcgIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2V4dHJhY3RfZXBpNjQoX19tMjU2aSBfX2EsIGNvbnN0IGludCBfX2ltbSkKK3sKKyAgX192NGRpIF9fYiA9IChfX3Y0ZGkpX19hOworICByZXR1cm4gX19iW19faW1tICYgM107Cit9CisjZW5kaWYKKworLy8vIFxicmllZiBUYWtlcyBhIFs4IHggaTMyXSB2ZWN0b3IgYW5kIHJlcGxhY2VzIHRoZSB2ZWN0b3IgZWxlbWVudCB2YWx1ZQorLy8vICAgIGluZGV4ZWQgYnkgdGhlIGltbWVkaWF0ZSBjb25zdGFudCBvcGVyYW5kIGJ5IGEgbmV3IHZhbHVlLiBSZXR1cm5zIHRoZQorLy8vICAgIG1vZGlmaWVkIHZlY3Rvci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWSU5TRVJURjEyOCtDT01QT1NJVEUgLworLy8vICAgIElOU0VSVEYxMjgrQ09NUE9TSVRFIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgdmVjdG9yIG9mIFs4IHggaTMyXSB0byBiZSB1c2VkIGJ5IHRoZSBpbnNlcnQgb3BlcmF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBbiBpbnRlZ2VyIHZhbHVlLiBUaGUgcmVwbGFjZW1lbnQgdmFsdWUgZm9yIHRoZSBpbnNlcnQgb3BlcmF0aW9uLgorLy8vIFxwYXJhbSBfX2ltbQorLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIGluZGV4IG9mIHRoZSB2ZWN0b3IgZWxlbWVudCB0byBiZQorLy8vICAgIHJlcGxhY2VkLgorLy8vIFxyZXR1cm5zIEEgY29weSBvZiB2ZWN0b3IgX19hLCBhZnRlciByZXBsYWNpbmcgaXRzIGVsZW1lbnQgaW5kZXhlZCBieSBfX2ltbQorLy8vICAgICB3aXRoIF9fYi4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2luc2VydF9lcGkzMihfX20yNTZpIF9fYSwgaW50IF9fYiwgaW50IGNvbnN0IF9faW1tKQoreworICBfX3Y4c2kgX19jID0gKF9fdjhzaSlfX2E7CisgIF9fY1tfX2ltbSAmIDddID0gX19iOworICByZXR1cm4gKF9fbTI1NmkpX19jOworfQorCisKKy8vLyBcYnJpZWYgVGFrZXMgYSBbMTYgeCBpMTZdIHZlY3RvciBhbmQgcmVwbGFjZXMgdGhlIHZlY3RvciBlbGVtZW50IHZhbHVlCisvLy8gICAgaW5kZXhlZCBieSB0aGUgaW1tZWRpYXRlIGNvbnN0YW50IG9wZXJhbmQgd2l0aCBhIG5ldyB2YWx1ZS4gUmV0dXJucyB0aGUKKy8vLyAgICBtb2RpZmllZCB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVklOU0VSVEYxMjgrQ09NUE9TSVRFIC8KKy8vLyAgICBJTlNFUlRGMTI4K0NPTVBPU0lURSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIHZlY3RvciBvZiBbMTYgeCBpMTZdIHRvIGJlIHVzZWQgYnkgdGhlIGluc2VydCBvcGVyYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEFuIGkxNiBpbnRlZ2VyIHZhbHVlLiBUaGUgcmVwbGFjZW1lbnQgdmFsdWUgZm9yIHRoZSBpbnNlcnQgb3BlcmF0aW9uLgorLy8vIFxwYXJhbSBfX2ltbQorLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIGluZGV4IG9mIHRoZSB2ZWN0b3IgZWxlbWVudCB0byBiZQorLy8vICAgIHJlcGxhY2VkLgorLy8vIFxyZXR1cm5zIEEgY29weSBvZiB2ZWN0b3IgX19hLCBhZnRlciByZXBsYWNpbmcgaXRzIGVsZW1lbnQgaW5kZXhlZCBieSBfX2ltbQorLy8vICAgICB3aXRoIF9fYi4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2luc2VydF9lcGkxNihfX20yNTZpIF9fYSwgaW50IF9fYiwgaW50IGNvbnN0IF9faW1tKQoreworICBfX3YxNmhpIF9fYyA9IChfX3YxNmhpKV9fYTsKKyAgX19jW19faW1tICYgMTVdID0gX19iOworICByZXR1cm4gKF9fbTI1NmkpX19jOworfQorCisvLy8gXGJyaWVmIFRha2VzIGEgWzMyIHggaThdIHZlY3RvciBhbmQgcmVwbGFjZXMgdGhlIHZlY3RvciBlbGVtZW50IHZhbHVlCisvLy8gICAgaW5kZXhlZCBieSB0aGUgaW1tZWRpYXRlIGNvbnN0YW50IG9wZXJhbmQgd2l0aCBhIG5ldyB2YWx1ZS4gUmV0dXJucyB0aGUKKy8vLyAgICBtb2RpZmllZCB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVklOU0VSVEYxMjgrQ09NUE9TSVRFIC8KKy8vLyAgICBJTlNFUlRGMTI4K0NPTVBPU0lURSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIHZlY3RvciBvZiBbMzIgeCBpOF0gdG8gYmUgdXNlZCBieSB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQW4gaTggaW50ZWdlciB2YWx1ZS4gVGhlIHJlcGxhY2VtZW50IHZhbHVlIGZvciB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKy8vLyBccGFyYW0gX19pbW0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBpbmRleCBvZiB0aGUgdmVjdG9yIGVsZW1lbnQgdG8gYmUKKy8vLyAgICByZXBsYWNlZC4KKy8vLyBccmV0dXJucyBBIGNvcHkgb2YgdmVjdG9yIF9fYSwgYWZ0ZXIgcmVwbGFjaW5nIGl0cyBlbGVtZW50IGluZGV4ZWQgYnkgX19pbW0KKy8vLyAgICB3aXRoIF9fYi4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2luc2VydF9lcGk4KF9fbTI1NmkgX19hLCBpbnQgX19iLCBpbnQgY29uc3QgX19pbW0pCit7CisgIF9fdjMycWkgX19jID0gKF9fdjMycWkpX19hOworICBfX2NbX19pbW0gJiAzMV0gPSBfX2I7CisgIHJldHVybiAoX19tMjU2aSlfX2M7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisvLy8gXGJyaWVmIFRha2VzIGEgWzQgeCBpNjRdIHZlY3RvciBhbmQgcmVwbGFjZXMgdGhlIHZlY3RvciBlbGVtZW50IHZhbHVlCisvLy8gICAgaW5kZXhlZCBieSB0aGUgaW1tZWRpYXRlIGNvbnN0YW50IG9wZXJhbmQgd2l0aCBhIG5ldyB2YWx1ZS4gUmV0dXJucyB0aGUKKy8vLyAgICBtb2RpZmllZCB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVklOU0VSVEYxMjgrQ09NUE9TSVRFIC8KKy8vLyAgICBJTlNFUlRGMTI4K0NPTVBPU0lURSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIHZlY3RvciBvZiBbNCB4IGk2NF0gdG8gYmUgdXNlZCBieSB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2YWx1ZS4gVGhlIHJlcGxhY2VtZW50IHZhbHVlIGZvciB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKy8vLyBccGFyYW0gX19pbW0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBpbmRleCBvZiB0aGUgdmVjdG9yIGVsZW1lbnQgdG8gYmUKKy8vLyAgICByZXBsYWNlZC4KKy8vLyBccmV0dXJucyBBIGNvcHkgb2YgdmVjdG9yIF9fYSwgYWZ0ZXIgcmVwbGFjaW5nIGl0cyBlbGVtZW50IGluZGV4ZWQgYnkgX19pbW0KKy8vLyAgICAgd2l0aCBfX2IuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9pbnNlcnRfZXBpNjQoX19tMjU2aSBfX2EsIGxvbmcgbG9uZyBfX2IsIGludCBjb25zdCBfX2ltbSkKK3sKKyAgX192NGRpIF9fYyA9IChfX3Y0ZGkpX19hOworICBfX2NbX19pbW0gJiAzXSA9IF9fYjsKKyAgcmV0dXJuIChfX20yNTZpKV9fYzsKK30KKyNlbmRpZgorCisvKiBDb252ZXJzaW9uICovCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgdmVjdG9yIG9mIFs0IHggaTMyXSBpbnRvIGEgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZURFEyUEQgLyBDVlREUTJQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMzJdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGkzMl9wZChfX20xMjhpIF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3Y0c2kpX19hLCBfX3Y0ZGYpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgdmVjdG9yIG9mIFs4IHggaTMyXSBpbnRvIGEgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlREUTJQUyAvIENWVERRMlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwaTMyX3BzKF9fbTI1NmkgX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9jdnRkcTJwczI1NigoX192OHNpKSBfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGludG8gYSAxMjgtYml0IHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRQRDJQUyAvIENWVFBEMlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cGRfcHMoX19tMjU2ZCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzMjU2KChfX3Y0ZGYpIF9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gaW50byBhIHZlY3RvciBvZiBbOCB4IGkzMl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFBTMkRRIC8gQ1ZUUFMyRFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHBzX2VwaTMyKF9fbTI1NiBfX2EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnRwczJkcTI1NigoX192OHNmKSBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRwc19wZChfX20xMjggX19hKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoKF9fdjRzZilfX2EsIF9fdjRkZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHRwZF9lcGkzMihfX20yNTZkIF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3Y0ZGYpIF9fYSwgX192NHNpKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cGRfZXBpMzIoX19tMjU2ZCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTI1NigoX192NGRmKSBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR0cHNfZXBpMzIoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3Y4c2YpIF9fYSwgX192OHNpKTsKK30KKworc3RhdGljIF9faW5saW5lIGRvdWJsZSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRzZF9mNjQoX19tMjU2ZCBfX2EpCit7CisgcmV0dXJuIF9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRzaTI1Nl9zaTMyKF9fbTI1NmkgX19hKQoreworIF9fdjhzaSBfX2IgPSAoX192OHNpKV9fYTsKKyByZXR1cm4gX19iWzBdOworfQorCitzdGF0aWMgX19pbmxpbmUgZmxvYXQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0c3NfZjMyKF9fbTI1NiBfX2EpCit7CisgcmV0dXJuIF9fYVswXTsKK30KKworLyogVmVjdG9yIHJlcGxpY2F0ZSAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZlaGR1cF9wcyhfX20yNTYgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19hLCAxLCAxLCAzLCAzLCA1LCA1LCA3LCA3KTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZlbGR1cF9wcyhfX20yNTYgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19hLCAwLCAwLCAyLCAyLCA0LCA0LCA2LCA2KTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbW92ZWR1cF9wZChfX20yNTZkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYSwgMCwgMCwgMiwgMik7Cit9CisKKy8qIFVucGFjayBhbmQgSW50ZXJsZWF2ZSAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5wYWNraGlfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkZilfX2EsIChfX3Y0ZGYpX19iLCAxLCA1LCAxKzIsIDUrMik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VucGFja2xvX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYiwgMCwgNCwgMCsyLCA0KzIpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VucGFja2hpX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IsIDIsIDEwLCAyKzEsIDEwKzEsIDYsIDE0LCA2KzEsIDE0KzEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VucGFja2xvX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IsIDAsIDgsIDArMSwgOCsxLCA0LCAxMiwgNCsxLCAxMisxKTsKK30KKworLyogQml0IFRlc3QgKi8KK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdHpfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3R6cGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0Y19wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdGNwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3RuemNfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3RuemNwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3R6X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdHpwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3RjX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdGNwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3RuemNfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0bnpjcHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl90ZXN0el9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdHpwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RjX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0Y3BkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdG56Y19wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdG56Y3BkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdHpfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0enBzMjU2KChfX3Y4c2YpX19hLCAoX192OHNmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdGNfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0Y3BzMjU2KChfX3Y4c2YpX19hLCAoX192OHNmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdG56Y19wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3RuemNwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3R6X3NpMjU2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3B0ZXN0ejI1NigoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RjX3NpMjU2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3B0ZXN0YzI1NigoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RuemNfc2kyNTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcHRlc3RuemMyNTYoKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iKTsKK30KKworLyogVmVjdG9yIGV4dHJhY3Qgc2lnbiBtYXNrICovCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdmVtYXNrX3BkKF9fbTI1NmQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbW92bXNrcGQyNTYoKF9fdjRkZilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdmVtYXNrX3BzKF9fbTI1NiBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9tb3Ztc2twczI1NigoX192OHNmKV9fYSk7Cit9CisKKy8qIFZlY3RvciBfX3plcm8gKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3plcm9hbGwodm9pZCkKK3sKKyAgX19idWlsdGluX2lhMzJfdnplcm9hbGwoKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfemVyb3VwcGVyKHZvaWQpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Z6ZXJvdXBwZXIoKTsKK30KKworLyogVmVjdG9yIGxvYWQgd2l0aCBicm9hZGNhc3QgKi8KK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYnJvYWRjYXN0X3NzKGZsb2F0IGNvbnN0ICpfX2EpCit7CisgIGZsb2F0IF9fZiA9ICpfX2E7CisgIHJldHVybiAoX19tMTI4KShfX3Y0c2YpeyBfX2YsIF9fZiwgX19mLCBfX2YgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0X3NkKGRvdWJsZSBjb25zdCAqX19hKQoreworICBkb3VibGUgX19kID0gKl9fYTsKKyAgcmV0dXJuIChfX20yNTZkKShfX3Y0ZGYpeyBfX2QsIF9fZCwgX19kLCBfX2QgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3Rfc3MoZmxvYXQgY29uc3QgKl9fYSkKK3sKKyAgZmxvYXQgX19mID0gKl9fYTsKKyAgcmV0dXJuIChfX20yNTYpKF9fdjhzZil7IF9fZiwgX19mLCBfX2YsIF9fZiwgX19mLCBfX2YsIF9fZiwgX19mIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdF9wZChfX20xMjhkIGNvbnN0ICpfX2EpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92YnJvYWRjYXN0ZjEyOF9wZDI1NigoX192MmRmIGNvbnN0ICopX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3RfcHMoX19tMTI4IGNvbnN0ICpfX2EpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3Zicm9hZGNhc3RmMTI4X3BzMjU2KChfX3Y0c2YgY29uc3QgKilfX2EpOworfQorCisvKiBTSU1EIGxvYWQgb3BzICovCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9sb2FkX3BkKGRvdWJsZSBjb25zdCAqX19wKQoreworICByZXR1cm4gKihfX20yNTZkICopX19wOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2xvYWRfcHMoZmxvYXQgY29uc3QgKl9fcCkKK3sKKyAgcmV0dXJuICooX19tMjU2ICopX19wOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9sb2FkdV9wZChkb3VibGUgY29uc3QgKl9fcCkKK3sKKyAgc3RydWN0IF9fbG9hZHVfcGQgeworICAgIF9fbTI1NmQgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfcGQqKV9fcCktPl9fdjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9sb2FkdV9wcyhmbG9hdCBjb25zdCAqX19wKQoreworICBzdHJ1Y3QgX19sb2FkdV9wcyB7CisgICAgX19tMjU2IF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3BzKilfX3ApLT5fX3Y7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2xvYWRfc2kyNTYoX19tMjU2aSBjb25zdCAqX19wKQoreworICByZXR1cm4gKl9fcDsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbG9hZHVfc2kyNTYoX19tMjU2aSBjb25zdCAqX19wKQoreworICBzdHJ1Y3QgX19sb2FkdV9zaTI1NiB7CisgICAgX19tMjU2aSBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICByZXR1cm4gKChzdHJ1Y3QgX19sb2FkdV9zaTI1NiopX19wKS0+X192OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9sZGRxdV9zaTI1NihfX20yNTZpIGNvbnN0ICpfX3ApCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9sZGRxdTI1NigoY2hhciBjb25zdCAqKV9fcCk7Cit9CisKKy8qIFNJTUQgc3RvcmUgb3BzICovCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdG9yZV9wZChkb3VibGUgKl9fcCwgX19tMjU2ZCBfX2EpCit7CisgICooX19tMjU2ZCAqKV9fcCA9IF9fYTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmVfcHMoZmxvYXQgKl9fcCwgX19tMjU2IF9fYSkKK3sKKyAgKihfX20yNTYgKilfX3AgPSBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0b3JldV9wZChkb3VibGUgKl9fcCwgX19tMjU2ZCBfX2EpCit7CisgIHN0cnVjdCBfX3N0b3JldV9wZCB7CisgICAgX19tMjU2ZCBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICAoKHN0cnVjdCBfX3N0b3JldV9wZCopX19wKS0+X192ID0gX19hOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdG9yZXVfcHMoZmxvYXQgKl9fcCwgX19tMjU2IF9fYSkKK3sKKyAgc3RydWN0IF9fc3RvcmV1X3BzIHsKKyAgICBfX20yNTYgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgKChzdHJ1Y3QgX19zdG9yZXVfcHMqKV9fcCktPl9fdiA9IF9fYTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmVfc2kyNTYoX19tMjU2aSAqX19wLCBfX20yNTZpIF9fYSkKK3sKKyAgKl9fcCA9IF9fYTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmV1X3NpMjU2KF9fbTI1NmkgKl9fcCwgX19tMjU2aSBfX2EpCit7CisgIHN0cnVjdCBfX3N0b3JldV9zaTI1NiB7CisgICAgX19tMjU2aSBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICAoKHN0cnVjdCBfX3N0b3JldV9zaTI1NiopX19wKS0+X192ID0gX19hOworfQorCisvKiBDb25kaXRpb25hbCBsb2FkIG9wcyAqLworc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza2xvYWRfcGQoZG91YmxlIGNvbnN0ICpfX3AsIF9fbTEyOGkgX19tKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfbWFza2xvYWRwZCgoY29uc3QgX192MmRmICopX19wLCAoX192MmRpKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tsb2FkX3BkKGRvdWJsZSBjb25zdCAqX19wLCBfX20yNTZpIF9fbSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX21hc2tsb2FkcGQyNTYoKGNvbnN0IF9fdjRkZiAqKV9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX20pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tsb2FkX3BzKGZsb2F0IGNvbnN0ICpfX3AsIF9fbTEyOGkgX19tKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9tYXNrbG9hZHBzKChjb25zdCBfX3Y0c2YgKilfX3AsIChfX3Y0c2kpX19tKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrbG9hZF9wcyhmbG9hdCBjb25zdCAqX19wLCBfX20yNTZpIF9fbSkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfbWFza2xvYWRwczI1NigoY29uc3QgX192OHNmICopX19wLCAoX192OHNpKV9fbSk7Cit9CisKKy8qIENvbmRpdGlvbmFsIHN0b3JlIG9wcyAqLworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3N0b3JlX3BzKGZsb2F0ICpfX3AsIF9fbTI1NmkgX19tLCBfX20yNTYgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVwczI1NigoX192OHNmICopX19wLCAoX192OHNpKV9fbSwgKF9fdjhzZilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrc3RvcmVfcGQoZG91YmxlICpfX3AsIF9fbTEyOGkgX19tLCBfX20xMjhkIF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcGQoKF9fdjJkZiAqKV9fcCwgKF9fdjJkaSlfX20sIChfX3YyZGYpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3N0b3JlX3BkKGRvdWJsZSAqX19wLCBfX20yNTZpIF9fbSwgX19tMjU2ZCBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21hc2tzdG9yZXBkMjU2KChfX3Y0ZGYgKilfX3AsIChfX3Y0ZGkpX19tLCAoX192NGRmKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tzdG9yZV9wcyhmbG9hdCAqX19wLCBfX20xMjhpIF9fbSwgX19tMTI4IF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcHMoKF9fdjRzZiAqKV9fcCwgKF9fdjRzaSlfX20sIChfX3Y0c2YpX19hKTsKK30KKworLyogQ2FjaGVhYmlsaXR5IHN1cHBvcnQgb3BzICovCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdHJlYW1fc2kyNTYoX19tMjU2aSAqX19hLCBfX20yNTZpIF9fYikKK3sKKyAgX19idWlsdGluX25vbnRlbXBvcmFsX3N0b3JlKChfX3Y0ZGkpX19iLCAoX192NGRpKilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdHJlYW1fcGQoZG91YmxlICpfX2EsIF9fbTI1NmQgX19iKQoreworICBfX2J1aWx0aW5fbm9udGVtcG9yYWxfc3RvcmUoKF9fdjRkZilfX2IsIChfX3Y0ZGYqKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0cmVhbV9wcyhmbG9hdCAqX19wLCBfX20yNTYgX19hKQoreworICBfX2J1aWx0aW5fbm9udGVtcG9yYWxfc3RvcmUoKF9fdjhzZilfX2EsIChfX3Y4c2YqKV9fcCk7Cit9CisKKy8qIENyZWF0ZSB2ZWN0b3JzICovCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VuZGVmaW5lZF9wZCh2b2lkKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdW5kZWYyNTYoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VuZGVmaW5lZF9wcyh2b2lkKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl91bmRlZjI1NigpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VuZGVmaW5lZF9zaTI1Nih2b2lkKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfdW5kZWYyNTYoKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0X3BkKGRvdWJsZSBfX2EsIGRvdWJsZSBfX2IsIGRvdWJsZSBfX2MsIGRvdWJsZSBfX2QpCit7CisgIHJldHVybiAoX19tMjU2ZCl7IF9fZCwgX19jLCBfX2IsIF9fYSB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldF9wcyhmbG9hdCBfX2EsIGZsb2F0IF9fYiwgZmxvYXQgX19jLCBmbG9hdCBfX2QsCisgICAgICAgICAgICAgIGZsb2F0IF9fZSwgZmxvYXQgX19mLCBmbG9hdCBfX2csIGZsb2F0IF9faCkKK3sKKyAgcmV0dXJuIChfX20yNTYpeyBfX2gsIF9fZywgX19mLCBfX2UsIF9fZCwgX19jLCBfX2IsIF9fYSB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRfZXBpMzIoaW50IF9faTAsIGludCBfX2kxLCBpbnQgX19pMiwgaW50IF9faTMsCisgICAgICAgICAgICAgICAgIGludCBfX2k0LCBpbnQgX19pNSwgaW50IF9faTYsIGludCBfX2k3KQoreworICByZXR1cm4gKF9fbTI1NmkpKF9fdjhzaSl7IF9faTcsIF9faTYsIF9faTUsIF9faTQsIF9faTMsIF9faTIsIF9faTEsIF9faTAgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0X2VwaTE2KHNob3J0IF9fdzE1LCBzaG9ydCBfX3cxNCwgc2hvcnQgX193MTMsIHNob3J0IF9fdzEyLAorICAgICAgICAgICAgICAgICBzaG9ydCBfX3cxMSwgc2hvcnQgX193MTAsIHNob3J0IF9fdzA5LCBzaG9ydCBfX3cwOCwKKyAgICAgICAgICAgICAgICAgc2hvcnQgX193MDcsIHNob3J0IF9fdzA2LCBzaG9ydCBfX3cwNSwgc2hvcnQgX193MDQsCisgICAgICAgICAgICAgICAgIHNob3J0IF9fdzAzLCBzaG9ydCBfX3cwMiwgc2hvcnQgX193MDEsIHNob3J0IF9fdzAwKQoreworICByZXR1cm4gKF9fbTI1NmkpKF9fdjE2aGkpeyBfX3cwMCwgX193MDEsIF9fdzAyLCBfX3cwMywgX193MDQsIF9fdzA1LCBfX3cwNiwKKyAgICBfX3cwNywgX193MDgsIF9fdzA5LCBfX3cxMCwgX193MTEsIF9fdzEyLCBfX3cxMywgX193MTQsIF9fdzE1IH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldF9lcGk4KGNoYXIgX19iMzEsIGNoYXIgX19iMzAsIGNoYXIgX19iMjksIGNoYXIgX19iMjgsCisgICAgICAgICAgICAgICAgY2hhciBfX2IyNywgY2hhciBfX2IyNiwgY2hhciBfX2IyNSwgY2hhciBfX2IyNCwKKyAgICAgICAgICAgICAgICBjaGFyIF9fYjIzLCBjaGFyIF9fYjIyLCBjaGFyIF9fYjIxLCBjaGFyIF9fYjIwLAorICAgICAgICAgICAgICAgIGNoYXIgX19iMTksIGNoYXIgX19iMTgsIGNoYXIgX19iMTcsIGNoYXIgX19iMTYsCisgICAgICAgICAgICAgICAgY2hhciBfX2IxNSwgY2hhciBfX2IxNCwgY2hhciBfX2IxMywgY2hhciBfX2IxMiwKKyAgICAgICAgICAgICAgICBjaGFyIF9fYjExLCBjaGFyIF9fYjEwLCBjaGFyIF9fYjA5LCBjaGFyIF9fYjA4LAorICAgICAgICAgICAgICAgIGNoYXIgX19iMDcsIGNoYXIgX19iMDYsIGNoYXIgX19iMDUsIGNoYXIgX19iMDQsCisgICAgICAgICAgICAgICAgY2hhciBfX2IwMywgY2hhciBfX2IwMiwgY2hhciBfX2IwMSwgY2hhciBfX2IwMCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3YzMnFpKXsKKyAgICBfX2IwMCwgX19iMDEsIF9fYjAyLCBfX2IwMywgX19iMDQsIF9fYjA1LCBfX2IwNiwgX19iMDcsCisgICAgX19iMDgsIF9fYjA5LCBfX2IxMCwgX19iMTEsIF9fYjEyLCBfX2IxMywgX19iMTQsIF9fYjE1LAorICAgIF9fYjE2LCBfX2IxNywgX19iMTgsIF9fYjE5LCBfX2IyMCwgX19iMjEsIF9fYjIyLCBfX2IyMywKKyAgICBfX2IyNCwgX19iMjUsIF9fYjI2LCBfX2IyNywgX19iMjgsIF9fYjI5LCBfX2IzMCwgX19iMzEKKyAgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0X2VwaTY0eChsb25nIGxvbmcgX19hLCBsb25nIGxvbmcgX19iLCBsb25nIGxvbmcgX19jLCBsb25nIGxvbmcgX19kKQoreworICByZXR1cm4gKF9fbTI1NmkpKF9fdjRkaSl7IF9fZCwgX19jLCBfX2IsIF9fYSB9OworfQorCisvKiBDcmVhdGUgdmVjdG9ycyB3aXRoIGVsZW1lbnRzIGluIHJldmVyc2Ugb3JkZXIgKi8KK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfcGQoZG91YmxlIF9fYSwgZG91YmxlIF9fYiwgZG91YmxlIF9fYywgZG91YmxlIF9fZCkKK3sKKyAgcmV0dXJuIChfX20yNTZkKXsgX19hLCBfX2IsIF9fYywgX19kIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0cl9wcyhmbG9hdCBfX2EsIGZsb2F0IF9fYiwgZmxvYXQgX19jLCBmbG9hdCBfX2QsCisgICAgICAgICAgICAgICBmbG9hdCBfX2UsIGZsb2F0IF9fZiwgZmxvYXQgX19nLCBmbG9hdCBfX2gpCit7CisgIHJldHVybiAoX19tMjU2KXsgX19hLCBfX2IsIF9fYywgX19kLCBfX2UsIF9fZiwgX19nLCBfX2ggfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0cl9lcGkzMihpbnQgX19pMCwgaW50IF9faTEsIGludCBfX2kyLCBpbnQgX19pMywKKyAgICAgICAgICAgICAgICAgIGludCBfX2k0LCBpbnQgX19pNSwgaW50IF9faTYsIGludCBfX2k3KQoreworICByZXR1cm4gKF9fbTI1NmkpKF9fdjhzaSl7IF9faTAsIF9faTEsIF9faTIsIF9faTMsIF9faTQsIF9faTUsIF9faTYsIF9faTcgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0cl9lcGkxNihzaG9ydCBfX3cxNSwgc2hvcnQgX193MTQsIHNob3J0IF9fdzEzLCBzaG9ydCBfX3cxMiwKKyAgICAgICBzaG9ydCBfX3cxMSwgc2hvcnQgX193MTAsIHNob3J0IF9fdzA5LCBzaG9ydCBfX3cwOCwKKyAgICAgICBzaG9ydCBfX3cwNywgc2hvcnQgX193MDYsIHNob3J0IF9fdzA1LCBzaG9ydCBfX3cwNCwKKyAgICAgICBzaG9ydCBfX3cwMywgc2hvcnQgX193MDIsIHNob3J0IF9fdzAxLCBzaG9ydCBfX3cwMCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3YxNmhpKXsgX193MTUsIF9fdzE0LCBfX3cxMywgX193MTIsIF9fdzExLCBfX3cxMCwgX193MDksCisgICAgX193MDgsIF9fdzA3LCBfX3cwNiwgX193MDUsIF9fdzA0LCBfX3cwMywgX193MDIsIF9fdzAxLCBfX3cwMCB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRyX2VwaTgoY2hhciBfX2IzMSwgY2hhciBfX2IzMCwgY2hhciBfX2IyOSwgY2hhciBfX2IyOCwKKyAgICAgICAgICAgICAgICAgY2hhciBfX2IyNywgY2hhciBfX2IyNiwgY2hhciBfX2IyNSwgY2hhciBfX2IyNCwKKyAgICAgICAgICAgICAgICAgY2hhciBfX2IyMywgY2hhciBfX2IyMiwgY2hhciBfX2IyMSwgY2hhciBfX2IyMCwKKyAgICAgICAgICAgICAgICAgY2hhciBfX2IxOSwgY2hhciBfX2IxOCwgY2hhciBfX2IxNywgY2hhciBfX2IxNiwKKyAgICAgICAgICAgICAgICAgY2hhciBfX2IxNSwgY2hhciBfX2IxNCwgY2hhciBfX2IxMywgY2hhciBfX2IxMiwKKyAgICAgICAgICAgICAgICAgY2hhciBfX2IxMSwgY2hhciBfX2IxMCwgY2hhciBfX2IwOSwgY2hhciBfX2IwOCwKKyAgICAgICAgICAgICAgICAgY2hhciBfX2IwNywgY2hhciBfX2IwNiwgY2hhciBfX2IwNSwgY2hhciBfX2IwNCwKKyAgICAgICAgICAgICAgICAgY2hhciBfX2IwMywgY2hhciBfX2IwMiwgY2hhciBfX2IwMSwgY2hhciBfX2IwMCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3YzMnFpKXsKKyAgICBfX2IzMSwgX19iMzAsIF9fYjI5LCBfX2IyOCwgX19iMjcsIF9fYjI2LCBfX2IyNSwgX19iMjQsCisgICAgX19iMjMsIF9fYjIyLCBfX2IyMSwgX19iMjAsIF9fYjE5LCBfX2IxOCwgX19iMTcsIF9fYjE2LAorICAgIF9fYjE1LCBfX2IxNCwgX19iMTMsIF9fYjEyLCBfX2IxMSwgX19iMTAsIF9fYjA5LCBfX2IwOCwKKyAgICBfX2IwNywgX19iMDYsIF9fYjA1LCBfX2IwNCwgX19iMDMsIF9fYjAyLCBfX2IwMSwgX19iMDAgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0cl9lcGk2NHgobG9uZyBsb25nIF9fYSwgbG9uZyBsb25nIF9fYiwgbG9uZyBsb25nIF9fYywgbG9uZyBsb25nIF9fZCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3Y0ZGkpeyBfX2EsIF9fYiwgX19jLCBfX2QgfTsKK30KKworLyogQ3JlYXRlIHZlY3RvcnMgd2l0aCByZXBlYXRlZCBlbGVtZW50cyAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0MV9wZChkb3VibGUgX193KQoreworICByZXR1cm4gKF9fbTI1NmQpeyBfX3csIF9fdywgX193LCBfX3cgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXQxX3BzKGZsb2F0IF9fdykKK3sKKyAgcmV0dXJuIChfX20yNTYpeyBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdyB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXQxX2VwaTMyKGludCBfX2kpCit7CisgIHJldHVybiAoX19tMjU2aSkoX192OHNpKXsgX19pLCBfX2ksIF9faSwgX19pLCBfX2ksIF9faSwgX19pLCBfX2kgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0MV9lcGkxNihzaG9ydCBfX3cpCit7CisgIHJldHVybiAoX19tMjU2aSkoX192MTZoaSl7IF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywKKyAgICBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193IH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldDFfZXBpOChjaGFyIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3YzMnFpKXsgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLAorICAgIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsCisgICAgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldDFfZXBpNjR4KGxvbmcgbG9uZyBfX3EpCit7CisgIHJldHVybiAoX19tMjU2aSkoX192NGRpKXsgX19xLCBfX3EsIF9fcSwgX19xIH07Cit9CisKKy8qIENyZWF0ZSBfX3plcm9lZCB2ZWN0b3JzICovCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXR6ZXJvX3BkKHZvaWQpCit7CisgIHJldHVybiAoX19tMjU2ZCl7IDAsIDAsIDAsIDAgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXR6ZXJvX3BzKHZvaWQpCit7CisgIHJldHVybiAoX19tMjU2KXsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXR6ZXJvX3NpMjU2KHZvaWQpCit7CisgIHJldHVybiAoX19tMjU2aSl7IDBMTCwgMExMLCAwTEwsIDBMTCB9OworfQorCisvKiBDYXN0IGJldHdlZW4gdmVjdG9yIHR5cGVzICovCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3RwZF9wcyhfX20yNTZkIF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19hOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0cGRfc2kyNTYoX19tMjU2ZCBfX2EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3Rwc19wZChfX20yNTYgX19hKQoreworICByZXR1cm4gKF9fbTI1NmQpX19hOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0cHNfc2kyNTYoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0c2kyNTZfcHMoX19tMjU2aSBfX2EpCit7CisgIHJldHVybiAoX19tMjU2KV9fYTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHNpMjU2X3BkKF9fbTI1NmkgX19hKQoreworICByZXR1cm4gKF9fbTI1NmQpX19hOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0cGQyNTZfcGQxMjgoX19tMjU2ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKV9fYSwgKF9fdjRkZilfX2EsIDAsIDEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3RwczI1Nl9wczEyOChfX20yNTYgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19hLCAwLCAxLCAyLCAzKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHNpMjU2X3NpMTI4KF9fbTI1NmkgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19hLCAwLCAxKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHBkMTI4X3BkMjU2KF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkZilfX2EsIChfX3YyZGYpX19hLCAwLCAxLCAtMSwgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3RwczEyOF9wczI1NihfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19hLCAwLCAxLCAyLCAzLCAtMSwgLTEsIC0xLCAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3RzaTEyOF9zaTI1NihfX20xMjhpIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGkpX19hLCAoX192MmRpKV9fYSwgMCwgMSwgLTEsIC0xKTsKK30KKworLyoKKyAgIFZlY3RvciBpbnNlcnQuCisgICBXZSB1c2UgbWFjcm9zIHJhdGhlciB0aGFuIGlubGluZXMgYmVjYXVzZSB3ZSBvbmx5IHdhbnQgdG8gYWNjZXB0CisgICBpbnZvY2F0aW9ucyB3aGVyZSB0aGUgaW1tZWRpYXRlIE0gaXMgYSBjb25zdGFudCBleHByZXNzaW9uLgorKi8KKyNkZWZpbmUgX21tMjU2X2luc2VydGYxMjhfcHMoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggXAorICAgIChfX3Y4c2YpKF9fbTI1NikoVjEpLCBcCisgICAgKF9fdjhzZilfbW0yNTZfY2FzdHBzMTI4X3BzMjU2KChfX20xMjgpKFYyKSksIFwKKyAgICAoKChNKSAmIDEpID8gIDAgOiAgOCksIFwKKyAgICAoKChNKSAmIDEpID8gIDEgOiAgOSksIFwKKyAgICAoKChNKSAmIDEpID8gIDIgOiAxMCksIFwKKyAgICAoKChNKSAmIDEpID8gIDMgOiAxMSksIFwKKyAgICAoKChNKSAmIDEpID8gIDggOiAgNCksIFwKKyAgICAoKChNKSAmIDEpID8gIDkgOiAgNSksIFwKKyAgICAoKChNKSAmIDEpID8gMTAgOiAgNiksIFwKKyAgICAoKChNKSAmIDEpID8gMTEgOiAgNykgKTt9KQorCisjZGVmaW5lIF9tbTI1Nl9pbnNlcnRmMTI4X3BkKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCBcCisgICAgKF9fdjRkZikoX19tMjU2ZCkoVjEpLCBcCisgICAgKF9fdjRkZilfbW0yNTZfY2FzdHBkMTI4X3BkMjU2KChfX20xMjhkKShWMikpLCBcCisgICAgKCgoTSkgJiAxKSA/IDAgOiA0KSwgXAorICAgICgoKE0pICYgMSkgPyAxIDogNSksIFwKKyAgICAoKChNKSAmIDEpID8gNCA6IDIpLCBcCisgICAgKCgoTSkgJiAxKSA/IDUgOiAzKSApO30pCisKKyNkZWZpbmUgX21tMjU2X2luc2VydGYxMjhfc2kyNTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIFwKKyAgICAoX192NGRpKShfX20yNTZpKShWMSksIFwKKyAgICAoX192NGRpKV9tbTI1Nl9jYXN0c2kxMjhfc2kyNTYoKF9fbTEyOGkpKFYyKSksIFwKKyAgICAoKChNKSAmIDEpID8gMCA6IDQpLCBcCisgICAgKCgoTSkgJiAxKSA/IDEgOiA1KSwgXAorICAgICgoKE0pICYgMSkgPyA0IDogMiksIFwKKyAgICAoKChNKSAmIDEpID8gNSA6IDMpICk7fSkKKworLyoKKyAgIFZlY3RvciBleHRyYWN0LgorICAgV2UgdXNlIG1hY3JvcyByYXRoZXIgdGhhbiBpbmxpbmVzIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGFjY2VwdAorICAgaW52b2NhdGlvbnMgd2hlcmUgdGhlIGltbWVkaWF0ZSBNIGlzIGEgY29uc3RhbnQgZXhwcmVzc2lvbi4KKyovCisjZGVmaW5lIF9tbTI1Nl9leHRyYWN0ZjEyOF9wcyhWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggXAorICAgIChfX3Y4c2YpKF9fbTI1NikoViksIFwKKyAgICAoX192OHNmKShfbW0yNTZfdW5kZWZpbmVkX3BzKCkpLCBcCisgICAgKCgoTSkgJiAxKSA/IDQgOiAwKSwgXAorICAgICgoKE0pICYgMSkgPyA1IDogMSksIFwKKyAgICAoKChNKSAmIDEpID8gNiA6IDIpLCBcCisgICAgKCgoTSkgJiAxKSA/IDcgOiAzKSApO30pCisKKyNkZWZpbmUgX21tMjU2X2V4dHJhY3RmMTI4X3BkKFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggXAorICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFYpLCBcCisgICAgKF9fdjRkZikoX21tMjU2X3VuZGVmaW5lZF9wZCgpKSwgXAorICAgICgoKE0pICYgMSkgPyAyIDogMCksIFwKKyAgICAoKChNKSAmIDEpID8gMyA6IDEpICk7fSkKKworI2RlZmluZSBfbW0yNTZfZXh0cmFjdGYxMjhfc2kyNTYoViwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCBcCisgICAgKF9fdjRkaSkoX19tMjU2aSkoViksIFwKKyAgICAoX192NGRpKShfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCkpLCBcCisgICAgKCgoTSkgJiAxKSA/IDIgOiAwKSwgXAorICAgICgoKE0pICYgMSkgPyAzIDogMSkgKTt9KQorCisvKiBTSU1EIGxvYWQgb3BzICh1bmFsaWduZWQpICovCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2xvYWR1Ml9tMTI4KGZsb2F0IGNvbnN0ICpfX2FkZHJfaGksIGZsb2F0IGNvbnN0ICpfX2FkZHJfbG8pCit7CisgIF9fbTI1NiBfX3YyNTYgPSBfbW0yNTZfY2FzdHBzMTI4X3BzMjU2KF9tbV9sb2FkdV9wcyhfX2FkZHJfbG8pKTsKKyAgcmV0dXJuIF9tbTI1Nl9pbnNlcnRmMTI4X3BzKF9fdjI1NiwgX21tX2xvYWR1X3BzKF9fYWRkcl9oaSksIDEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9sb2FkdTJfbTEyOGQoZG91YmxlIGNvbnN0ICpfX2FkZHJfaGksIGRvdWJsZSBjb25zdCAqX19hZGRyX2xvKQoreworICBfX20yNTZkIF9fdjI1NiA9IF9tbTI1Nl9jYXN0cGQxMjhfcGQyNTYoX21tX2xvYWR1X3BkKF9fYWRkcl9sbykpOworICByZXR1cm4gX21tMjU2X2luc2VydGYxMjhfcGQoX192MjU2LCBfbW1fbG9hZHVfcGQoX19hZGRyX2hpKSwgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2xvYWR1Ml9tMTI4aShfX20xMjhpIGNvbnN0ICpfX2FkZHJfaGksIF9fbTEyOGkgY29uc3QgKl9fYWRkcl9sbykKK3sKKyAgX19tMjU2aSBfX3YyNTYgPSBfbW0yNTZfY2FzdHNpMTI4X3NpMjU2KF9tbV9sb2FkdV9zaTEyOChfX2FkZHJfbG8pKTsKKyAgcmV0dXJuIF9tbTI1Nl9pbnNlcnRmMTI4X3NpMjU2KF9fdjI1NiwgX21tX2xvYWR1X3NpMTI4KF9fYWRkcl9oaSksIDEpOworfQorCisvKiBTSU1EIHN0b3JlIG9wcyAodW5hbGlnbmVkKSAqLworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmV1Ml9tMTI4KGZsb2F0ICpfX2FkZHJfaGksIGZsb2F0ICpfX2FkZHJfbG8sIF9fbTI1NiBfX2EpCit7CisgIF9fbTEyOCBfX3YxMjg7CisKKyAgX192MTI4ID0gX21tMjU2X2Nhc3RwczI1Nl9wczEyOChfX2EpOworICBfbW1fc3RvcmV1X3BzKF9fYWRkcl9sbywgX192MTI4KTsKKyAgX192MTI4ID0gX21tMjU2X2V4dHJhY3RmMTI4X3BzKF9fYSwgMSk7CisgIF9tbV9zdG9yZXVfcHMoX19hZGRyX2hpLCBfX3YxMjgpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdG9yZXUyX20xMjhkKGRvdWJsZSAqX19hZGRyX2hpLCBkb3VibGUgKl9fYWRkcl9sbywgX19tMjU2ZCBfX2EpCit7CisgIF9fbTEyOGQgX192MTI4OworCisgIF9fdjEyOCA9IF9tbTI1Nl9jYXN0cGQyNTZfcGQxMjgoX19hKTsKKyAgX21tX3N0b3JldV9wZChfX2FkZHJfbG8sIF9fdjEyOCk7CisgIF9fdjEyOCA9IF9tbTI1Nl9leHRyYWN0ZjEyOF9wZChfX2EsIDEpOworICBfbW1fc3RvcmV1X3BkKF9fYWRkcl9oaSwgX192MTI4KTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmV1Ml9tMTI4aShfX20xMjhpICpfX2FkZHJfaGksIF9fbTEyOGkgKl9fYWRkcl9sbywgX19tMjU2aSBfX2EpCit7CisgIF9fbTEyOGkgX192MTI4OworCisgIF9fdjEyOCA9IF9tbTI1Nl9jYXN0c2kyNTZfc2kxMjgoX19hKTsKKyAgX21tX3N0b3JldV9zaTEyOChfX2FkZHJfbG8sIF9fdjEyOCk7CisgIF9fdjEyOCA9IF9tbTI1Nl9leHRyYWN0ZjEyOF9zaTI1NihfX2EsIDEpOworICBfbW1fc3RvcmV1X3NpMTI4KF9fYWRkcl9oaSwgX192MTI4KTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRfbTEyOCAoX19tMTI4IF9faGksIF9fbTEyOCBfX2xvKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKV9fbG8sIChfX3Y0c2YpX19oaSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldF9tMTI4ZCAoX19tMTI4ZCBfX2hpLCBfX20xMjhkIF9fbG8pIHsKKyAgcmV0dXJuIChfX20yNTZkKV9tbTI1Nl9zZXRfbTEyOCgoX19tMTI4KV9faGksIChfX20xMjgpX19sbyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldF9tMTI4aSAoX19tMTI4aSBfX2hpLCBfX20xMjhpIF9fbG8pIHsKKyAgcmV0dXJuIChfX20yNTZpKV9tbTI1Nl9zZXRfbTEyOCgoX19tMTI4KV9faGksIChfX20xMjgpX19sbyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0cl9tMTI4IChfX20xMjggX19sbywgX19tMTI4IF9faGkpIHsKKyAgcmV0dXJuIF9tbTI1Nl9zZXRfbTEyOChfX2hpLCBfX2xvKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0cl9tMTI4ZCAoX19tMTI4ZCBfX2xvLCBfX20xMjhkIF9faGkpIHsKKyAgcmV0dXJuIChfX20yNTZkKV9tbTI1Nl9zZXRfbTEyOCgoX19tMTI4KV9faGksIChfX20xMjgpX19sbyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfbTEyOGkgKF9fbTEyOGkgX19sbywgX19tMTI4aSBfX2hpKSB7CisgIHJldHVybiAoX19tMjU2aSlfbW0yNTZfc2V0X20xMjgoKF9fbTEyOClfX2hpLCAoX19tMTI4KV9fbG8pOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0FWWElOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2JtaTJpbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYm1pMmludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYWU4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2JtaTJpbnRyaW4uaApAQCAtMCwwICsxLDk1IEBACisvKj09PS0tLS0gYm1pMmludHJpbi5oIC0gQk1JMiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWYgIWRlZmluZWQgX19YODZJTlRSSU5fSCAmJiAhZGVmaW5lZCBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8Ym1pMmludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19CTUkySU5UUklOX0gKKyNkZWZpbmUgX19CTUkySU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJibWkyIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfYnpoaV91MzIodW5zaWduZWQgaW50IF9fWCwgdW5zaWduZWQgaW50IF9fWSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2J6aGlfc2koX19YLCBfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcGRlcF91MzIodW5zaWduZWQgaW50IF9fWCwgdW5zaWduZWQgaW50IF9fWSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BkZXBfc2koX19YLCBfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcGV4dF91MzIodW5zaWduZWQgaW50IF9fWCwgdW5zaWduZWQgaW50IF9fWSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BleHRfc2koX19YLCBfX1kpOworfQorCisjaWZkZWYgIF9feDg2XzY0X18KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX2J6aGlfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1kpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9iemhpX2RpKF9fWCwgX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX3BkZXBfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1kpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wZGVwX2RpKF9fWCwgX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX3BleHRfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1kpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wZXh0X2RpKF9fWCwgX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX211bHhfdTY0ICh1bnNpZ25lZCBsb25nIGxvbmcgX19YLCB1bnNpZ25lZCBsb25nIGxvbmcgX19ZLAorCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19QKQoreworICB1bnNpZ25lZCBfX2ludDEyOCBfX3JlcyA9ICh1bnNpZ25lZCBfX2ludDEyOCkgX19YICogX19ZOworICAqX19QID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgKF9fcmVzID4+IDY0KTsKKyAgcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpIF9fcmVzOworfQorCisjZWxzZSAvKiAhX194ODZfNjRfXyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbXVseF91MzIgKHVuc2lnbmVkIGludCBfX1gsIHVuc2lnbmVkIGludCBfX1ksIHVuc2lnbmVkIGludCAqX19QKQoreworICB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPSAodW5zaWduZWQgbG9uZyBsb25nKSBfX1ggKiBfX1k7CisgICpfX1AgPSAodW5zaWduZWQgaW50KSAoX19yZXMgPj4gMzIpOworICByZXR1cm4gKHVuc2lnbmVkIGludCkgX19yZXM7Cit9CisKKyNlbmRpZiAvKiAhX194ODZfNjRfXyAgKi8KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19CTUkySU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYm1paW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2JtaWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYWNmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2JtaWludHJpbi5oCkBAIC0wLDAgKzEsNTQ4IEBACisvKj09PS0tLS0gYm1paW50cmluLmggLSBCTUkgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWYgIWRlZmluZWQgX19YODZJTlRSSU5fSCAmJiAhZGVmaW5lZCBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8Ym1paW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0JNSUlOVFJJTl9ICisjZGVmaW5lIF9fQk1JSU5UUklOX0gKKworLy8vIFxicmllZiBDb3VudHMgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvIGJpdHMgaW4gdGhlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIHVuc2lnbmVkIHNob3J0IF90emNudF91MTYodW5zaWduZWQgc2hvcnQgYSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBUWkNOVCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIgd2hvc2UgdHJhaWxpbmcgemVyb3MgYXJlIHRvIGJlIGNvdW50ZWQuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8KKy8vLyAgICBiaXRzIGluIHRoZSBvcGVyYW5kLgorI2RlZmluZSBfdHpjbnRfdTE2KGEpICAgICAoX190emNudF91MTYoKGEpKSkKKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCB3aXRoIHRoZSBvbmUncworLy8vICAgIGNvbXBsZW1lbnQgb2YgdGhlIGZpcnN0IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIHVuc2lnbmVkIGludCBfYW5kbl91MzIodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEFORE4gaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBiCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSBiaXR3aXNlIEFORCBvZiB0aGUgc2Vjb25kCisvLy8gICAgb3BlcmFuZCB3aXRoIHRoZSBvbmUncyBjb21wbGVtZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorI2RlZmluZSBfYW5kbl91MzIoYSwgYikgICAoX19hbmRuX3UzMigoYSksIChiKSkpCisKKy8qIF9iZXh0cl91MzIgIT0gX19iZXh0cl91MzIgKi8KKy8vLyBcYnJpZWYgQ2xlYXJzIGFsbCBiaXRzIGluIHRoZSBzb3VyY2UgZXhjZXB0IGZvciB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisvLy8gICAgY29udGFpbmluZyBhIHZhbHVlIG9mIDEgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gdW5zaWduZWQgaW50IF9ibHNpX3UzMih1bnNpZ25lZCBpbnQgYSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCTFNJIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBbiB1bnNpZ25lZCBpbnRlZ2VyIHdob3NlIGJpdHMgYXJlIHRvIGJlIGNsZWFyZWQuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgY2xlYXJpbmcgdGhlIGJpdHMgZnJvbQorLy8vICAgIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKyNkZWZpbmUgX2Jsc2lfdTMyKGEpICAgICAgKF9fYmxzaV91MzIoKGEpKSkKKworLy8vIFxicmllZiBDcmVhdGVzIGEgbWFzayB3aG9zZSBiaXRzIGFyZSBzZXQgdG8gMSwgdXNpbmcgYml0IDAgdXAgdG8gYW5kCisvLy8gICAgaW5jbHVkaW5nIHRoZSBsZWFzdCBzaWdpbmlmaWNhbnQgYml0IHRoYXQgaXMgc2V0IHRvIDEgaW4gdGhlIHNvdXJjZQorLy8vICAgIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gdW5zaWduZWQgaW50IF9ibHNtc2tfdTMyKHVuc2lnbmVkIGludCBhKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEJMU01TSyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciB1c2VkIHRvIGNyZWF0ZSB0aGUgbWFzay4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG5ld2x5IGNyZWF0ZWQgbWFzay4KKyNkZWZpbmUgX2Jsc21za191MzIoYSkgICAgKF9fYmxzbXNrX3UzMigoYSkpKQorCisvLy8gXGJyaWVmIENsZWFycyB0aGUgbGVhc3Qgc2lnaW5pZmljYW50IGJpdCB0aGF0IGlzIHNldCB0byAxIGluIHRoZSBzb3VyY2UKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIHVuc2lnbmVkIGludCBfYmxzcl91MzIodW5zaWduZWQgaW50IGEpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQkxTUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSBvcGVyYW5kIHRvIGJlIGNsZWFyZWQuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgY2xlYXJpbmcgdGhlIHNvdXJjZQorLy8vICAgIG9wZXJhbmQuCisjZGVmaW5lIF9ibHNyX3UzMihhKSAgICAgIChfX2Jsc3JfdTMyKChhKSkpCisKKy8vLyBcYnJpZWYgQ291bnRzIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVybyBiaXRzIGluIHRoZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyB1bnNpZ25lZCBpbnQgX3R6Y250X3UzMih1bnNpZ25lZCBpbnQgYSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBUWkNOVCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgd2hvc2UgdHJhaWxpbmcgemVyb3MgYXJlIHRvIGJlIGNvdW50ZWQuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8KKy8vLyAgICBiaXRzIGluIHRoZSBvcGVyYW5kLgorI2RlZmluZSBfdHpjbnRfdTMyKGEpICAgICAoX190emNudF91MzIoKGEpKSkKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJibWkiKSkpCisKKy8qIEFsbG93IHVzaW5nIHRoZSB0emNudCBpbnRyaW5zaWNzIGV2ZW4gZm9yIG5vbi1CTUkgdGFyZ2V0cy4gU2luY2UgdGhlIFRaQ05UCisgICBpbnN0cnVjdGlvbiBiZWhhdmVzIGFzIEJTRiBvbiBub24tQk1JIHRhcmdldHMsIHRoZXJlIGlzIGNvZGUgdGhhdCBleHBlY3RzCisgICB0byB1c2UgaXQgYXMgYSBwb3RlbnRpYWxseSBmYXN0ZXIgdmVyc2lvbiBvZiBCU0YuICovCisjZGVmaW5lIF9fUkVMQVhFRF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorCisvLy8gXGJyaWVmIENvdW50cyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0cyBpbiB0aGUgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBUWkNOVCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlciB3aG9zZSB0cmFpbGluZyB6ZXJvcyBhcmUgdG8gYmUgY291bnRlZC4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVybworLy8vICAgIGJpdHMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX1JFTEFYRURfRk5fQVRUUlMKK19fdHpjbnRfdTE2KHVuc2lnbmVkIHNob3J0IF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jdHpzKF9fWCkgOiAxNjsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCB3aXRoIHRoZSBvbmUncworLy8vICAgIGNvbXBsZW1lbnQgb2YgdGhlIGZpcnN0IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQU5ETiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19ZCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSBiaXR3aXNlIEFORCBvZiB0aGUgc2Vjb25kCisvLy8gICAgb3BlcmFuZCB3aXRoIHRoZSBvbmUncyBjb21wbGVtZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19hbmRuX3UzMih1bnNpZ25lZCBpbnQgX19YLCB1bnNpZ25lZCBpbnQgX19ZKQoreworICByZXR1cm4gfl9fWCAmIF9fWTsKK30KKworLyogQU1ELXNwZWNpZmllZCwgZG91YmxlLWxlYWRpbmctdW5kZXJzY29yZSB2ZXJzaW9uIG9mIEJFWFRSICovCisvLy8gXGJyaWVmIEV4dHJhY3RzIHRoZSBzcGVjaWZpZWQgYml0cyBmcm9tIHRoZSBmaXJzdCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZW0KKy8vLyAgICBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEJFWFRSIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fWAorLy8vICAgIEFuIHVuc2lnbmVkIGludGVnZXIgd2hvc2UgYml0cyBhcmUgdG8gYmUgZXh0cmFjdGVkLgorLy8vIFxwYXJhbSBfX1kKKy8vLyAgICBBbiB1bnNpZ25lZCBpbnRlZ2VyIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBiaXRzIGFyZSBleHRyYWN0ZWQuIEJpdHMgWzc6MF0KKy8vLyAgICBzcGVjaWZ5IHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiBCaXRzIFsxNTo4XSBzcGVjaWZ5IHRoZQorLy8vICAgIG51bWJlciBvZiBiaXRzIHRvIGJlIGV4dHJhY3RlZC4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCBpbnRlZ2VyIHdob3NlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBleHRyYWN0ZWQgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmV4dHJfdTMyKHVuc2lnbmVkIGludCBfX1gsIHVuc2lnbmVkIGludCBfX1kpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9iZXh0cl91MzIoX19YLCBfX1kpOworfQorCisvKiBJbnRlbC1zcGVjaWZpZWQsIHNpbmdsZS1sZWFkaW5nLXVuZGVyc2NvcmUgdmVyc2lvbiBvZiBCRVhUUiAqLworLy8vIFxicmllZiBFeHRyYWN0cyB0aGUgc3BlY2lmaWVkIGJpdHMgZnJvbSB0aGUgZmlyc3Qgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGVtCisvLy8gICAgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCRVhUUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBbiB1bnNpZ25lZCBpbnRlZ2VyIHdob3NlIGJpdHMgYXJlIHRvIGJlIGV4dHJhY3RlZC4KKy8vLyBccGFyYW0gX19ZCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciB1c2VkIHRvIHNwZWNpZnkgdGhlIGluZGV4IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudAorLy8vICAgIGJpdCBmb3IgdGhlIGJpdHMgdG8gYmUgZXh0cmFjdGVkLiBCaXRzIFs3OjBdIHNwZWNpZnkgdGhlIGluZGV4LgorLy8vIFxwYXJhbSBfX1oKKy8vLyAgICBBbiB1bnNpZ25lZCBpbnRlZ2VyIHVzZWQgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gYmUgZXh0cmFjdGVkLgorLy8vICAgIEJpdHMgWzc6MF0gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJpdHMuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgaW50ZWdlciB3aG9zZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgZXh0cmFjdGVkIGJpdHMuCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfYmV4dHJfdTMyKHVuc2lnbmVkIGludCBfX1gsIHVuc2lnbmVkIGludCBfX1ksIHVuc2lnbmVkIGludCBfX1opCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9iZXh0cl91MzIgKF9fWCwgKChfX1kgJiAweGZmKSB8ICgoX19aICYgMHhmZikgPDwgOCkpKTsKK30KKworLy8vIFxicmllZiBDbGVhcnMgYWxsIGJpdHMgaW4gdGhlIHNvdXJjZSBleGNlcHQgZm9yIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQKKy8vLyAgICBjb250YWluaW5nIGEgdmFsdWUgb2YgMSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEJMU0kgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciB3aG9zZSBiaXRzIGFyZSB0byBiZSBjbGVhcmVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGNsZWFyaW5nIHRoZSBiaXRzIGZyb20KKy8vLyAgICB0aGUgc291cmNlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2Jsc2lfdTMyKHVuc2lnbmVkIGludCBfX1gpCit7CisgIHJldHVybiBfX1ggJiAtX19YOworfQorCisvLy8gXGJyaWVmIENyZWF0ZXMgYSBtYXNrIHdob3NlIGJpdHMgYXJlIHNldCB0byAxLCB1c2luZyBiaXQgMCB1cCB0byBhbmQKKy8vLyAgICBpbmNsdWRpbmcgdGhlIGxlYXN0IHNpZ2luaWZpY2FudCBiaXQgdGhhdCBpcyBzZXQgdG8gMSBpbiB0aGUgc291cmNlCisvLy8gICAgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEJMU01TSyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBbiB1bnNpZ25lZCBpbnRlZ2VyIHVzZWQgdG8gY3JlYXRlIHRoZSBtYXNrLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgbmV3bHkgY3JlYXRlZCBtYXNrLgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNtc2tfdTMyKHVuc2lnbmVkIGludCBfX1gpCit7CisgIHJldHVybiBfX1ggXiAoX19YIC0gMSk7Cit9CisKKy8vLyBcYnJpZWYgQ2xlYXJzIHRoZSBsZWFzdCBzaWdpbmlmaWNhbnQgYml0IHRoYXQgaXMgc2V0IHRvIDEgaW4gdGhlIHNvdXJjZQorLy8vICAgIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCTFNSIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fWAorLy8vICAgIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgb3BlcmFuZCB0byBiZSBjbGVhcmVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGNsZWFyaW5nIHRoZSBzb3VyY2UKKy8vLyAgICBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNyX3UzMih1bnNpZ25lZCBpbnQgX19YKQoreworICByZXR1cm4gX19YICYgKF9fWCAtIDEpOworfQorCisvLy8gXGJyaWVmIENvdW50cyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0cyBpbiB0aGUgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBUWkNOVCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciB3aG9zZSB0cmFpbGluZyB6ZXJvcyBhcmUgdG8gYmUgY291bnRlZC4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVybworLy8vICAgIGJpdHMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19SRUxBWEVEX0ZOX0FUVFJTCitfX3R6Y250X3UzMih1bnNpZ25lZCBpbnQgX19YKQoreworICByZXR1cm4gX19YID8gX19idWlsdGluX2N0eihfX1gpIDogMzI7Cit9CisKKy8vLyBcYnJpZWYgQ291bnRzIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVybyBiaXRzIGluIHRoZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFRaQ05UIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fWAorLy8vICAgIEFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIHdob3NlIHRyYWlsaW5nIHplcm9zIGFyZSB0byBiZSBjb3VudGVkLgorLy8vIFxyZXR1cm5zIEFuIDMyLWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvCisvLy8gICAgYml0cyBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX1JFTEFYRURfRk5fQVRUUlMKK19tbV90emNudF8zMih1bnNpZ25lZCBpbnQgX19YKQoreworICByZXR1cm4gX19YID8gX19idWlsdGluX2N0eihfX1gpIDogMzI7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgd2l0aCB0aGUgb25lJ3MKKy8vLyAgICBjb21wbGVtZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyB1bnNpZ25lZCBsb25nIGxvbmcgX2FuZG5fdTY0ICh1bnNpZ25lZCBsb25nIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBsb25nIGIpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQU5ETiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBiCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZSBzZWNvbmQKKy8vLyAgICBvcGVyYW5kIHdpdGggdGhlIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIGZpcnN0IG9wZXJhbmQuCisjZGVmaW5lIF9hbmRuX3U2NChhLCBiKSAgIChfX2FuZG5fdTY0KChhKSwgKGIpKSkKKworLyogX2JleHRyX3U2NCAhPSBfX2JleHRyX3U2NCAqLworLy8vIFxicmllZiBDbGVhcnMgYWxsIGJpdHMgaW4gdGhlIHNvdXJjZSBleGNlcHQgZm9yIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQKKy8vLyAgICBjb250YWluaW5nIGEgdmFsdWUgb2YgMSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyB1bnNpZ25lZCBsb25nIGxvbmcgX2Jsc2lfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEJMU0kgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHdob3NlIGJpdHMgYXJlIHRvIGJlIGNsZWFyZWQuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGNsZWFyaW5nIHRoZQorLy8vICAgIGJpdHMgZnJvbSB0aGUgc291cmNlIG9wZXJhbmQuCisjZGVmaW5lIF9ibHNpX3U2NChhKSAgICAgIChfX2Jsc2lfdTY0KChhKSkpCisKKy8vLyBcYnJpZWYgQ3JlYXRlcyBhIG1hc2sgd2hvc2UgYml0cyBhcmUgc2V0IHRvIDEsIHVzaW5nIGJpdCAwIHVwIHRvIGFuZAorLy8vICAgIGluY2x1ZGluZyB0aGUgbGVhc3Qgc2lnaW5pZmljYW50IGJpdCB0aGF0IGlzIHNldCB0byAxIGluIHRoZSBzb3VyY2UKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIHVuc2lnbmVkIGxvbmcgbG9uZyBfYmxzbXNrX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgYSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCTFNNU0sgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHVzZWQgdG8gY3JlYXRlIHRoZSBtYXNrLgorLy8vIFxyZXR1cm5zIEEgdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgbmV3bHkgY3JlYXRlZCBtYXNrLgorI2RlZmluZSBfYmxzbXNrX3U2NChhKSAgICAoX19ibHNtc2tfdTY0KChhKSkpCisKKy8vLyBcYnJpZWYgQ2xlYXJzIHRoZSBsZWFzdCBzaWdpbmlmaWNhbnQgYml0IHRoYXQgaXMgc2V0IHRvIDEgaW4gdGhlIHNvdXJjZQorLy8vICAgIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gdW5zaWduZWQgbG9uZyBsb25nIF9ibHNyX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgYSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCTFNSIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBvcGVyYW5kIHRvIGJlIGNsZWFyZWQuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGNsZWFyaW5nIHRoZQorLy8vICAgIHNvdXJjZSBvcGVyYW5kLgorI2RlZmluZSBfYmxzcl91NjQoYSkgICAgICAoX19ibHNyX3U2NCgoYSkpKQorCisvLy8gXGJyaWVmIENvdW50cyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0cyBpbiB0aGUgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gdW5zaWduZWQgbG9uZyBsb25nIF90emNudF91NjQodW5zaWduZWQgbG9uZyBsb25nIGEpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVFpDTlQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHdob3NlIHRyYWlsaW5nIHplcm9zIGFyZSB0byBiZSBjb3VudGVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvCisvLy8gICAgYml0cyBpbiB0aGUgb3BlcmFuZC4KKyNkZWZpbmUgX3R6Y250X3U2NChhKSAgICAgKF9fdHpjbnRfdTY0KChhKSkpCisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgd2l0aCB0aGUgb25lJ3MKKy8vLyAgICBjb21wbGVtZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEFORE4gaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX1kKKy8vLyAgICBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgYml0d2lzZSBBTkQgb2YgdGhlIHNlY29uZAorLy8vICAgIG9wZXJhbmQgd2l0aCB0aGUgb25lJ3MgY29tcGxlbWVudCBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYW5kbl91NjQgKHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1kpCit7CisgIHJldHVybiB+X19YICYgX19ZOworfQorCisvKiBBTUQtc3BlY2lmaWVkLCBkb3VibGUtbGVhZGluZy11bmRlcnNjb3JlIHZlcnNpb24gb2YgQkVYVFIgKi8KKy8vLyBcYnJpZWYgRXh0cmFjdHMgdGhlIHNwZWNpZmllZCBiaXRzIGZyb20gdGhlIGZpcnN0IG9wZXJhbmQgYW5kIHJldHVybnMgdGhlbQorLy8vICAgIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQkVYVFIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgd2hvc2UgYml0cyBhcmUgdG8gYmUgZXh0cmFjdGVkLgorLy8vIFxwYXJhbSBfX1kKKy8vLyAgICBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggYml0cyBhcmUgZXh0cmFjdGVkLiBCaXRzCisvLy8gICAgWzc6MF0gc3BlY2lmeSB0aGUgaW5kZXggb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gQml0cyBbMTU6OF0gc3BlY2lmeQorLy8vICAgIHRoZSBudW1iZXIgb2YgYml0cyB0byBiZSBleHRyYWN0ZWQuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgd2hvc2UgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBjb250YWluIHRoZQorLy8vICAgIGV4dHJhY3RlZCBiaXRzLgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19iZXh0cl91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCwgdW5zaWduZWQgbG9uZyBsb25nIF9fWSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2JleHRyX3U2NChfX1gsIF9fWSk7Cit9CisKKy8qIEludGVsLXNwZWNpZmllZCwgc2luZ2xlLWxlYWRpbmctdW5kZXJzY29yZSB2ZXJzaW9uIG9mIEJFWFRSICovCisvLy8gXGJyaWVmIEV4dHJhY3RzIHRoZSBzcGVjaWZpZWQgYml0cyBmcm9tIHRoZSBmaXJzdCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZW0KKy8vLyAgICAgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCRVhUUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB3aG9zZSBiaXRzIGFyZSB0byBiZSBleHRyYWN0ZWQuCisvLy8gXHBhcmFtIF9fWQorLy8vICAgIEFuIHVuc2lnbmVkIGludGVnZXIgdXNlZCB0byBzcGVjaWZ5IHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKKy8vLyAgICBiaXQgZm9yIHRoZSBiaXRzIHRvIGJlIGV4dHJhY3RlZC4gQml0cyBbNzowXSBzcGVjaWZ5IHRoZSBpbmRleC4KKy8vLyBccGFyYW0gX19aCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciB1c2VkIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRzIHRvIGJlIGV4dHJhY3RlZC4KKy8vLyAgICBCaXRzIFs3OjBdIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRzLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHdob3NlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBleHRyYWN0ZWQgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19iZXh0cl91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCwgdW5zaWduZWQgaW50IF9fWSwgdW5zaWduZWQgaW50IF9fWikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2JleHRyX3U2NCAoX19YLCAoKF9fWSAmIDB4ZmYpIHwgKChfX1ogJiAweGZmKSA8PCA4KSkpOworfQorCisvLy8gXGJyaWVmIENsZWFycyBhbGwgYml0cyBpbiB0aGUgc291cmNlIGV4Y2VwdCBmb3IgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdAorLy8vICAgIGNvbnRhaW5pbmcgYSB2YWx1ZSBvZiAxIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQkxTSSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB3aG9zZSBiaXRzIGFyZSB0byBiZSBjbGVhcmVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBjbGVhcmluZyB0aGUKKy8vLyAgICBiaXRzIGZyb20gdGhlIHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNpX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YKQoreworICByZXR1cm4gX19YICYgLV9fWDsKK30KKworLy8vIFxicmllZiBDcmVhdGVzIGEgbWFzayB3aG9zZSBiaXRzIGFyZSBzZXQgdG8gMSwgdXNpbmcgYml0IDAgdXAgdG8gYW5kCisvLy8gICAgaW5jbHVkaW5nIHRoZSBsZWFzdCBzaWdpbmlmaWNhbnQgYml0IHRoYXQgaXMgc2V0IHRvIDEgaW4gdGhlIHNvdXJjZQorLy8vICAgIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCTFNNU0sgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdXNlZCB0byBjcmVhdGUgdGhlIG1hc2suCisvLy8gXHJldHVybnMgQSB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBuZXdseSBjcmVhdGVkIG1hc2suCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2Jsc21za191NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKK3sKKyAgcmV0dXJuIF9fWCBeIChfX1ggLSAxKTsKK30KKworLy8vIFxicmllZiBDbGVhcnMgdGhlIGxlYXN0IHNpZ2luaWZpY2FudCBiaXQgdGhhdCBpcyBzZXQgdG8gMSBpbiB0aGUgc291cmNlCisvLy8gICAgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEJMU1IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgb3BlcmFuZCB0byBiZSBjbGVhcmVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBjbGVhcmluZyB0aGUKKy8vLyAgICBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxzcl91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKK3sKKyAgcmV0dXJuIF9fWCAmIChfX1ggLSAxKTsKK30KKworLy8vIFxicmllZiBDb3VudHMgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvIGJpdHMgaW4gdGhlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVFpDTlQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgd2hvc2UgdHJhaWxpbmcgemVyb3MgYXJlIHRvIGJlIGNvdW50ZWQuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8KKy8vLyAgICBiaXRzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fUkVMQVhFRF9GTl9BVFRSUworX190emNudF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jdHpsbChfX1gpIDogNjQ7Cit9CisKKy8vLyBcYnJpZWYgQ291bnRzIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVybyBiaXRzIGluIHRoZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFRaQ05UIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fWAorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHdob3NlIHRyYWlsaW5nIHplcm9zIGFyZSB0byBiZSBjb3VudGVkLgorLy8vIFxyZXR1cm5zIEFuIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvCisvLy8gICAgYml0cyBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX1JFTEFYRURfRk5fQVRUUlMKK19tbV90emNudF82NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YKQoreworICByZXR1cm4gX19YID8gX19idWlsdGluX2N0emxsKF9fWCkgOiA2NDsKK30KKworI2VuZGlmIC8qIF9feDg2XzY0X18gKi8KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworI3VuZGVmIF9fUkVMQVhFRF9GTl9BVFRSUworCisjZW5kaWYgLyogX19CTUlJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9jbGZsdXNob3B0aW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2NsZmx1c2hvcHRpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGUwZWFkCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9jbGZsdXNob3B0aW50cmluLmgKQEAgLTAsMCArMSw0MSBAQAorLyo9PT0tLS0tIGNsZmx1c2hvcHRpbnRyaW4uaCAtIENMRkxVU0hPUFQgaW50cmluc2ljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8Y2xmbHVzaG9wdGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19DTEZMVVNIT1BUSU5UUklOX0gKKyNkZWZpbmUgX19DTEZMVVNIT1BUSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCAgX190YXJnZXRfXygiY2xmbHVzaG9wdCIpKSkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbGZsdXNob3B0KGNoYXIgKiBfX20pIHsKKyAgX19idWlsdGluX2lhMzJfY2xmbHVzaG9wdChfX20pOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9jcHVpZC5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9jcHVpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYTAyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2NwdWlkLmgKQEAgLTAsMCArMSwyMDkgQEAKKy8qPT09LS0tLSBjcHVpZC5oIC0gWDg2IGNwdSBtb2RlbCBkZXRlY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZiAhKF9feDg2XzY0X18gfHwgX19pMzg2X18pCisjZXJyb3IgdGhpcyBoZWFkZXIgaXMgZm9yIHg4NiBvbmx5CisjZW5kaWYKKworLyogUmVzcG9uc2VzIGlkZW50aWZpY2F0aW9uIHJlcXVlc3Qgd2l0aCAlZWF4IDAgKi8KKy8qIEFNRDogICAgICJBdXRoZW50aWNBTUQiICovCisjZGVmaW5lIHNpZ25hdHVyZV9BTURfZWJ4IDB4Njg3NDc1NDEKKyNkZWZpbmUgc2lnbmF0dXJlX0FNRF9lZHggMHg2OTc0NmU2NQorI2RlZmluZSBzaWduYXR1cmVfQU1EX2VjeCAweDQ0NGQ0MTYzCisvKiBDRU5UQVVSOiAiQ2VudGF1ckhhdWxzIiAqLworI2RlZmluZSBzaWduYXR1cmVfQ0VOVEFVUl9lYnggMHg3NDZlNjU0MworI2RlZmluZSBzaWduYXR1cmVfQ0VOVEFVUl9lZHggMHg0ODcyNzU2MQorI2RlZmluZSBzaWduYXR1cmVfQ0VOVEFVUl9lY3ggMHg3MzZjNzU2MQorLyogQ1lSSVg6ICAgIkN5cml4SW5zdGVhZCIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX0NZUklYX2VieCAweDY5NzI3OTQzCisjZGVmaW5lIHNpZ25hdHVyZV9DWVJJWF9lZHggMHg3MzZlNDk3OAorI2RlZmluZSBzaWduYXR1cmVfQ1lSSVhfZWN4IDB4NjQ2MTY1NzQKKy8qIElOVEVMOiAgICJHZW51aW5lSW50ZWwiICovCisjZGVmaW5lIHNpZ25hdHVyZV9JTlRFTF9lYnggMHg3NTZlNjU0NworI2RlZmluZSBzaWduYXR1cmVfSU5URUxfZWR4IDB4NDk2NTZlNjkKKyNkZWZpbmUgc2lnbmF0dXJlX0lOVEVMX2VjeCAweDZjNjU3NDZlCisvKiBUTTE6ICAgICAiVHJhbnNtZXRhQ1BVIiAqLworI2RlZmluZSBzaWduYXR1cmVfVE0xX2VieCAweDZlNjE3MjU0CisjZGVmaW5lIHNpZ25hdHVyZV9UTTFfZWR4IDB4NzQ2NTZkNzMKKyNkZWZpbmUgc2lnbmF0dXJlX1RNMV9lY3ggMHg1NTUwNDM2MQorLyogVE0yOiAgICAgIkdlbnVpbmVUTXg4NiIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX1RNMl9lYnggMHg3NTZlNjU0NworI2RlZmluZSBzaWduYXR1cmVfVE0yX2VkeCAweDU0NjU2ZTY5CisjZGVmaW5lIHNpZ25hdHVyZV9UTTJfZWN4IDB4MzYzODc4NGQKKy8qIE5TQzogICAgICJHZW9kZSBieSBOU0MiICovCisjZGVmaW5lIHNpZ25hdHVyZV9OU0NfZWJ4IDB4NjQ2ZjY1NDcKKyNkZWZpbmUgc2lnbmF0dXJlX05TQ19lZHggMHg0MzUzNGUyMAorI2RlZmluZSBzaWduYXR1cmVfTlNDX2VjeCAweDc5NjIyMDY1CisvKiBORVhHRU46ICAiTmV4R2VuRHJpdmVuIiAqLworI2RlZmluZSBzaWduYXR1cmVfTkVYR0VOX2VieCAweDQ3Nzg2NTRlCisjZGVmaW5lIHNpZ25hdHVyZV9ORVhHRU5fZWR4IDB4NzI0NDZlNjUKKyNkZWZpbmUgc2lnbmF0dXJlX05FWEdFTl9lY3ggMHg2ZTY1NzY2OQorLyogUklTRTogICAgIlJpc2VSaXNlUmlzZSIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX1JJU0VfZWJ4IDB4NjU3MzY5NTIKKyNkZWZpbmUgc2lnbmF0dXJlX1JJU0VfZWR4IDB4NjU3MzY5NTIKKyNkZWZpbmUgc2lnbmF0dXJlX1JJU0VfZWN4IDB4NjU3MzY5NTIKKy8qIFNJUzogICAgICJTaVMgU2lTIFNpUyAiICovCisjZGVmaW5lIHNpZ25hdHVyZV9TSVNfZWJ4IDB4MjA1MzY5NTMKKyNkZWZpbmUgc2lnbmF0dXJlX1NJU19lZHggMHgyMDUzNjk1MworI2RlZmluZSBzaWduYXR1cmVfU0lTX2VjeCAweDIwNTM2OTUzCisvKiBVTUM6ICAgICAiVU1DIFVNQyBVTUMgIiAqLworI2RlZmluZSBzaWduYXR1cmVfVU1DX2VieCAweDIwNDM0ZDU1CisjZGVmaW5lIHNpZ25hdHVyZV9VTUNfZWR4IDB4MjA0MzRkNTUKKyNkZWZpbmUgc2lnbmF0dXJlX1VNQ19lY3ggMHgyMDQzNGQ1NQorLyogVklBOiAgICAgIlZJQSBWSUEgVklBICIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX1ZJQV9lYnggMHgyMDQxNDk1NgorI2RlZmluZSBzaWduYXR1cmVfVklBX2VkeCAweDIwNDE0OTU2CisjZGVmaW5lIHNpZ25hdHVyZV9WSUFfZWN4IDB4MjA0MTQ5NTYKKy8qIFZPUlRFWDogICJWb3J0ZXg4NiBTb0MiICovCisjZGVmaW5lIHNpZ25hdHVyZV9WT1JURVhfZWJ4IDB4NzQ3MjZmNTYKKyNkZWZpbmUgc2lnbmF0dXJlX1ZPUlRFWF9lZHggMHgzNjM4Nzg2NQorI2RlZmluZSBzaWduYXR1cmVfVk9SVEVYX2VjeCAweDQzNmY1MzIwCisKKy8qIEZlYXR1cmVzIGluICVlY3ggZm9yIGxldmVsIDEgKi8KKyNkZWZpbmUgYml0X1NTRTMgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgYml0X1BDTE1VTFFEUSAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgYml0X0RURVM2NCAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgYml0X01PTklUT1IgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgYml0X0RTQ1BMICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgYml0X1ZNWCAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgYml0X1NNWCAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgYml0X0VJU1QgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgYml0X1RNMiAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgYml0X1NTU0UzICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgYml0X0NOWFRJRCAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgYml0X0ZNQSAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgYml0X0NNUFhDSEcxNkIgIDB4MDAwMDIwMDAKKyNkZWZpbmUgYml0X3hUUFIgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgYml0X1BEQ00gICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgYml0X1BDSUQgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgYml0X0RDQSAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgYml0X1NTRTQxICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgYml0X1NTRTQyICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgYml0X3gyQVBJQyAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgYml0X01PVkJFICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgYml0X1BPUENOVCAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgYml0X1RTQ0RlYWRsaW5lIDB4MDEwMDAwMDAKKyNkZWZpbmUgYml0X0FFU05JICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgYml0X1hTQVZFICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgYml0X09TWFNBVkUgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgYml0X0FWWCAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgYml0X1JEUk5EICAgICAgIDB4NDAwMDAwMDAKKworLyogRmVhdHVyZXMgaW4gJWVkeCBmb3IgbGV2ZWwgMSAqLworI2RlZmluZSBiaXRfRlBVICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBiaXRfVk1FICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBiaXRfREUgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBiaXRfUFNFICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBiaXRfVFNDICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBiaXRfTVNSICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBiaXRfUEFFICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBiaXRfTUNFICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBiaXRfQ1g4ICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBiaXRfQVBJQyAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBiaXRfU0VQICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBiaXRfTVRSUiAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBiaXRfUEdFICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBiaXRfTUNBICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBiaXRfQ01PViAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBiaXRfUEFUICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBiaXRfUFNFMzYgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBiaXRfUFNOICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBiaXRfQ0xGU0ggICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBiaXRfRFMgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBiaXRfQUNQSSAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBiaXRfTU1YICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBiaXRfRlhTUiAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBiaXRfRlhTQVZFICAgICAgYml0X0ZYU1IgICAgLyogZm9yIGdjYyBjb21wYXQgKi8KKyNkZWZpbmUgYml0X1NTRSAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgYml0X1NTRTIgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgYml0X1NTICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgYml0X0hUVCAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgYml0X1RNICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgYml0X1BCRSAgICAgICAgIDB4ODAwMDAwMDAKKworLyogRmVhdHVyZXMgaW4gJWVieCBmb3IgbGV2ZWwgNyBzdWItbGVhZiAwICovCisjZGVmaW5lIGJpdF9GU0dTQkFTRSAgICAweDAwMDAwMDAxCisjZGVmaW5lIGJpdF9TTUVQICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIGJpdF9FTkhfTU9WU0IgICAweDAwMDAwMjAwCisKKyNpZiBfX2kzODZfXworI2RlZmluZSBfX2NwdWlkKF9fbGV2ZWwsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCisgICAgX19hc20oImNwdWlkIiA6ICI9YSIoX19lYXgpLCAiPWIiIChfX2VieCksICI9YyIoX19lY3gpLCAiPWQiKF9fZWR4KSBcCisgICAgICAgICAgICAgICAgICA6ICIwIihfX2xldmVsKSkKKworI2RlZmluZSBfX2NwdWlkX2NvdW50KF9fbGV2ZWwsIF9fY291bnQsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCisgICAgX19hc20oImNwdWlkIiA6ICI9YSIoX19lYXgpLCAiPWIiIChfX2VieCksICI9YyIoX19lY3gpLCAiPWQiKF9fZWR4KSBcCisgICAgICAgICAgICAgICAgICA6ICIwIihfX2xldmVsKSwgIjIiKF9fY291bnQpKQorI2Vsc2UKKy8qIHg4Ni02NCB1c2VzICVyYnggYXMgdGhlIGJhc2UgcmVnaXN0ZXIsIHNvIHByZXNlcnZlIGl0LiAqLworI2RlZmluZSBfX2NwdWlkKF9fbGV2ZWwsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCisgICAgX19hc20oIiAgeGNoZ3EgICUlcmJ4LCVxMVxuIiBcCisgICAgICAgICAgIiAgY3B1aWRcbiIgXAorICAgICAgICAgICIgIHhjaGdxICAlJXJieCwlcTEiIFwKKyAgICAgICAgOiAiPWEiKF9fZWF4KSwgIj1yIiAoX19lYngpLCAiPWMiKF9fZWN4KSwgIj1kIihfX2VkeCkgXAorICAgICAgICA6ICIwIihfX2xldmVsKSkKKworI2RlZmluZSBfX2NwdWlkX2NvdW50KF9fbGV2ZWwsIF9fY291bnQsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCisgICAgX19hc20oIiAgeGNoZ3EgICUlcmJ4LCVxMVxuIiBcCisgICAgICAgICAgIiAgY3B1aWRcbiIgXAorICAgICAgICAgICIgIHhjaGdxICAlJXJieCwlcTEiIFwKKyAgICAgICAgOiAiPWEiKF9fZWF4KSwgIj1yIiAoX19lYngpLCAiPWMiKF9fZWN4KSwgIj1kIihfX2VkeCkgXAorICAgICAgICA6ICIwIihfX2xldmVsKSwgIjIiKF9fY291bnQpKQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19nZXRfY3B1aWQgKHVuc2lnbmVkIGludCBfX2xldmVsLCB1bnNpZ25lZCBpbnQgKl9fZWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2VieCwgdW5zaWduZWQgaW50ICpfX2VjeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19lZHgpIHsKKyAgICBfX2NwdWlkKF9fbGV2ZWwsICpfX2VheCwgKl9fZWJ4LCAqX19lY3gsICpfX2VkeCk7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19nZXRfY3B1aWRfbWF4ICh1bnNpZ25lZCBpbnQgX19sZXZlbCwgdW5zaWduZWQgaW50ICpfX3NpZykKK3sKKyAgICB1bnNpZ25lZCBpbnQgX19lYXgsIF9fZWJ4LCBfX2VjeCwgX19lZHg7CisjaWYgX19pMzg2X18KKyAgICBpbnQgX19jcHVpZF9zdXBwb3J0ZWQ7CisKKyAgICBfX2FzbSgiICBwdXNoZmxcbiIKKyAgICAgICAgICAiICBwb3BsICAgJSVlYXhcbiIKKyAgICAgICAgICAiICBtb3ZsICAgJSVlYXgsJSVlY3hcbiIKKyAgICAgICAgICAiICB4b3JsICAgJDB4MDAyMDAwMDAsJSVlYXhcbiIKKyAgICAgICAgICAiICBwdXNobCAgJSVlYXhcbiIKKyAgICAgICAgICAiICBwb3BmbFxuIgorICAgICAgICAgICIgIHB1c2hmbFxuIgorICAgICAgICAgICIgIHBvcGwgICAlJWVheFxuIgorICAgICAgICAgICIgIG1vdmwgICAkMCwlMFxuIgorICAgICAgICAgICIgIGNtcGwgICAlJWVheCwlJWVjeFxuIgorICAgICAgICAgICIgIGplICAgICAxZlxuIgorICAgICAgICAgICIgIG1vdmwgICAkMSwlMFxuIgorICAgICAgICAgICIxOiIKKyAgICAgICAgOiAiPXIiIChfX2NwdWlkX3N1cHBvcnRlZCkgOiA6ICJlYXgiLCAiZWN4Iik7CisgICAgaWYgKCFfX2NwdWlkX3N1cHBvcnRlZCkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKworICAgIF9fY3B1aWQoX19sZXZlbCwgX19lYXgsIF9fZWJ4LCBfX2VjeCwgX19lZHgpOworICAgIGlmIChfX3NpZykKKyAgICAgICAgKl9fc2lnID0gX19lYng7CisgICAgcmV0dXJuIF9fZWF4OworfQpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9jdWRhX2J1aWx0aW5fdmFycy5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9jdWRhX2J1aWx0aW5fdmFycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNWViOWMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2N1ZGFfYnVpbHRpbl92YXJzLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qPT09LS0tLSBjdWRhX2J1aWx0aW5fdmFycy5oIC0gQ1VEQSBidWlsdC1pbiB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fQ1VEQV9CVUlMVElOX1ZBUlNfSAorI2RlZmluZSBfX0NVREFfQlVJTFRJTl9WQVJTX0gKKworLy8gRm9yd2FyZCBkZWNsYXJlcyBmcm9tIHZlY3Rvcl90eXBlcy5oLgorc3RydWN0IHVpbnQzOworc3RydWN0IGRpbTM7CisKKy8vIFRoZSBmaWxlIGltcGxlbWVudHMgYnVpbHQtaW4gQ1VEQSB2YXJpYWJsZXMgdXNpbmcgX19kZWNsc3BlYyhwcm9wZXJ0eSkuCisvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3loZmswdGhkLmFzcHgKKy8vIEFsbCByZWFkIGFjY2Vzc2VzIG9mIGJ1aWx0LWluIHZhcmlhYmxlIGZpZWxkcyBnZXQgY29udmVydGVkIGludG8gY2FsbHMgdG8gYQorLy8gZ2V0dGVyIGZ1bmN0aW9uIHdoaWNoIGluIHR1cm4gY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGJ1aWx0aW4gdG8gZmV0Y2ggdGhlCisvLyB2YWx1ZS4KKy8vCisvLyBFeGFtcGxlOgorLy8gICAgaW50IHggPSB0aHJlYWRJZHgueDsKKy8vIElSIG91dHB1dDoKKy8vICAlMCA9IGNhbGwgaTMyIEBsbHZtLm52dm0ucmVhZC5wdHguc3JlZy50aWQueCgpICMzCisvLyBQVFggb3V0cHV0OgorLy8gIG1vdi51MzIgICAgICVyMiwgJXRpZC54OworCisjZGVmaW5lIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTihGSUVMRCwgSU5UUklOU0lDKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2RlY2xzcGVjKHByb3BlcnR5KGdldCA9IF9fZmV0Y2hfYnVpbHRpbl8jI0ZJRUxEKSkgdW5zaWduZWQgaW50IEZJRUxEOyAgICAgIFwKKyAgc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSB1bnNpZ25lZCBpbnQgX19mZXRjaF9idWlsdGluXyMjRklFTEQodm9pZCkgeyAgICAgXAorICAgIHJldHVybiBJTlRSSU5TSUM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2RlZmluZSBfX0RFTEVURSA9ZGVsZXRlCisjZWxzZQorI2RlZmluZSBfX0RFTEVURQorI2VuZGlmCisKKy8vIE1ha2Ugc3VyZSBub2JvZHkgY2FuIGNyZWF0ZSBpbnN0YW5jZXMgb2YgdGhlIHNwZWNpYWwgdmFyaWJsZSB0eXBlcy4gIG52Y2MKKy8vIGFsc28gZGlzYWxsb3dzIHRha2luZyBhZGRyZXNzIG9mIHNwZWNpYWwgdmFyaWFibGVzLCBzbyB3ZSBkaXNhYmxlIGFkZHJlc3Mtb2YKKy8vIG9wZXJhdG9yIGFzIHdlbGwuCisjZGVmaW5lIF9fQ1VEQV9ESVNBTExPV19CVUlMVElOVkFSX0FDQ0VTUyhUeXBlTmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSBUeXBlTmFtZSgpIF9fREVMRVRFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19hdHRyaWJ1dGVfXygoZGV2aWNlKSkgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUgJikgX19ERUxFVEU7ICAgICAgICAgICAgICAgICBcCisgIF9fYXR0cmlidXRlX18oKGRldmljZSkpIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lICYpIGNvbnN0IF9fREVMRVRFOyAgICAgXAorICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSBUeXBlTmFtZSAqb3BlcmF0b3ImKCkgY29uc3QgX19ERUxFVEUKKworc3RydWN0IF9fY3VkYV9idWlsdGluX3RocmVhZElkeF90IHsKKyAgX19DVURBX0RFVklDRV9CVUlMVElOKHgsX19udnZtX3JlYWRfcHR4X3NyZWdfdGlkX3goKSk7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih5LF9fbnZ2bV9yZWFkX3B0eF9zcmVnX3RpZF95KCkpOworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeixfX252dm1fcmVhZF9wdHhfc3JlZ190aWRfeigpKTsKKyAgLy8gdGhyZWFkSWR4IHNob3VsZCBiZSBjb252ZXJ0aWJsZSB0byB1aW50MyAoaW4gZmFjdCBpbiBudmNjLCBpdCAqaXMqIGEKKyAgLy8gdWludDMpLiAgVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFmdGVyIHdlIHB1bGwgaW4gdmVjdG9yX3R5cGVzLmguCisgIF9fYXR0cmlidXRlX18oKGRldmljZSkpIG9wZXJhdG9yIHVpbnQzKCkgY29uc3Q7Citwcml2YXRlOgorICBfX0NVREFfRElTQUxMT1dfQlVJTFRJTlZBUl9BQ0NFU1MoX19jdWRhX2J1aWx0aW5fdGhyZWFkSWR4X3QpOworfTsKKworc3RydWN0IF9fY3VkYV9idWlsdGluX2Jsb2NrSWR4X3QgeworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeCxfX252dm1fcmVhZF9wdHhfc3JlZ19jdGFpZF94KCkpOworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeSxfX252dm1fcmVhZF9wdHhfc3JlZ19jdGFpZF95KCkpOworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeixfX252dm1fcmVhZF9wdHhfc3JlZ19jdGFpZF96KCkpOworICAvLyBibG9ja0lkeCBzaG91bGQgYmUgY29udmVydGlibGUgdG8gdWludDMgKGluIGZhY3QgaW4gbnZjYywgaXQgKmlzKiBhCisgIC8vIHVpbnQzKS4gIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhZnRlciB3ZSBwdWxsIGluIHZlY3Rvcl90eXBlcy5oLgorICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSBvcGVyYXRvciB1aW50MygpIGNvbnN0OworcHJpdmF0ZToKKyAgX19DVURBX0RJU0FMTE9XX0JVSUxUSU5WQVJfQUNDRVNTKF9fY3VkYV9idWlsdGluX2Jsb2NrSWR4X3QpOworfTsKKworc3RydWN0IF9fY3VkYV9idWlsdGluX2Jsb2NrRGltX3QgeworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeCxfX252dm1fcmVhZF9wdHhfc3JlZ19udGlkX3goKSk7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih5LF9fbnZ2bV9yZWFkX3B0eF9zcmVnX250aWRfeSgpKTsKKyAgX19DVURBX0RFVklDRV9CVUlMVElOKHosX19udnZtX3JlYWRfcHR4X3NyZWdfbnRpZF96KCkpOworICAvLyBibG9ja0RpbSBzaG91bGQgYmUgY29udmVydGlibGUgdG8gZGltMyAoaW4gZmFjdCBpbiBudmNjLCBpdCAqaXMqIGEKKyAgLy8gZGltMykuICBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYWZ0ZXIgd2UgcHVsbCBpbiB2ZWN0b3JfdHlwZXMuaC4KKyAgX19hdHRyaWJ1dGVfXygoZGV2aWNlKSkgb3BlcmF0b3IgZGltMygpIGNvbnN0OworcHJpdmF0ZToKKyAgX19DVURBX0RJU0FMTE9XX0JVSUxUSU5WQVJfQUNDRVNTKF9fY3VkYV9idWlsdGluX2Jsb2NrRGltX3QpOworfTsKKworc3RydWN0IF9fY3VkYV9idWlsdGluX2dyaWREaW1fdCB7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih4LF9fbnZ2bV9yZWFkX3B0eF9zcmVnX25jdGFpZF94KCkpOworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeSxfX252dm1fcmVhZF9wdHhfc3JlZ19uY3RhaWRfeSgpKTsKKyAgX19DVURBX0RFVklDRV9CVUlMVElOKHosX19udnZtX3JlYWRfcHR4X3NyZWdfbmN0YWlkX3ooKSk7CisgIC8vIGdyaWREaW0gc2hvdWxkIGJlIGNvbnZlcnRpYmxlIHRvIGRpbTMgKGluIGZhY3QgaW4gbnZjYywgaXQgKmlzKiBhCisgIC8vIGRpbTMpLiAgVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFmdGVyIHdlIHB1bGwgaW4gdmVjdG9yX3R5cGVzLmguCisgIF9fYXR0cmlidXRlX18oKGRldmljZSkpIG9wZXJhdG9yIGRpbTMoKSBjb25zdDsKK3ByaXZhdGU6CisgIF9fQ1VEQV9ESVNBTExPV19CVUlMVElOVkFSX0FDQ0VTUyhfX2N1ZGFfYnVpbHRpbl9ncmlkRGltX3QpOworfTsKKworI2RlZmluZSBfX0NVREFfQlVJTFRJTl9WQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZXh0ZXJuIGNvbnN0IF9fYXR0cmlidXRlX18oKGRldmljZSkpIF9fYXR0cmlidXRlX18oKHdlYWspKQorX19DVURBX0JVSUxUSU5fVkFSIF9fY3VkYV9idWlsdGluX3RocmVhZElkeF90IHRocmVhZElkeDsKK19fQ1VEQV9CVUlMVElOX1ZBUiBfX2N1ZGFfYnVpbHRpbl9ibG9ja0lkeF90IGJsb2NrSWR4OworX19DVURBX0JVSUxUSU5fVkFSIF9fY3VkYV9idWlsdGluX2Jsb2NrRGltX3QgYmxvY2tEaW07CitfX0NVREFfQlVJTFRJTl9WQVIgX19jdWRhX2J1aWx0aW5fZ3JpZERpbV90IGdyaWREaW07CisKKy8vIHdhcnBTaXplIHNob3VsZCB0cmFuc2xhdGUgdG8gcmVhZCBvZiAlV0FSUF9TWiBidXQgdGhlcmUncyBjdXJyZW50bHkgbm8KKy8vIGJ1aWx0aW4gdG8gZG8gc28uIEFjY29yZGluZyB0byBQVFggdjQuMiBkb2NzICd0byBkYXRlLCBhbGwgdGFyZ2V0CisvLyBhcmNoaXRlY3R1cmVzIGhhdmUgYSBXQVJQX1NaIHZhbHVlIG9mIDMyJy4KK19fYXR0cmlidXRlX18oKGRldmljZSkpIGNvbnN0IGludCB3YXJwU2l6ZSA9IDMyOworCisjdW5kZWYgX19DVURBX0RFVklDRV9CVUlMVElOCisjdW5kZWYgX19DVURBX0JVSUxUSU5fVkFSCisjdW5kZWYgX19DVURBX0RJU0FMTE9XX0JVSUxUSU5WQVJfQUNDRVNTCisKKyNlbmRpZiAvKiBfX0NVREFfQlVJTFRJTl9WQVJTX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZW1taW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2VtbWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OGQwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2VtbWludHJpbi5oCkBAIC0wLDAgKzEsMjQ1OCBAQAorLyo9PT0tLS0tIGVtbWludHJpbi5oIC0gU1NFMiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0VNTUlOVFJJTl9ICisjZGVmaW5lIF9fRU1NSU5UUklOX0gKKworI2luY2x1ZGUgPHhtbWludHJpbi5oPgorCit0eXBlZGVmIGRvdWJsZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNikpKTsKK3R5cGVkZWYgbG9uZyBsb25nIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworCisvKiBUeXBlIGRlZmluZXMuICAqLwordHlwZWRlZiBkb3VibGUgX192MmRmIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBsb25nIGxvbmcgX192MmRpIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBzaG9ydCBfX3Y4aGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwordHlwZWRlZiBjaGFyIF9fdjE2cWkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworCisvKiBVbnNpZ25lZCB0eXBlcyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX192MmR1IF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Y4aHUgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdjE2cXUgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworCisvKiBXZSBuZWVkIGFuIGV4cGxpY2l0bHkgc2lnbmVkIHZhcmlhbnQgZm9yIGNoYXIuIE5vdGUgdGhhdCB0aGlzIHNob3VsZG4ndAorICogYXBwZWFyIGluIHRoZSBpbnRlcmZhY2UgdGhvdWdoLiAqLwordHlwZWRlZiBzaWduZWQgY2hhciBfX3YxNnFzIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNikpKTsKKworI2luY2x1ZGUgPGYxNmNpbnRyaW4uaD4KKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzc2UyIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIF9fYVswXSArPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSgoX192MmRmKV9fYSArIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICBfX2FbMF0gLT0gX19iWzBdOworICByZXR1cm4gX19hOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZCkoKF9fdjJkZilfX2EgLSAoX192MmRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19hWzBdICo9IF9fYlswXTsKKyAgcmV0dXJuIF9fYTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpKChfX3YyZGYpX19hICogKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Rpdl9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIF9fYVswXSAvPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZGl2X3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSgoX192MmRmKV9fYSAvIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcXJ0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19tMTI4ZCBfX2MgPSBfX2J1aWx0aW5faWEzMl9zcXJ0c2QoKF9fdjJkZilfX2IpOworICByZXR1cm4gKF9fbTEyOGQpIHsgX19jWzBdLCBfX2FbMV0gfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcXJ0X3BkKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfc3FydHBkKChfX3YyZGYpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbWluc2QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbWlucGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXhfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbWF4c2QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXhfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbWF4cGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hbmRfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpKChfX3Y0c3UpX19hICYgKF9fdjRzdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FuZG5vdF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZCkofihfX3Y0c3UpX19hICYgKF9fdjRzdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX29yX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSgoX192NHN1KV9fYSB8IChfX3Y0c3UpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV94b3JfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpKChfX3Y0c3UpX19hIF4gKF9fdjRzdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcGVxcGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsdHBkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbGVwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcGx0cGQoKF9fdjJkZilfX2IsIChfX3YyZGYpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsZXBkKChfX3YyZGYpX19iLCAoX192MmRmKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wb3JkX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG9yZHBkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wdW5vcmRfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wdW5vcmRwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBuZXFwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5sdF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubHRwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5sZV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubGVwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5ndF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubHRwZCgoX192MmRmKV9fYiwgKF9fdjJkZilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5nZV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubGVwZCgoX192MmRmKV9fYiwgKF9fdjJkZilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcGVxc2QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsdHNkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbGVzZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19tMTI4ZCBfX2MgPSBfX2J1aWx0aW5faWEzMl9jbXBsdHNkKChfX3YyZGYpX19iLCAoX192MmRmKV9fYSk7CisgIHJldHVybiAoX19tMTI4ZCkgeyBfX2NbMF0sIF9fYVsxXSB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19tMTI4ZCBfX2MgPSBfX2J1aWx0aW5faWEzMl9jbXBsZXNkKChfX3YyZGYpX19iLCAoX192MmRmKV9fYSk7CisgIHJldHVybiAoX19tMTI4ZCkgeyBfX2NbMF0sIF9fYVsxXSB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG9yZF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBvcmRzZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcHVub3JkX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcHVub3Jkc2QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmVxc2QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBubHRfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmx0c2QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBubGVfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmxlc2QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZ3Rfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICBfX20xMjhkIF9fYyA9IF9fYnVpbHRpbl9pYTMyX2NtcG5sdHNkKChfX3YyZGYpX19iLCAoX192MmRmKV9fYSk7CisgIHJldHVybiAoX19tMTI4ZCkgeyBfX2NbMF0sIF9fYVsxXSB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5nZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIF9fbTEyOGQgX19jID0gX19idWlsdGluX2lhMzJfY21wbmxlc2QoKF9fdjJkZilfX2IsIChfX3YyZGYpX19hKTsKKyAgcmV0dXJuIChfX20xMjhkKSB7IF9fY1swXSwgX19hWzFdIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21pZXFfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taXNkZXEoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlsdF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pc2RsdCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29taWxlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZGxlKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21pZ3Rfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taXNkZ3QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlnZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pc2RnZSgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29taW5lcV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pc2RuZXEoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pZXFfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZGVxKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taWx0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RsdCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdWNvbWlsZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taXNkbGUoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pZ3Rfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZGd0KChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taWdlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RnZSgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdWNvbWluZXFfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZG5lcSgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cGRfcHMoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRwZDJwcygoX192MmRmKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cHNfcGQoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5fY29udmVydHZlY3RvcigKKyAgICAgIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYSwgMCwgMSksIF9fdjJkZik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXBpMzJfcGQoX19tMTI4aSBfX2EpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoCisgICAgICBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKV9fYSwgKF9fdjRzaSlfX2EsIDAsIDEpLCBfX3YyZGYpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBkX2VwaTMyKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0cGQyZHEoKF9fdjJkZilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2Rfc2kzMihfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHNkMnNpKChfX3YyZGYpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNkX3NzKF9fbTEyOCBfX2EsIF9fbTEyOGQgX19iKQoreworICBfX2FbMF0gPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2kzMl9zZChfX20xMjhkIF9fYSwgaW50IF9fYikKK3sKKyAgX19hWzBdID0gX19iOworICByZXR1cm4gX19hOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNzX3NkKF9fbTEyOGQgX19hLCBfX20xMjggX19iKQoreworICBfX2FbMF0gPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBkX2VwaTMyKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfY3Z0dHBkMmRxKChfX3YyZGYpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzZF9zaTMyKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19hWzBdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwZF9waTMyKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX2N2dHBkMnBpKChfX3YyZGYpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBkX3BpMzIoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfY3Z0dHBkMnBpKChfX3YyZGYpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwaTMyX3BkKF9fbTY0IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHBpMnBkKChfX3Yyc2kpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gZG91YmxlIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNkX2Y2NChfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkX3BkKGRvdWJsZSBjb25zdCAqX19kcCkKK3sKKyAgcmV0dXJuICooX19tMTI4ZCopX19kcDsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkMV9wZChkb3VibGUgY29uc3QgKl9fZHApCit7CisgIHN0cnVjdCBfX21tX2xvYWQxX3BkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIGRvdWJsZSBfX3UgPSAoKHN0cnVjdCBfX21tX2xvYWQxX3BkX3N0cnVjdCopX19kcCktPl9fdTsKKyAgcmV0dXJuIChfX20xMjhkKXsgX191LCBfX3UgfTsKK30KKworI2RlZmluZSAgICAgICAgX21tX2xvYWRfcGQxKGRwKSAgICAgICAgX21tX2xvYWQxX3BkKGRwKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRyX3BkKGRvdWJsZSBjb25zdCAqX19kcCkKK3sKKyAgX19tMTI4ZCBfX3UgPSAqKF9fbTEyOGQqKV9fZHA7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKV9fdSwgKF9fdjJkZilfX3UsIDEsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWR1X3BkKGRvdWJsZSBjb25zdCAqX19kcCkKK3sKKyAgc3RydWN0IF9fbG9hZHVfcGQgeworICAgIF9fbTEyOGQgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfcGQqKV9fZHApLT5fX3Y7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbG9hZHVfc2k2NCh2b2lkIGNvbnN0ICpfX2EpCit7CisgIHN0cnVjdCBfX2xvYWR1X3NpNjQgeworICAgIGxvbmcgbG9uZyBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICBsb25nIGxvbmcgX191ID0gKChzdHJ1Y3QgX19sb2FkdV9zaTY0KilfX2EpLT5fX3Y7CisgIHJldHVybiAoX19tMTI4aSl7X191LCAwTH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbG9hZF9zZChkb3VibGUgY29uc3QgKl9fZHApCit7CisgIHN0cnVjdCBfX21tX2xvYWRfc2Rfc3RydWN0IHsKKyAgICBkb3VibGUgX191OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgZG91YmxlIF9fdSA9ICgoc3RydWN0IF9fbW1fbG9hZF9zZF9zdHJ1Y3QqKV9fZHApLT5fX3U7CisgIHJldHVybiAoX19tMTI4ZCl7IF9fdSwgMCB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRoX3BkKF9fbTEyOGQgX19hLCBkb3VibGUgY29uc3QgKl9fZHApCit7CisgIHN0cnVjdCBfX21tX2xvYWRoX3BkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIGRvdWJsZSBfX3UgPSAoKHN0cnVjdCBfX21tX2xvYWRoX3BkX3N0cnVjdCopX19kcCktPl9fdTsKKyAgcmV0dXJuIChfX20xMjhkKXsgX19hWzBdLCBfX3UgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkbF9wZChfX20xMjhkIF9fYSwgZG91YmxlIGNvbnN0ICpfX2RwKQoreworICBzdHJ1Y3QgX19tbV9sb2FkbF9wZF9zdHJ1Y3QgeworICAgIGRvdWJsZSBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICBkb3VibGUgX191ID0gKChzdHJ1Y3QgX19tbV9sb2FkbF9wZF9zdHJ1Y3QqKV9fZHApLT5fX3U7CisgIHJldHVybiAoX19tMTI4ZCl7IF9fdSwgX19hWzFdIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5kZWZpbmVkX3BkKHZvaWQpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl91bmRlZjEyOCgpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9zZChkb3VibGUgX193KQoreworICByZXR1cm4gKF9fbTEyOGQpeyBfX3csIDAgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXQxX3BkKGRvdWJsZSBfX3cpCit7CisgIHJldHVybiAoX19tMTI4ZCl7IF9fdywgX193IH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X3BkKGRvdWJsZSBfX3csIGRvdWJsZSBfX3gpCit7CisgIHJldHVybiAoX19tMTI4ZCl7IF9feCwgX193IH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0cl9wZChkb3VibGUgX193LCBkb3VibGUgX194KQoreworICByZXR1cm4gKF9fbTEyOGQpeyBfX3csIF9feCB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHplcm9fcGQodm9pZCkKK3sKKyAgcmV0dXJuIChfX20xMjhkKXsgMCwgMCB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpeyBfX2JbMF0sIF9fYVsxXSB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JlX3NkKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCit7CisgIHN0cnVjdCBfX21tX3N0b3JlX3NkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgICgoc3RydWN0IF9fbW1fc3RvcmVfc2Rfc3RydWN0KilfX2RwKS0+X191ID0gX19hWzBdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JlX3BkKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCit7CisgICooX19tMTI4ZCopX19kcCA9IF9fYTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZTFfcGQoZG91YmxlICpfX2RwLCBfX20xMjhkIF9fYSkKK3sKKyAgX19hID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkZilfX2EsIChfX3YyZGYpX19hLCAwLCAwKTsKKyAgX21tX3N0b3JlX3BkKF9fZHAsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVfcGQxKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfbW1fc3RvcmUxX3BkKF9fZHAsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmV1X3BkKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCit7CisgIHN0cnVjdCBfX3N0b3JldV9wZCB7CisgICAgX19tMTI4ZCBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICAoKHN0cnVjdCBfX3N0b3JldV9wZCopX19kcCktPl9fdiA9IF9fYTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZXJfcGQoZG91YmxlICpfX2RwLCBfX20xMjhkIF9fYSkKK3sKKyAgX19hID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkZilfX2EsIChfX3YyZGYpX19hLCAxLCAwKTsKKyAgKihfX20xMjhkICopX19kcCA9IF9fYTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZWhfcGQoZG91YmxlICpfX2RwLCBfX20xMjhkIF9fYSkKK3sKKyAgc3RydWN0IF9fbW1fc3RvcmVoX3BkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgICgoc3RydWN0IF9fbW1fc3RvcmVoX3BkX3N0cnVjdCopX19kcCktPl9fdSA9IF9fYVsxXTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZWxfcGQoZG91YmxlICpfX2RwLCBfX20xMjhkIF9fYSkKK3sKKyAgc3RydWN0IF9fbW1fc3RvcmVoX3BkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgICgoc3RydWN0IF9fbW1fc3RvcmVoX3BkX3N0cnVjdCopX19kcCktPl9fdSA9IF9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRfZXBpOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjE2cXUpX19hICsgKF9fdjE2cXUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y4aHUpX19hICsgKF9fdjhodSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjRzdSlfX2EgKyAoX192NHN1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9zaTY0KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGRxKChfX3YxZGkpX19hLCAoX192MWRpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkX2VwaTY0KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MmR1KV9fYSArIChfX3YyZHUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRzX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFkZHNiMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhZGRzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHNfZXB1OChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWRkdXNiMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRzX2VwdTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhZGR1c3cxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hdmdfZXB1OChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYXZnYjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYXZnX2VwdTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Bhdmd3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFkZF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbWFkZHdkMTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtYXhzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcHU4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtYXh1YjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtaW5zdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9lcHU4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtaW51YjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsaGlfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG11bGh3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsaGlfZXB1MTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG11bGh1dzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdHdvIFs4IHggc2hvcnRdIHZlY3RvcnMgYW5kCisvLy8gICAgcmV0dXJucyBhIHZlY3RvciBjb250YWluaW5nIHRoZSBsb3ctb3JkZXIgMTYgYml0cyBvZiBlYWNoIDMyLWJpdCBwcm9kdWN0CisvLy8gICAgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUE1VTExXIC8gUE1VTExXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcHJvZHVjdHMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsbG9fZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y4aHUpX19hICogKF9fdjhodSlfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgMzItYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgbG93ZXIgYml0cworLy8vICAgIG9mIHRoZSB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBhbmQgcmV0dXJucyB0aGUgNjQtYml0IHVuc2lnbmVkCisvLy8gICAgcHJvZHVjdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQTVVMVURRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHByb2R1Y3Qgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bF9zdTMyKF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcG11bHVkcSgoX192MnNpKV9fYSwgKF9fdjJzaSlfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgMzItYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgbG93ZXIKKy8vLyAgICBiaXRzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHR3byBbMiB4IGk2NF0gdmVjdG9ycywgYW5kIHJldHVybnMKKy8vLyAgICB0aGUgNjQtYml0IHByb2R1Y3RzIGluIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIGEgWzIgeCBpNjRdIHZlY3Rvci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUE1VTFVEUSAvIFBNVUxVRFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSBbMiB4IGk2NF0gdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgWzIgeCBpNjRdIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgWzIgeCBpNjRdIHZlY3RvciBjb250YWluaW5nIHRoZSBwcm9kdWN0IG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bF9lcHUzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wbXVsdWRxMTI4KChfX3Y0c2kpX19hLCAoX192NHNpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdGhlIGFic29sdXRlIGRpZmZlcmVuY2VzIG9mIGNvcnJlc3BvbmRpbmcgOC1iaXQgaW50ZWdlcgorLy8vICAgIHZhbHVlcyBpbiB0d28gMTI4LWJpdCB2ZWN0b3JzLiBTdW1zIHRoZSBmaXJzdCA4IGFic29sdXRlIGRpZmZlcmVuY2VzLCBhbmQKKy8vLyAgICBzZXBhcmF0ZWx5IHN1bXMgdGhlIHNlY29uZCA4IGFic29sdXRlIGRpZmZlcmVuY2VzLiBQYWNrc3MgdGhlc2UgdHdvCisvLy8gICAgdW5zaWduZWQgMTYtYml0IGludGVnZXIgc3VtcyBpbnRvIHRoZSB1cHBlciBhbmQgbG93ZXIgZWxlbWVudHMgb2YgYQorLy8vICAgIFsyIHggaTY0XSB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTQURCVyAvIFBTQURCVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSBbMiB4IGk2NF0gdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHN1bXMgb2YgdGhlIHNldHMgb2YgYWJzb2x1dGUKKy8vLyAgICBkaWZmZXJlbmNlcyBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NhZF9lcHU4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzYWRidzEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHRoZSBjb3JyZXNwb25kaW5nIDgtYml0IGludGVnZXIgdmFsdWVzIGluIHRoZSBvcGVyYW5kcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNVQkIgLyBQU1VCQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbWludWVuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdWJ0cmFoZW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZXMgb2YgdGhlIHZhbHVlcworLy8vICAgIGluIHRoZSBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3YxNnF1KV9fYSAtIChfX3YxNnF1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHRoZSBjb3JyZXNwb25kaW5nIDE2LWJpdCBpbnRlZ2VyIHZhbHVlcyBpbiB0aGUgb3BlcmFuZHMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTVUJXIC8gUFNVQlcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVuY2VzIG9mIHRoZSB2YWx1ZXMKKy8vLyAgICBpbiB0aGUgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjhodSlfX2EgLSAoX192OGh1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBpbnRlZ2VyIHZhbHVlcyBpbiB0aGUgb3BlcmFuZHMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTVUJEIC8gUFNVQkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVuY2VzIG9mIHRoZSB2YWx1ZXMKKy8vLyAgICBpbiB0aGUgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjRzdSlfX2EgLSAoX192NHN1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHNpZ25lZCBvciB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2YWx1ZXMgYW5kIHdyaXRlcyB0aGUKKy8vLyAgICBkaWZmZXJlbmNlIHRvIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTVUJRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHN1YnRyYWhlbmQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgdmFsdWVzIGluCisvLy8gICAgdGhlIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX3NpNjQoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YnEoKF9fdjFkaSlfX2EsIChfX3YxZGkpX19iKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdHdvIFsyIHggaTY0XSB2ZWN0b3JzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU1VCUSAvIFBTVUJRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBtaW51ZW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHN1YnRyYWhlbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBkaWZmZXJlbmNlcyBvZiB0aGUgdmFsdWVzCisvLy8gICAgaW4gdGhlIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJfZXBpNjQoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3YyZHUpX19hIC0gKF9fdjJkdSlfX2IpOworfQorCisvLy8gXGJyaWVmIFN1YnRyYWN0cyBjb3JyZXNwb25kaW5nIDgtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlcyBpbiB0aGUgaW5wdXQgYW5kCisvLy8gICAgcmV0dXJucyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZXMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIERpZmZlcmVuY2VzIGdyZWF0ZXIgdGhhbiA3RmggYXJlIHNhdHVyYXRlZCB0byA3RmgsIGFuZCBkaWZmZXJlbmNlcyBsZXNzCisvLy8gICAgdGhhbiA4MGggYXJlIHNhdHVyYXRlZCB0byA4MGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTVUJTQiAvIFBTVUJTQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbWludWVuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdWJ0cmFoZW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZXMgb2YgdGhlIHZhbHVlcworLy8vICAgIGluIHRoZSBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Vic19lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzdWJzYjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIGNvcnJlc3BvbmRpbmcgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlcyBpbiB0aGUgaW5wdXQgYW5kCisvLy8gICAgcmV0dXJucyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZXMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIERpZmZlcmVuY2VzIGdyZWF0ZXIgdGhhbiA3RkZGaCBhcmUgc2F0dXJhdGVkIHRvIDdGRkZoLCBhbmQgdmFsdWVzIGxlc3MKKy8vLyAgICB0aGFuIDgwMDBoIGFyZSBzYXR1cmF0ZWQgdG8gODAwMGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTVUJTVyAvIFBTVUJTVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbWludWVuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdWJ0cmFoZW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZXMgb2YgdGhlIHZhbHVlcworLy8vICAgIGluIHRoZSBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Vic19lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3Vic3cxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgY29ycmVzcG9uZGluZyA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcyBpbiB0aGUgaW5wdXQKKy8vLyAgICBhbmQgcmV0dXJucyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZXMgaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uIERpZmZlcmVuY2VzIGxlc3MgdGhhbiAwMGggYXJlIHNhdHVyYXRlZCB0byAwMGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTVUJVU0IgLyBQU1VCVVNCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBtaW51ZW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHN1YnRyYWhlbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSB1bnNpZ25lZCBpbnRlZ2VyCisvLy8gICAgZGlmZmVyZW5jZXMgb2YgdGhlIHZhbHVlcyBpbiB0aGUgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1YnNfZXB1OChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3VidXNiMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgY29ycmVzcG9uZGluZyAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMgaW4gdGhlIGlucHV0CisvLy8gICAgYW5kIHJldHVybnMgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGVzIGluIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLiBEaWZmZXJlbmNlcyBsZXNzIHRoYW4gMDAwMGggYXJlIHNhdHVyYXRlZCB0byAwMDAwaC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNVQlVTVyAvIFBTVUJVU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHVuc2lnbmVkIGludGVnZXIKKy8vLyAgICBkaWZmZXJlbmNlcyBvZiB0aGUgdmFsdWVzIGluIHRoZSBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Vic19lcHUxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3VidXN3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcnMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBBTkQgLyBQQU5EIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgYml0d2lzZSBBTkQgb2YgdGhlIHZhbHVlcworLy8vICAgIGluIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FuZF9zaTEyOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjJkdSlfX2EgJiAoX192MmR1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcnMsIHVzaW5nIHRoZQorLy8vICAgIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQQU5ETiAvIFBBTkROIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyB0aGUgbGVmdCBzb3VyY2Ugb3BlcmFuZC4gVGhlIG9uZSdzIGNvbXBsZW1lbnQKKy8vLyAgICBvZiB0aGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIGJpdHdpc2UgQU5ELgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0IHNvdXJjZSBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBiaXR3aXNlIEFORCBvZiB0aGUgb25lJ3MKKy8vLyAgICBjb21wbGVtZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kIGFuZCB0aGUgdmFsdWVzIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYW5kbm90X3NpMTI4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSh+KF9fdjJkdSlfX2EgJiAoX192MmR1KV9fYik7Cit9CisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBPUiBvZiB0d28gMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcnMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBPUiAvIFBPUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgT1Igb2YgdGhlIHZhbHVlcworLy8vICAgIGluIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX29yX3NpMTI4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MmR1KV9fYSB8IChfX3YyZHUpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgZXhjbHVzaXZlIE9SIG9mIHR3byAxMjgtYml0IGludGVnZXIgdmVjdG9ycy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFhPUiAvIFBYT1IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBiaXR3aXNlIGV4Y2x1c2l2ZSBPUiBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgaW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1feG9yX3NpMTI4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MmR1KV9fYSBeIChfX3YyZHUpX19iKTsKK30KKworLy8vIFxicmllZiBMZWZ0LXNoaWZ0cyB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIGJ5IHRoZSBzcGVjaWZpZWQKKy8vLyAgICBudW1iZXIgb2YgYnl0ZXMuIExvdy1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20xMjhpIF9tbV9zbGxpX3NpMTI4KF9fbTEyOGkgYSwgY29uc3QgaW50IGltbSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNMTERRIC8gUFNMTERRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIGltbQorLy8vICAgIEFuIGltbWVkaWF0ZSB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbGVmdC1zaGlmdAorLy8vICAgIG9wZXJhbmQgYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbGVmdC1zaGlmdGVkIHZhbHVlLgorI2RlZmluZSBfbW1fc2xsaV9zaTEyOChhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zZXR6ZXJvX3NpMTI4KCksICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKGEpLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgMCA6IDE2IC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICAxIDogMTcgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDIgOiAxOCAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgMyA6IDE5IC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA0IDogMjAgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDUgOiAyMSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNiA6IDIyIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA3IDogMjMgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDggOiAyNCAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgOSA6IDI1IC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEwIDogMjYgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTEgOiAyNyAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMiA6IDI4IC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEzIDogMjkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTQgOiAzMCAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxNSA6IDMxIC0gKGNoYXIpKGltbSkpOyB9KQorCisjZGVmaW5lIF9tbV9ic2xsaV9zaTEyOChhLCBpbW0pIFwKKyAgX21tX3NsbGlfc2kxMjgoKGEpLCAoaW1tKSkKKworLy8vIFxicmllZiBMZWZ0LXNoaWZ0cyBlYWNoIDE2LWJpdCB2YWx1ZSBpbiB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kCisvLy8gICAgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4gTG93LW9yZGVyIGJpdHMgYXJlIGNsZWFyZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTTExXIC8gUFNMTFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQW4gaW50ZWdlciB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYml0cyB0byBsZWZ0LXNoaWZ0IGVhY2ggdmFsdWUKKy8vLyAgICBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbGVmdC1zaGlmdGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsaV9lcGkxNihfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2xsd2kxMjgoKF9fdjhoaSlfX2EsIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIExlZnQtc2hpZnRzIGVhY2ggMTYtYml0IHZhbHVlIGluIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQKKy8vLyAgICBieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLiBMb3ctb3JkZXIgYml0cyBhcmUgY2xlYXJlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNMTFcgLyBQU0xMVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgaW4gd2hpY2ggYml0cyBbNjM6MF0gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJpdHMKKy8vLyAgICB0byBsZWZ0LXNoaWZ0IGVhY2ggdmFsdWUgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGxlZnQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbHcxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgTGVmdC1zaGlmdHMgZWFjaCAzMi1iaXQgdmFsdWUgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZAorLy8vICAgIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIExvdy1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU0xMRCAvIFBTTExEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEFuIGludGVnZXIgdmFsdWUgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gbGVmdC1zaGlmdCBlYWNoIHZhbHVlCisvLy8gICAgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGxlZnQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbGlfZXBpMzIoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbGRpMTI4KChfX3Y0c2kpX19hLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBMZWZ0LXNoaWZ0cyBlYWNoIDMyLWJpdCB2YWx1ZSBpbiB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kCisvLy8gICAgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4gTG93LW9yZGVyIGJpdHMgYXJlIGNsZWFyZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTTExEIC8gUFNMTEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGluIHdoaWNoIGJpdHMgWzYzOjBdIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRzCisvLy8gICAgdG8gbGVmdC1zaGlmdCBlYWNoIHZhbHVlIGluIG9wZXJhbmQgX19hLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBsZWZ0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGxfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzbGxkMTI4KChfX3Y0c2kpX19hLCAoX192NHNpKV9fY291bnQpOworfQorCisvLy8gXGJyaWVmIExlZnQtc2hpZnRzIGVhY2ggNjQtYml0IHZhbHVlIGluIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQKKy8vLyAgICBieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLiBMb3ctb3JkZXIgYml0cyBhcmUgY2xlYXJlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNMTFEgLyBQU0xMUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBbiBpbnRlZ2VyIHZhbHVlIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBiaXRzIHRvIGxlZnQtc2hpZnQgZWFjaCB2YWx1ZQorLy8vICAgIGluIG9wZXJhbmQgX19hLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBsZWZ0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGxpX2VwaTY0KF9fbTEyOGkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzbGxxaTEyOCgoX192MmRpKV9fYSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgTGVmdC1zaGlmdHMgZWFjaCA2NC1iaXQgdmFsdWUgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZAorLy8vICAgIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIExvdy1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU0xMUSAvIFBTTExRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBpbiB3aGljaCBiaXRzIFs2MzowXSBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgYml0cworLy8vICAgIHRvIGxlZnQtc2hpZnQgZWFjaCB2YWx1ZSBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbGVmdC1zaGlmdGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsX2VwaTY0KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc2xscTEyOCgoX192MmRpKV9fYSwgKF9fdjJkaSlfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCAxNi1iaXQgdmFsdWUgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZAorLy8vICAgIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIEhpZ2gtb3JkZXIgYml0cyBhcmUgZmlsbGVkIHdpdGggdGhlIHNpZ24KKy8vLyAgICBiaXQgb2YgdGhlIGluaXRpYWwgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTUkFXIC8gUFNSQVcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQW4gaW50ZWdlciB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYml0cyB0byByaWdodC1zaGlmdCBlYWNoIHZhbHVlCisvLy8gICAgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmFpX2VwaTE2KF9fbTEyOGkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzcmF3aTEyOCgoX192OGhpKV9fYSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIGVhY2ggMTYtYml0IHZhbHVlIGluIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQKKy8vLyAgICBieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLiBIaWdoLW9yZGVyIGJpdHMgYXJlIGZpbGxlZCB3aXRoIHRoZSBzaWduCisvLy8gICAgYml0IG9mIHRoZSBpbml0aWFsIHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU1JBVyAvIFBTUkFXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBpbiB3aGljaCBiaXRzIFs2MzowXSBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgYml0cworLy8vICAgIHRvIHJpZ2h0LXNoaWZ0IGVhY2ggdmFsdWUgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmFfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzcmF3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIDMyLWJpdCB2YWx1ZSBpbiB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kCisvLy8gICAgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4gSGlnaC1vcmRlciBiaXRzIGFyZSBmaWxsZWQgd2l0aCB0aGUgc2lnbgorLy8vICAgIGJpdCBvZiB0aGUgaW5pdGlhbCB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNSQUQgLyBQU1JBRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBbiBpbnRlZ2VyIHZhbHVlIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBiaXRzIHRvIHJpZ2h0LXNoaWZ0IGVhY2ggdmFsdWUKKy8vLyAgICBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYWlfZXBpMzIoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYWRpMTI4KChfX3Y0c2kpX19hLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCAzMi1iaXQgdmFsdWUgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZAorLy8vICAgIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIEhpZ2gtb3JkZXIgYml0cyBhcmUgZmlsbGVkIHdpdGggdGhlIHNpZ24KKy8vLyAgICBiaXQgb2YgdGhlIGluaXRpYWwgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTUkFEIC8gUFNSQUQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGluIHdoaWNoIGJpdHMgWzYzOjBdIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRzCisvLy8gICAgdG8gcmlnaHQtc2hpZnQgZWFjaCB2YWx1ZSBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYV9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYWQxMjgoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQgYnkgdGhlIHNwZWNpZmllZAorLy8vICAgIG51bWJlciBvZiBieXRlcy4gSGlnaC1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20xMjhpIF9tbV9zcmxpX3NpMTI4KF9fbTEyOGkgYSwgY29uc3QgaW50IGltbSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNSTERRIC8gUFNSTERRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIGltbQorLy8vICAgIEFuIGltbWVkaWF0ZSB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmlnaHQtc2hpZnQgb3BlcmFuZAorLy8vICAgIGEuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWUuCisjZGVmaW5lIF9tbV9zcmxpX3NpMTI4KGEsIGltbSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKGEpLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpLCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE2IDogKGNoYXIpKGltbSkgKyAwLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTcgOiAoY2hhcikoaW1tKSArIDEsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxOCA6IChjaGFyKShpbW0pICsgMiwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE5IDogKGNoYXIpKGltbSkgKyAzLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjAgOiAoY2hhcikoaW1tKSArIDQsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyMSA6IChjaGFyKShpbW0pICsgNSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDIyIDogKGNoYXIpKGltbSkgKyA2LCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjMgOiAoY2hhcikoaW1tKSArIDcsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyNCA6IChjaGFyKShpbW0pICsgOCwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI1IDogKGNoYXIpKGltbSkgKyA5LCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjYgOiAoY2hhcikoaW1tKSArIDEwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyNyA6IChjaGFyKShpbW0pICsgMTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI4IDogKGNoYXIpKGltbSkgKyAxMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjkgOiAoY2hhcikoaW1tKSArIDEzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzMCA6IChjaGFyKShpbW0pICsgMTQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDMxIDogKGNoYXIpKGltbSkgKyAxNSk7IH0pCisKKyNkZWZpbmUgX21tX2JzcmxpX3NpMTI4KGEsIGltbSkgXAorICBfbW1fc3JsaV9zaTEyOCgoYSksIChpbW0pKQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIG9mIDE2LWJpdCB2YWx1ZXMgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBvcGVyYW5kIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIEhpZ2gtb3JkZXIgYml0cyBhcmUgY2xlYXJlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNSTFcgLyBQU1JMVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBbiBpbnRlZ2VyIHZhbHVlIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBiaXRzIHRvIHJpZ2h0LXNoaWZ0IGVhY2ggdmFsdWUKKy8vLyAgICBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybGlfZXBpMTYoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybHdpMTI4KChfX3Y4aGkpX19hLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCBvZiAxNi1iaXQgdmFsdWVzIGluIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb3BlcmFuZCBieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLiBIaWdoLW9yZGVyIGJpdHMgYXJlIGNsZWFyZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTUkxXIC8gUFNSTFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGluIHdoaWNoIGJpdHMgWzYzOjBdIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRzCisvLy8gICAgdG8gcmlnaHQtc2hpZnQgZWFjaCB2YWx1ZSBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybHcxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIGVhY2ggb2YgMzItYml0IHZhbHVlcyBpbiB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9wZXJhbmQgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4gSGlnaC1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU1JMRCAvIFBTUkxEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEFuIGludGVnZXIgdmFsdWUgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gcmlnaHQtc2hpZnQgZWFjaCB2YWx1ZQorLy8vICAgIGluIG9wZXJhbmQgX19hLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsaV9lcGkzMihfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsZGkxMjgoKF9fdjRzaSlfX2EsIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIG9mIDMyLWJpdCB2YWx1ZXMgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBvcGVyYW5kIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIEhpZ2gtb3JkZXIgYml0cyBhcmUgY2xlYXJlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNSTEQgLyBQU1JMRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgaW4gd2hpY2ggYml0cyBbNjM6MF0gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJpdHMKKy8vLyAgICB0byByaWdodC1zaGlmdCBlYWNoIHZhbHVlIGluIG9wZXJhbmQgX19hLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsZDEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCBvZiA2NC1iaXQgdmFsdWVzIGluIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb3BlcmFuZCBieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLiBIaWdoLW9yZGVyIGJpdHMgYXJlIGNsZWFyZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTUkxRIC8gUFNSTFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQW4gaW50ZWdlciB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYml0cyB0byByaWdodC1zaGlmdCBlYWNoIHZhbHVlCisvLy8gICAgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmxpX2VwaTY0KF9fbTEyOGkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzcmxxaTEyOCgoX192MmRpKV9fYSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIGVhY2ggb2YgNjQtYml0IHZhbHVlcyBpbiB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9wZXJhbmQgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4gSGlnaC1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU1JMUSAvIFBTUkxRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBpbiB3aGljaCBiaXRzIFs2MzowXSBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgYml0cworLy8vICAgIHRvIHJpZ2h0LXNoaWZ0IGVhY2ggdmFsdWUgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmxfZXBpNjQoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzcmxxMTI4KChfX3YyZGkpX19hLCAoX192MmRpKV9fY291bnQpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgOC1iaXQgdmFsdWVzIG9mIHRoZSAxMjgtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3JzIGZvciBlcXVhbGl0eS4gRWFjaCBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IgZmFsc2UsIEZGaAorLy8vICAgIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQQ01QRVFCIC8gUENNUEVRQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MTZxaSlfX2EgPT0gKF9fdjE2cWkpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDE2LWJpdCB2YWx1ZXMgb2YgdGhlIDEyOC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvcnMgZm9yIGVxdWFsaXR5LiBFYWNoIGNvbXBhcmlzb24geWllbGRzIDBoIGZvciBmYWxzZSwgRkZGRmgKKy8vLyAgICBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUENNUEVRVyAvIFBDTVBFUVcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y4aGkpX19hID09IChfX3Y4aGkpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCB2YWx1ZXMgb2YgdGhlIDEyOC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvcnMgZm9yIGVxdWFsaXR5LiBFYWNoIGNvbXBhcmlzb24geWllbGRzIDBoIGZvciBmYWxzZSwKKy8vLyAgICBGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBDTVBFUUQgLyBQQ01QRVFEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192NHNpKV9fYSA9PSAoX192NHNpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBzaWduZWQgOC1iaXQgdmFsdWVzIG9mIHRoZSAxMjgtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3JzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdCBvcGVyYW5kIGFyZQorLy8vICAgIGdyZWF0ZXIgdGhhbiB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuIEVhY2ggY29tcGFyaXNvbiB5aWVsZHMgMGggZm9yCisvLy8gICAgZmFsc2UsIEZGaCBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUENNUEdUQiAvIFBDTVBHVEIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXBpOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGNvbXBhcmlzb24sIGJ1dCBfX3YxNnFpIGlzIGEgY2hhcgorICAgICB3aGljaCBtYXkgYmUgc2lnbmVkIG9yIHVuc2lnbmVkLCBzbyB1c2UgX192MTZxcy4gKi8KKyAgcmV0dXJuIChfX20xMjhpKSgoX192MTZxcylfX2EgPiAoX192MTZxcylfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmVkIDE2LWJpdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcnMgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZXMgaW4gdGhlIGZpcnN0IG9wZXJhbmQKKy8vLyAgICBhcmUgZ3JlYXRlciB0aGFuIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4gRWFjaCBjb21wYXJpc29uIHlpZWxkcyAwaAorLy8vICAgIGZvciBmYWxzZSwgRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBDTVBHVFcgLyBQQ01QR1RXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192OGhpKV9fYSA+IChfX3Y4aGkpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNpZ25lZCAzMi1iaXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3JzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdCBvcGVyYW5kCisvLy8gICAgYXJlIGdyZWF0ZXIgdGhhbiB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuIEVhY2ggY29tcGFyaXNvbiB5aWVsZHMgMGgKKy8vLyAgICBmb3IgZmFsc2UsIEZGRkZGRkZGaCBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUENNUEdURCAvIFBDTVBHVEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y0c2kpX19hID4gKF9fdjRzaSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmVkIDgtYml0IHZhbHVlcyBvZiB0aGUgMTI4LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9ycyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBhcmUgbGVzcworLy8vICAgIHRoYW4gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLiBFYWNoIGNvbXBhcmlzb24geWllbGRzIDBoIGZvciBmYWxzZSwKKy8vLyAgICBGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBDTVBHVEIgLyBQQ01QR1RCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gX21tX2NtcGd0X2VwaTgoX19iLCBfX2EpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmVkIDE2LWJpdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcnMgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZXMgaW4gdGhlIGZpcnN0IG9wZXJhbmQKKy8vLyAgICBhcmUgbGVzcyB0aGFuIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4gRWFjaCBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IKKy8vLyAgICBmYWxzZSwgRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBDTVBHVFcgLyBQQ01QR1RXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIF9tbV9jbXBndF9lcGkxNihfX2IsIF9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBzaWduZWQgMzItYml0IHZhbHVlcyBvZiB0aGUKKy8vLyAgICAxMjgtYml0IGludGVnZXIgdmVjdG9ycyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3Qgb3BlcmFuZAorLy8vICAgIGFyZSBsZXNzIHRoYW4gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLiBFYWNoIGNvbXBhcmlzb24geWllbGRzIDBoIGZvcgorLy8vICAgIGZhbHNlLCBGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBDTVBHVEQgLyBQQ01QR1REIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIF9tbV9jbXBndF9lcGkzMihfX2IsIF9fYSk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlIGZyb20gdGhlIHNlY29uZCBvcGVyYW5kIGludG8gYQorLy8vICAgIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgYW5kIHJldHVybnMgaXQgaW4gdGhlIGxvd2VyIGVsZW1lbnQgb2YgYSBbMiB4CisvLy8gICAgZG91YmxlXSB2ZWN0b3I7IHRoZSB1cHBlciBlbGVtZW50IG9mIHRoZSByZXR1cm5lZCB2ZWN0b3IgaXMgY29waWVkIGZyb20KKy8vLyAgICB0aGUgdXBwZXIgZWxlbWVudCBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUU0kyU0QgLyBDVlRTSTJTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIGNvcGllZCB0byB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyIG9wZXJhbmQgY29udGFpbmluZyB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIHdob3NlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBjb252ZXJ0ZWQgdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgY29waWVkIGZyb20KKy8vLyAgICB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2k2NF9zZChfX20xMjhkIF9fYSwgbG9uZyBsb25nIF9fYikKK3sKKyAgX19hWzBdID0gX19iOworICByZXR1cm4gX19hOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIHRoZSBmaXJzdCAobG93ZXIpIGVsZW1lbnQgb2YgYSB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGludG8gYQorLy8vICAgIDY0LWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZSwgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFNEMlNJIC8gQ1ZUU0QyU0kgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciA2NCBiaXRzIGFyZSB1c2VkIGluIHRoZQorLy8vICAgIGNvbnZlcnNpb24uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNkX3NpNjQoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRzZDJzaTY0KChfX3YyZGYpX19hKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0aGUgZmlyc3QgKGxvd2VyKSBlbGVtZW50IG9mIGEgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBpbnRvIGEKKy8vLyAgICA2NC1iaXQgc2lnbmVkIGludGVnZXIgdmFsdWUsIHRydW5jYXRpbmcgdGhlIHJlc3VsdCB3aGVuIGl0IGlzIGluZXhhY3QuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFRTRDJTSSAvIENWVFRTRDJTSSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIDY0IGJpdHMgYXJlIHVzZWQgaW4gdGhlCisvLy8gICAgY29udmVyc2lvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBzaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHNkX3NpNjQoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfX2FbMF07Cit9CisjZW5kaWYKKworLy8vIFxicmllZiBDb252ZXJ0cyBhIHZlY3RvciBvZiBbNCB4IGkzMl0gaW50byBhIHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZURFEyUFMgLyBDVlREUTJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTMyX3BzKF9fbTEyOGkgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0ZHEycHMoKF9fdjRzaSlfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGludG8gYSB2ZWN0b3Igb2YgWzQgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRQUzJEUSAvIENWVFBTMkRRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTMyXSBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBzX2VwaTMyKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9jdnRwczJkcSgoX192NHNmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gaW50byBhIHZlY3RvciBvZiBbNCB4IGkzMl0sCisvLy8gICAgdHJ1bmNhdGluZyB0aGUgcmVzdWx0IHdoZW4gaXQgaXMgaW5leGFjdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUVFBTMkRRIC8gQ1ZUVFBTMkRRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBzX2VwaTMyKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcigoX192NHNmKV9fYSwgX192NHNpKTsKK30KKworLy8vIFxicmllZiBSZXR1cm5zIGEgdmVjdG9yIG9mIFs0IHggaTMyXSB3aGVyZSB0aGUgbG93ZXN0IGVsZW1lbnQgaXMgdGhlIGlucHV0CisvLy8gICAgb3BlcmFuZCBhbmQgdGhlIHJlbWFpbmluZyBlbGVtZW50cyBhcmUgemVyby4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WRCAvIE1PVkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAzMi1iaXQgc2lnbmVkIGludGVnZXIgb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2kzMl9zaTEyOChpbnQgX19hKQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjRzaSl7IF9fYSwgMCwgMCwgMCB9OworfQorCisjaWZkZWYgX194ODZfNjRfXworLy8vIFxicmllZiBSZXR1cm5zIGEgdmVjdG9yIG9mIFsyIHggaTY0XSB3aGVyZSB0aGUgbG93ZXIgZWxlbWVudCBpcyB0aGUgaW5wdXQKKy8vLyAgICBvcGVyYW5kIGFuZCB0aGUgdXBwZXIgZWxlbWVudCBpcyB6ZXJvLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZRIC8gTU9WUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCBzaWduZWQgaW50ZWdlciBvcGVyYW5kIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggaTY0XSBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNpNjRfc2kxMjgobG9uZyBsb25nIF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKXsgX19hLCAwIH07Cit9CisjZW5kaWYKKworLy8vIFxicmllZiBNb3ZlcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgMzIgYml0cyBvZiBhIHZlY3RvciBvZiBbNCB4IGkzMl0gdG8gYQorLy8vICAgIDMyLWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WRCAvIE1PVkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSB2ZWN0b3Igb2YgWzQgeCBpMzJdLiBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgMzIgYml0cyBhcmUgbW92ZWQgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAzMi1iaXQgc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgbW92ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2kxMjhfc2kzMihfX20xMjhpIF9fYSkKK3sKKyAgX192NHNpIF9fYiA9IChfX3Y0c2kpX19hOworICByZXR1cm4gX19iWzBdOworfQorCisjaWZkZWYgX194ODZfNjRfXworLy8vIFxicmllZiBNb3ZlcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgNjQgYml0cyBvZiBhIHZlY3RvciBvZiBbMiB4IGk2NF0gdG8gYQorLy8vICAgIDY0LWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WUSAvIE1PVlEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSB2ZWN0b3Igb2YgWzIgeCBpNjRdLiBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgNjQgYml0cyBhcmUgbW92ZWQgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgbW92ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2kxMjhfc2k2NChfX20xMjhpIF9fYSkKK3sKKyAgcmV0dXJuIF9fYVswXTsKK30KKyNlbmRpZgorCisvLy8gXGJyaWVmIE1vdmVzIHBhY2tlZCBpbnRlZ2VyIHZhbHVlcyBmcm9tIGFuIGFsaWduZWQgMTI4LWJpdCBtZW1vcnkgbG9jYXRpb24KKy8vLyAgICB0byBlbGVtZW50cyBpbiBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkRRQSAvIE1PVkRRQSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBbiBhbGlnbmVkIHBvaW50ZXIgdG8gYSBtZW1vcnkgbG9jYXRpb24gY29udGFpbmluZyBpbnRlZ2VyIHZhbHVlcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbW92ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkX3NpMTI4KF9fbTEyOGkgY29uc3QgKl9fcCkKK3sKKyAgcmV0dXJuICpfX3A7Cit9CisKKy8vLyBcYnJpZWYgTW92ZXMgcGFja2VkIGludGVnZXIgdmFsdWVzIGZyb20gYW4gdW5hbGlnbmVkIDEyOC1iaXQgbWVtb3J5IGxvY2F0aW9uCisvLy8gICAgdG8gZWxlbWVudHMgaW4gYSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZEUVUgLyBNT1ZEUVUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgbWVtb3J5IGxvY2F0aW9uIGNvbnRhaW5pbmcgaW50ZWdlciB2YWx1ZXMuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG1vdmVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbG9hZHVfc2kxMjgoX19tMTI4aSBjb25zdCAqX19wKQoreworICBzdHJ1Y3QgX19sb2FkdV9zaTEyOCB7CisgICAgX19tMTI4aSBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICByZXR1cm4gKChzdHJ1Y3QgX19sb2FkdV9zaTEyOCopX19wKS0+X192OworfQorCisvLy8gXGJyaWVmIFJldHVybnMgYSB2ZWN0b3Igb2YgWzIgeCBpNjRdIHdoZXJlIHRoZSBsb3dlciBlbGVtZW50IGlzIHRha2VuIGZyb20KKy8vLyAgICB0aGUgbG93ZXIgZWxlbWVudCBvZiB0aGUgb3BlcmFuZCwgYW5kIHRoZSB1cHBlciBlbGVtZW50IGlzIHplcm8uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlEgLyBNT1ZRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdLiBCaXRzIFs2MzowXSBhcmUgd3JpdHRlbiB0byBiaXRzIFs2MzowXSBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggaTY0XS4gVGhlIGxvd2VyIG9yZGVyIGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBtb3ZlZCB2YWx1ZS4gVGhlIGhpZ2hlciBvcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkbF9lcGk2NChfX20xMjhpIGNvbnN0ICpfX3ApCit7CisgIHN0cnVjdCBfX21tX2xvYWRsX2VwaTY0X3N0cnVjdCB7CisgICAgbG9uZyBsb25nIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIHJldHVybiAoX19tMTI4aSkgeyAoKHN0cnVjdCBfX21tX2xvYWRsX2VwaTY0X3N0cnVjdCopX19wKS0+X191LCAwfTsKK30KKworLy8vIFxicmllZiBHZW5lcmF0ZXMgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gd2l0aCB1bnNwZWNpZmllZCBjb250ZW50LgorLy8vICAgIFRoaXMgY291bGQgYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byBhbm90aGVyIGludHJpbnNpYyBmdW5jdGlvbiB3aGVyZSB0aGUKKy8vLyAgICBhcmd1bWVudCBpcyByZXF1aXJlZCBidXQgdGhlIHZhbHVlIGlzIG5vdCBhY3R1YWxseSB1c2VkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaGFzIG5vIGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXSB3aXRoIHVuc3BlY2lmaWVkIGNvbnRlbnQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VuZGVmaW5lZF9zaTEyOCh2b2lkKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdW5kZWYxMjgoKTsKK30KKworLy8vIFxicmllZiBJbml0aWFsaXplcyBib3RoIDY0LWJpdCB2YWx1ZXMgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0gd2l0aAorLy8vICAgIHRoZSBzcGVjaWZpZWQgNjQtYml0IGludGVnZXIgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3ExCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24gdmVjdG9yIG9mIFsyIHggaTY0XS4KKy8vLyBccGFyYW0gX19xMAorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uIHZlY3RvciBvZiBbMiB4IGk2NF0uCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdIGNvbnRhaW5pbmcgdGhlIHZhbHVlcworLy8vICAgIHByb3ZpZGVkIGluIHRoZSBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X2VwaTY0eChsb25nIGxvbmcgX19xMSwgbG9uZyBsb25nIF9fcTApCit7CisgIHJldHVybiAoX19tMTI4aSl7IF9fcTAsIF9fcTEgfTsKK30KKworLy8vIFxicmllZiBJbml0aWFsaXplcyBib3RoIDY0LWJpdCB2YWx1ZXMgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0gd2l0aAorLy8vICAgIHRoZSBzcGVjaWZpZWQgNjQtYml0IGludGVnZXIgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3ExCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24gdmVjdG9yIG9mIFsyIHggaTY0XS4KKy8vLyBccGFyYW0gX19xMAorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uIHZlY3RvciBvZiBbMiB4IGk2NF0uCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdIGNvbnRhaW5pbmcgdGhlIHZhbHVlcworLy8vICAgIHByb3ZpZGVkIGluIHRoZSBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X2VwaTY0KF9fbTY0IF9fcTEsIF9fbTY0IF9fcTApCit7CisgIHJldHVybiAoX19tMTI4aSl7IChsb25nIGxvbmcpX19xMCwgKGxvbmcgbG9uZylfX3ExIH07Cit9CisKKy8vLyBcYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIDMyLWJpdCB2YWx1ZXMgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gd2l0aAorLy8vICAgIHRoZSBzcGVjaWZpZWQgMzItYml0IGludGVnZXIgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2kzCisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMTI3Ojk2XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9faTIKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs5NTo2NF0gb2YgdGhlIGRlc3RpbmF0aW9uCisvLy8gICAgdmVjdG9yLgorLy8vIFxwYXJhbSBfX2kxCisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNjM6MzJdIG9mIHRoZSBkZXN0aW5hdGlvbgorLy8vICAgIHZlY3Rvci4KKy8vLyBccGFyYW0gX19pMAorLy8vICAgIEEgMzItYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzMxOjBdIG9mIHRoZSBkZXN0aW5hdGlvbgorLy8vICAgIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gY29udGFpbmluZyB0aGUgdmFsdWVzCisvLy8gICAgcHJvdmlkZWQgaW4gdGhlIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRfZXBpMzIoaW50IF9faTMsIGludCBfX2kyLCBpbnQgX19pMSwgaW50IF9faTApCit7CisgIHJldHVybiAoX19tMTI4aSkoX192NHNpKXsgX19pMCwgX19pMSwgX19pMiwgX19pM307Cit9CisKKy8vLyBcYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIDE2LWJpdCB2YWx1ZXMgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gd2l0aAorLy8vICAgIHRoZSBzcGVjaWZpZWQgMTYtYml0IGludGVnZXIgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3c3CisvLy8gICAgQSAxNi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMTI3OjExMl0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24gdmVjdG9yLgorLy8vIFxwYXJhbSBfX3c2CisvLy8gICAgQSAxNi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMTExOjk2XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fdzUKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs5NTo4MF0gb2YgdGhlIGRlc3RpbmF0aW9uCisvLy8gICAgdmVjdG9yLgorLy8vIFxwYXJhbSBfX3c0CisvLy8gICAgQSAxNi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNzk6NjRdIG9mIHRoZSBkZXN0aW5hdGlvbgorLy8vICAgIHZlY3Rvci4KKy8vLyBccGFyYW0gX193MworLy8vICAgIEEgMTYtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzYzOjQ4XSBvZiB0aGUgZGVzdGluYXRpb24KKy8vLyAgICB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fdzIKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs0NzozMl0gb2YgdGhlIGRlc3RpbmF0aW9uCisvLy8gICAgdmVjdG9yLgorLy8vIFxwYXJhbSBfX3cxCisvLy8gICAgQSAxNi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMzE6MTZdIG9mIHRoZSBkZXN0aW5hdGlvbgorLy8vICAgIHZlY3Rvci4KKy8vLyBccGFyYW0gX193MAorLy8vICAgIEEgMTYtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzE1OjBdIG9mIHRoZSBkZXN0aW5hdGlvbgorLy8vICAgIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyB0aGUgdmFsdWVzCisvLy8gICAgcHJvdmlkZWQgaW4gdGhlIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRfZXBpMTYoc2hvcnQgX193Nywgc2hvcnQgX193Niwgc2hvcnQgX193NSwgc2hvcnQgX193NCwgc2hvcnQgX193Mywgc2hvcnQgX193Miwgc2hvcnQgX193MSwgc2hvcnQgX193MCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKShfX3Y4aGkpeyBfX3cwLCBfX3cxLCBfX3cyLCBfX3czLCBfX3c0LCBfX3c1LCBfX3c2LCBfX3c3IH07Cit9CisKKy8vLyBcYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIDgtYml0IHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFsxNiB4IGk4XSB3aXRoCisvLy8gICAgdGhlIHNwZWNpZmllZCA4LWJpdCBpbnRlZ2VyIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19iMTUKKy8vLyAgICBJbml0aWFsaXplcyBiaXRzIFsxMjc6MTIwXSBvZiB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IxNAorLy8vICAgIEluaXRpYWxpemVzIGJpdHMgWzExOToxMTJdIG9mIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYjEzCisvLy8gICAgSW5pdGlhbGl6ZXMgYml0cyBbMTExOjEwNF0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iMTIKKy8vLyAgICBJbml0aWFsaXplcyBiaXRzIFsxMDM6OTZdIG9mIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYjExCisvLy8gICAgSW5pdGlhbGl6ZXMgYml0cyBbOTU6ODhdIG9mIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYjEwCisvLy8gICAgSW5pdGlhbGl6ZXMgYml0cyBbODc6ODBdIG9mIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYjkKKy8vLyAgICBJbml0aWFsaXplcyBiaXRzIFs3OTo3Ml0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iOAorLy8vICAgIEluaXRpYWxpemVzIGJpdHMgWzcxOjY0XSBvZiB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2I3CisvLy8gICAgSW5pdGlhbGl6ZXMgYml0cyBbNjM6NTZdIG9mIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYjYKKy8vLyAgICBJbml0aWFsaXplcyBiaXRzIFs1NTo0OF0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iNQorLy8vICAgIEluaXRpYWxpemVzIGJpdHMgWzQ3OjQwXSBvZiB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2I0CisvLy8gICAgSW5pdGlhbGl6ZXMgYml0cyBbMzk6MzJdIG9mIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYjMKKy8vLyAgICBJbml0aWFsaXplcyBiaXRzIFszMToyNF0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iMgorLy8vICAgIEluaXRpYWxpemVzIGJpdHMgWzIzOjE2XSBvZiB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IxCisvLy8gICAgSW5pdGlhbGl6ZXMgYml0cyBbMTU6OF0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iMAorLy8vICAgIEluaXRpYWxpemVzIGJpdHMgWzc6MF0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IHZlY3RvciBvZiBbMTYgeCBpOF0gY29udGFpbmluZyB0aGUgdmFsdWVzCisvLy8gICAgcHJvdmlkZWQgaW4gdGhlIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRfZXBpOChjaGFyIF9fYjE1LCBjaGFyIF9fYjE0LCBjaGFyIF9fYjEzLCBjaGFyIF9fYjEyLCBjaGFyIF9fYjExLCBjaGFyIF9fYjEwLCBjaGFyIF9fYjksIGNoYXIgX19iOCwgY2hhciBfX2I3LCBjaGFyIF9fYjYsIGNoYXIgX19iNSwgY2hhciBfX2I0LCBjaGFyIF9fYjMsIGNoYXIgX19iMiwgY2hhciBfX2IxLCBjaGFyIF9fYjApCit7CisgIHJldHVybiAoX19tMTI4aSkoX192MTZxaSl7IF9fYjAsIF9fYjEsIF9fYjIsIF9fYjMsIF9fYjQsIF9fYjUsIF9fYjYsIF9fYjcsIF9fYjgsIF9fYjksIF9fYjEwLCBfX2IxMSwgX19iMTIsIF9fYjEzLCBfX2IxNCwgX19iMTUgfTsKK30KKworLy8vIFxicmllZiBJbml0aWFsaXplcyBib3RoIHZhbHVlcyBpbiBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igd2l0aCB0aGUKKy8vLyAgICBzcGVjaWZpZWQgNjQtYml0IGludGVnZXIgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcQorLy8vICAgIEludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBlbGVtZW50cyBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlcgorLy8vICAgIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTY0XSB3aXRoIGJvdGgKKy8vLyAgICBlbGVtZW50cyBjb250YWluaW5nIHRoZSB2YWx1ZSBwcm92aWRlZCBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0MV9lcGk2NHgobG9uZyBsb25nIF9fcSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKXsgX19xLCBfX3EgfTsKK30KKworLy8vIFxicmllZiBJbml0aWFsaXplcyBib3RoIHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggaTY0XSB3aXRoIHRoZQorLy8vICAgIHNwZWNpZmllZCA2NC1iaXQgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcQorLy8vICAgIEEgNjQtYml0IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZWxlbWVudHMgb2YgdGhlIGRlc3RpbmF0aW9uIGludGVnZXIKKy8vLyAgICB2ZWN0b3IuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdIHdpdGggYWxsIGVsZW1lbnRzCisvLy8gICAgY29udGFpbmluZyB0aGUgdmFsdWUgcHJvdmlkZWQgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldDFfZXBpNjQoX19tNjQgX19xKQoreworICByZXR1cm4gKF9fbTEyOGkpeyAobG9uZyBsb25nKV9fcSwgKGxvbmcgbG9uZylfX3EgfTsKK30KKworLy8vIFxicmllZiBJbml0aWFsaXplcyBhbGwgdmFsdWVzIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdIHdpdGggdGhlCisvLy8gICAgc3BlY2lmaWVkIDMyLWJpdCB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19pCisvLy8gICAgQSAzMi1iaXQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBlbGVtZW50cyBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlcgorLy8vICAgIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gd2l0aCBhbGwgZWxlbWVudHMKKy8vLyAgICBjb250YWluaW5nIHRoZSB2YWx1ZSBwcm92aWRlZCBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0MV9lcGkzMihpbnQgX19pKQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjRzaSl7IF9faSwgX19pLCBfX2ksIF9faSB9OworfQorCisvLy8gXGJyaWVmIEluaXRpYWxpemVzIGFsbCB2YWx1ZXMgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gd2l0aCB0aGUKKy8vLyAgICBzcGVjaWZpZWQgMTYtYml0IHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3cKKy8vLyAgICBBIDE2LWJpdCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGVsZW1lbnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyCisvLy8gICAgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSB3aXRoIGFsbCBlbGVtZW50cworLy8vICAgIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHByb3ZpZGVkIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXQxX2VwaTE2KHNob3J0IF9fdykKK3sKKyAgcmV0dXJuIChfX20xMjhpKShfX3Y4aGkpeyBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdyB9OworfQorCisvLy8gXGJyaWVmIEluaXRpYWxpemVzIGFsbCB2YWx1ZXMgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbMTYgeCBpOF0gd2l0aCB0aGUKKy8vLyAgICBzcGVjaWZpZWQgOC1iaXQgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEFuIDgtYml0IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZWxlbWVudHMgb2YgdGhlIGRlc3RpbmF0aW9uIGludGVnZXIKKy8vLyAgICB2ZWN0b3IuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgMTI4LWJpdCB2ZWN0b3Igb2YgWzE2IHggaThdIHdpdGggYWxsIGVsZW1lbnRzCisvLy8gICAgY29udGFpbmluZyB0aGUgdmFsdWUgcHJvdmlkZWQgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldDFfZXBpOChjaGFyIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKShfX3YxNnFpKXsgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0cl9lcGk2NChfX202NCBfX3EwLCBfX202NCBfX3ExKQoreworICByZXR1cm4gKF9fbTEyOGkpeyAobG9uZyBsb25nKV9fcTAsIChsb25nIGxvbmcpX19xMSB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHJfZXBpMzIoaW50IF9faTAsIGludCBfX2kxLCBpbnQgX19pMiwgaW50IF9faTMpCit7CisgIHJldHVybiAoX19tMTI4aSkoX192NHNpKXsgX19pMCwgX19pMSwgX19pMiwgX19pM307Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0cl9lcGkxNihzaG9ydCBfX3cwLCBzaG9ydCBfX3cxLCBzaG9ydCBfX3cyLCBzaG9ydCBfX3czLCBzaG9ydCBfX3c0LCBzaG9ydCBfX3c1LCBzaG9ydCBfX3c2LCBzaG9ydCBfX3c3KQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjhoaSl7IF9fdzAsIF9fdzEsIF9fdzIsIF9fdzMsIF9fdzQsIF9fdzUsIF9fdzYsIF9fdzcgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRyX2VwaTgoY2hhciBfX2IwLCBjaGFyIF9fYjEsIGNoYXIgX19iMiwgY2hhciBfX2IzLCBjaGFyIF9fYjQsIGNoYXIgX19iNSwgY2hhciBfX2I2LCBjaGFyIF9fYjcsIGNoYXIgX19iOCwgY2hhciBfX2I5LCBjaGFyIF9fYjEwLCBjaGFyIF9fYjExLCBjaGFyIF9fYjEyLCBjaGFyIF9fYjEzLCBjaGFyIF9fYjE0LCBjaGFyIF9fYjE1KQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjE2cWkpeyBfX2IwLCBfX2IxLCBfX2IyLCBfX2IzLCBfX2I0LCBfX2I1LCBfX2I2LCBfX2I3LCBfX2I4LCBfX2I5LCBfX2IxMCwgX19iMTEsIF9fYjEyLCBfX2IxMywgX19iMTQsIF9fYjE1IH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0emVyb19zaTEyOCh2b2lkKQoreworICByZXR1cm4gKF9fbTEyOGkpeyAwTEwsIDBMTCB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JlX3NpMTI4KF9fbTEyOGkgKl9fcCwgX19tMTI4aSBfX2IpCit7CisgICpfX3AgPSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmV1X3NpMTI4KF9fbTEyOGkgKl9fcCwgX19tMTI4aSBfX2IpCit7CisgIHN0cnVjdCBfX3N0b3JldV9zaTEyOCB7CisgICAgX19tMTI4aSBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICAoKHN0cnVjdCBfX3N0b3JldV9zaTEyOCopX19wKS0+X192ID0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2ttb3ZldV9zaTEyOChfX20xMjhpIF9fZCwgX19tMTI4aSBfX24sIGNoYXIgKl9fcCkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza21vdmRxdSgoX192MTZxaSlfX2QsIChfX3YxNnFpKV9fbiwgX19wKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZWxfZXBpNjQoX19tMTI4aSAqX19wLCBfX20xMjhpIF9fYSkKK3sKKyAgc3RydWN0IF9fbW1fc3RvcmVsX2VwaTY0X3N0cnVjdCB7CisgICAgbG9uZyBsb25nIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgICgoc3RydWN0IF9fbW1fc3RvcmVsX2VwaTY0X3N0cnVjdCopX19wKS0+X191ID0gX19hWzBdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0cmVhbV9wZChkb3VibGUgKl9fcCwgX19tMTI4ZCBfX2EpCit7CisgIF9fYnVpbHRpbl9ub250ZW1wb3JhbF9zdG9yZSgoX192MmRmKV9fYSwgKF9fdjJkZiopX19wKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdHJlYW1fc2kxMjgoX19tMTI4aSAqX19wLCBfX20xMjhpIF9fYSkKK3sKKyAgX19idWlsdGluX25vbnRlbXBvcmFsX3N0b3JlKChfX3YyZGkpX19hLCAoX192MmRpKilfX3ApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0cmVhbV9zaTMyKGludCAqX19wLCBpbnQgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZudGkoX19wLCBfX2EpOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdHJlYW1fc2k2NChsb25nIGxvbmcgKl9fcCwgbG9uZyBsb25nIF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfbW92bnRpNjQoX19wLCBfX2EpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY2xmbHVzaCh2b2lkIGNvbnN0ICpfX3ApCit7CisgIF9fYnVpbHRpbl9pYTMyX2NsZmx1c2goX19wKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sZmVuY2Uodm9pZCkKK3sKKyAgX19idWlsdGluX2lhMzJfbGZlbmNlKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWZlbmNlKHZvaWQpCit7CisgIF9fYnVpbHRpbl9pYTMyX21mZW5jZSgpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BhY2tzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhY2tzc3diMTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGFja3NfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFja3NzZHcxMjgoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wYWNrdXNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFja3Vzd2IxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2V4dHJhY3RfZXBpMTYoX19tMTI4aSBfX2EsIGludCBfX2ltbSkKK3sKKyAgX192OGhpIF9fYiA9IChfX3Y4aGkpX19hOworICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KV9fYltfX2ltbSAmIDddOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2luc2VydF9lcGkxNihfX20xMjhpIF9fYSwgaW50IF9fYiwgaW50IF9faW1tKQoreworICBfX3Y4aGkgX19jID0gKF9fdjhoaSlfX2E7CisgIF9fY1tfX2ltbSAmIDddID0gX19iOworICByZXR1cm4gKF9fbTEyOGkpX19jOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZW1hc2tfZXBpOChfX20xMjhpIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Btb3Ztc2tiMTI4KChfX3YxNnFpKV9fYSk7Cit9CisKKyNkZWZpbmUgX21tX3NodWZmbGVfZXBpMzIoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pID4+IDApICYgMHgzLCAoKGltbSkgPj4gMikgJiAweDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pID4+IDQpICYgMHgzLCAoKGltbSkgPj4gNikgJiAweDMpOyB9KQorCisjZGVmaW5lIF9tbV9zaHVmZmxlbG9fZXBpMTYoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pID4+IDApICYgMHgzLCAoKGltbSkgPj4gMikgJiAweDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pID4+IDQpICYgMHgzLCAoKGltbSkgPj4gNikgJiAweDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgNSwgNiwgNyk7IH0pCisKKyNkZWZpbmUgX21tX3NodWZmbGVoaV9lcGkxNihhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGhpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pID4+IDYpICYgMHgzKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNraGlfZXBpOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgOCwgMTYrOCwgOSwgMTYrOSwgMTAsIDE2KzEwLCAxMSwgMTYrMTEsIDEyLCAxNisxMiwgMTMsIDE2KzEzLCAxNCwgMTYrMTQsIDE1LCAxNisxNSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNraGlfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA0LCA4KzQsIDUsIDgrNSwgNiwgOCs2LCA3LCA4KzcpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2hpX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMiwgNCsyLCAzLCA0KzMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2hpX2VwaTY0KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMSwgMisxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2tsb19lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAwLCAxNiswLCAxLCAxNisxLCAyLCAxNisyLCAzLCAxNiszLCA0LCAxNis0LCA1LCAxNis1LCA2LCAxNis2LCA3LCAxNis3KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2tsb19lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDAsIDgrMCwgMSwgOCsxLCAyLCA4KzIsIDMsIDgrMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNrbG9fZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAwLCA0KzAsIDEsIDQrMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNrbG9fZXBpNjQoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAwLCAyKzApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlcGk2NF9waTY0KF9fbTEyOGkgX19hKQoreworICByZXR1cm4gKF9fbTY0KV9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZwaTY0X2VwaTY0KF9fbTY0IF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKXsgKGxvbmcgbG9uZylfX2EsIDAgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlX2VwaTY0KF9fbTEyOGkgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkaSlfX2EsIChfX20xMjhpKXsgMCB9LCAwLCAyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2toaV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKV9fYSwgKF9fdjJkZilfX2IsIDEsIDIrMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNrbG9fcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iLCAwLCAyKzApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZW1hc2tfcGQoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9tb3Ztc2twZCgoX192MmRmKV9fYSk7Cit9CisKKyNkZWZpbmUgX21tX3NodWZmbGVfcGQoYSwgYiwgaSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGYpKF9fbTEyOGQpKGEpLCAoX192MmRmKShfX20xMjhkKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoaSkgPj4gMCkgJiAweDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyAoKChpKSA+PiAxKSAmIDB4MSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY2FzdHBkX3BzKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gKF9fbTEyOClfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY2FzdHBkX3NpMTI4KF9fbTEyOGQgX19hKQoreworICByZXR1cm4gKF9fbTEyOGkpX19hOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Nhc3Rwc19wZChfX20xMjggX19hKQoreworICByZXR1cm4gKF9fbTEyOGQpX19hOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Nhc3Rwc19zaTEyOChfX20xMjggX19hKQoreworICByZXR1cm4gKF9fbTEyOGkpX19hOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY2FzdHNpMTI4X3BzKF9fbTEyOGkgX19hKQoreworICByZXR1cm4gKF9fbTEyOClfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY2FzdHNpMTI4X3BkKF9fbTEyOGkgX19hKQoreworICByZXR1cm4gKF9fbTEyOGQpX19hOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BhdXNlKHZvaWQpCit7CisgIF9fYnVpbHRpbl9pYTMyX3BhdXNlKCk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2RlZmluZSBfTU1fU0hVRkZMRTIoeCwgeSkgKCgoeCkgPDwgMSkgfCAoeSkpCisKKyNlbmRpZiAvKiBfX0VNTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2YxNmNpbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZjE2Y2ludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNWJmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2YxNmNpbnRyaW4uaApAQCAtMCwwICsxLDEyNCBAQAorLyo9PT0tLS0tIGYxNmNpbnRyaW4uaCAtIEYxNkMgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmICFkZWZpbmVkIF9fWDg2SU5UUklOX0ggJiYgIWRlZmluZWQgX19FTU1JTlRSSU5fSCAmJiAhZGVmaW5lZCBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8ZjE2Y2ludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8ZW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19GMTZDSU5UUklOX0gKKyNkZWZpbmUgX19GMTZDSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgXAorICBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImYxNmMiKSkpCisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSAxNi1iaXQgaGFsZi1wcmVjaXNpb24gZmxvYXQgdmFsdWUgaW50byBhIDMyLWJpdCBmbG9hdAorLy8vICAgIHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRQSDJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDE2LWJpdCBoYWxmLXByZWNpc2lvbiBmbG9hdCB2YWx1ZS4KKy8vLyBccmV0dXJucyBUaGUgY29udmVydGVkIDMyLWJpdCBmbG9hdCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZSBmbG9hdCBfX0RFRkFVTFRfRk5fQVRUUlMKK19jdnRzaF9zcyh1bnNpZ25lZCBzaG9ydCBfX2EpCit7CisgIF9fdjhoaSB2ID0geyhzaG9ydClfX2EsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICBfX3Y0c2YgciA9IF9fYnVpbHRpbl9pYTMyX3ZjdnRwaDJwcyh2KTsKKyAgcmV0dXJuIHJbMF07Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSAzMi1iaXQgc2luZ2xlLXByZWNpc2lvbiBmbG9hdCB2YWx1ZSB0byBhIDE2LWJpdAorLy8vICAgIGhhbGYtcHJlY2lzaW9uIGZsb2F0IHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyB1bnNpZ25lZCBzaG9ydCBfY3Z0c3Nfc2goZmxvYXQgYSwgY29uc3QgaW50IGltbSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUUFMyUEggaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEEgMzItYml0IHNpbmdsZS1wcmVjaXNpb24gZmxvYXQgdmFsdWUgdG8gYmUgY29udmVydGVkIHRvIGEgMTYtYml0CisvLy8gICAgaGFsZi1wcmVjaXNpb24gZmxvYXQgdmFsdWUuCisvLy8gXHBhcmFtIGltbQorLy8vICAgIEFuIGltbWVkaWF0ZSB2YWx1ZSBjb250cm9sbGluZyByb3VuZGluZyB1c2luZyBiaXRzIFsyOjBdOgorLy8vICAgIDAwMDogTmVhcmVzdAorLy8vICAgIDAwMTogRG93bgorLy8vICAgIDAxMDogVXAKKy8vLyAgICAwMTE6IFRydW5jYXRlCisvLy8gICAgMVhYOiBVc2UgTVhDU1IuUkMgZm9yIHJvdW5kaW5nCisvLy8gXHJldHVybnMgVGhlIGNvbnZlcnRlZCAxNi1iaXQgaGFsZi1wcmVjaXNpb24gZmxvYXQgdmFsdWUuCisjZGVmaW5lIF9jdnRzc19zaChhLCBpbW0pICBcCisgICgodW5zaWduZWQgc2hvcnQpKCgoX192OGhpKV9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaCgoX192NHNmKXthLCAwLCAwLCAwfSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltbSkpKVswXSkpCisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSAxMjgtYml0IHZlY3RvciBjb250YWluaW5nIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW50byBhCisvLy8gICAgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyAxNi1iaXQgaGFsZi1wcmVjaXNpb24gZmxvYXQgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20xMjhpIF9tbV9jdnRwc19waChfX20xMjggYSwgY29uc3QgaW50IGltbSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUUFMyUEggaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyAzMi1iaXQgZmxvYXQgdmFsdWVzLgorLy8vIFxwYXJhbSBpbW0KKy8vLyAgICBBbiBpbW1lZGlhdGUgdmFsdWUgY29udHJvbGxpbmcgcm91bmRpbmcgdXNpbmcgYml0cyBbMjowXToKKy8vLyAgICAwMDA6IE5lYXJlc3QKKy8vLyAgICAwMDE6IERvd24KKy8vLyAgICAwMTA6IFVwCisvLy8gICAgMDExOiBUcnVuY2F0ZQorLy8vICAgIDFYWDogVXNlIE1YQ1NSLlJDIGZvciByb3VuZGluZworLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyBjb252ZXJ0ZWQgMTYtYml0IGhhbGYtcHJlY2lzaW9uIGZsb2F0CisvLy8gICAgdmFsdWVzLiBUaGUgbG93ZXIgNjQgYml0cyBhcmUgdXNlZCB0byBzdG9yZSB0aGUgY29udmVydGVkIDE2LWJpdAorLy8vICAgIGhhbGYtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKyNkZWZpbmUgX21tX2N2dHBzX3BoKGEsIGltbSkgXAorICAoKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdmN2dHBzMnBoKChfX3Y0c2YpKF9fbTEyOCkoYSksIChpbW0pKSkKKworLy8vIFxicmllZiBDb252ZXJ0cyBhIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgMTYtYml0IGhhbGYtcHJlY2lzaW9uIGZsb2F0CisvLy8gICAgdmFsdWVzIGludG8gYSAxMjgtYml0IHZlY3RvciBjb250YWluaW5nIDMyLWJpdCBmbG9hdCB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFBIMlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyAxNi1iaXQgaGFsZi1wcmVjaXNpb24gZmxvYXQgdmFsdWVzLiBUaGUgbG93ZXIKKy8vLyAgICA2NCBiaXRzIGFyZSB1c2VkIGluIHRoZSBjb252ZXJzaW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBjb252ZXJ0ZWQgZmxvYXQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwaF9wcyhfX20xMjhpIF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmN2dHBoMnBzKChfX3Y4aGkpX19hKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19GMTZDSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZmxvYXQuaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZmxvYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjgyNjllCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbG9hdC5oCkBAIC0wLDAgKzEsMTM0IEBACisvKj09PS0tLS0gZmxvYXQuaCAtIENoYXJhY3RlcmlzdGljcyBvZiBmbG9hdGluZyBwb2ludCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fRkxPQVRfSAorI2RlZmluZSBfX0ZMT0FUX0gKKworLyogSWYgd2UncmUgb24gTWluR1csIGZhbGwgYmFjayB0byB0aGUgc3lzdGVtJ3MgZmxvYXQuaCwgd2hpY2ggbWlnaHQgaGF2ZQorICogYWRkaXRpb25hbCBkZWZpbml0aW9ucyBwcm92aWRlZCBmb3IgV2luZG93cy4KKyAqIEZvciBtb3JlIGRldGFpbHMgc2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS95MHlidzlmeS5hc3B4CisgKi8KKyNpZiAoZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfTVNDX1ZFUikpICYmIF9fU1REQ19IT1NURURfXyAmJiBcCisgICAgX19oYXNfaW5jbHVkZV9uZXh0KDxmbG9hdC5oPikKKyMgIGluY2x1ZGVfbmV4dCA8ZmxvYXQuaD4KKworLyogVW5kZWZpbmUgYW55dGhpbmcgdGhhdCB3ZSdsbCBiZSByZWRlZmluaW5nIGJlbG93LiAqLworIyAgdW5kZWYgRkxUX0VWQUxfTUVUSE9ECisjICB1bmRlZiBGTFRfUk9VTkRTCisjICB1bmRlZiBGTFRfUkFESVgKKyMgIHVuZGVmIEZMVF9NQU5UX0RJRworIyAgdW5kZWYgREJMX01BTlRfRElHCisjICB1bmRlZiBMREJMX01BTlRfRElHCisjICBpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwgfHwgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorIyAgICB1bmRlZiBERUNJTUFMX0RJRworIyAgZW5kaWYKKyMgIHVuZGVmIEZMVF9ESUcKKyMgIHVuZGVmIERCTF9ESUcKKyMgIHVuZGVmIExEQkxfRElHCisjICB1bmRlZiBGTFRfTUlOX0VYUAorIyAgdW5kZWYgREJMX01JTl9FWFAKKyMgIHVuZGVmIExEQkxfTUlOX0VYUAorIyAgdW5kZWYgRkxUX01JTl8xMF9FWFAKKyMgIHVuZGVmIERCTF9NSU5fMTBfRVhQCisjICB1bmRlZiBMREJMX01JTl8xMF9FWFAKKyMgIHVuZGVmIEZMVF9NQVhfRVhQCisjICB1bmRlZiBEQkxfTUFYX0VYUAorIyAgdW5kZWYgTERCTF9NQVhfRVhQCisjICB1bmRlZiBGTFRfTUFYXzEwX0VYUAorIyAgdW5kZWYgREJMX01BWF8xMF9FWFAKKyMgIHVuZGVmIExEQkxfTUFYXzEwX0VYUAorIyAgdW5kZWYgRkxUX01BWAorIyAgdW5kZWYgREJMX01BWAorIyAgdW5kZWYgTERCTF9NQVgKKyMgIHVuZGVmIEZMVF9FUFNJTE9OCisjICB1bmRlZiBEQkxfRVBTSUxPTgorIyAgdW5kZWYgTERCTF9FUFNJTE9OCisjICB1bmRlZiBGTFRfTUlOCisjICB1bmRlZiBEQkxfTUlOCisjICB1bmRlZiBMREJMX01JTgorIyAgaWYgX19TVERDX1ZFUlNJT05fXyA+PSAyMDExMTJMIHx8ICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKyMgICAgdW5kZWYgRkxUX1RSVUVfTUlOCisjICAgIHVuZGVmIERCTF9UUlVFX01JTgorIyAgICB1bmRlZiBMREJMX1RSVUVfTUlOCisjICAgIHVuZGVmIEZMVF9ERUNJTUFMX0RJRworIyAgICB1bmRlZiBEQkxfREVDSU1BTF9ESUcKKyMgICAgdW5kZWYgTERCTF9ERUNJTUFMX0RJRworIyAgZW5kaWYKKyNlbmRpZgorCisvKiBDaGFyYWN0ZXJpc3RpY3Mgb2YgZmxvYXRpbmcgcG9pbnQgdHlwZXMsIEM5OSA1LjIuNC4yLjIgKi8KKworI2RlZmluZSBGTFRfRVZBTF9NRVRIT0QgX19GTFRfRVZBTF9NRVRIT0RfXworI2RlZmluZSBGTFRfUk9VTkRTIChfX2J1aWx0aW5fZmx0X3JvdW5kcygpKQorI2RlZmluZSBGTFRfUkFESVggX19GTFRfUkFESVhfXworCisjZGVmaW5lIEZMVF9NQU5UX0RJRyBfX0ZMVF9NQU5UX0RJR19fCisjZGVmaW5lIERCTF9NQU5UX0RJRyBfX0RCTF9NQU5UX0RJR19fCisjZGVmaW5lIExEQkxfTUFOVF9ESUcgX19MREJMX01BTlRfRElHX18KKworI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCB8fCAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisjICBkZWZpbmUgREVDSU1BTF9ESUcgX19ERUNJTUFMX0RJR19fCisjZW5kaWYKKworI2RlZmluZSBGTFRfRElHIF9fRkxUX0RJR19fCisjZGVmaW5lIERCTF9ESUcgX19EQkxfRElHX18KKyNkZWZpbmUgTERCTF9ESUcgX19MREJMX0RJR19fCisKKyNkZWZpbmUgRkxUX01JTl9FWFAgX19GTFRfTUlOX0VYUF9fCisjZGVmaW5lIERCTF9NSU5fRVhQIF9fREJMX01JTl9FWFBfXworI2RlZmluZSBMREJMX01JTl9FWFAgX19MREJMX01JTl9FWFBfXworCisjZGVmaW5lIEZMVF9NSU5fMTBfRVhQIF9fRkxUX01JTl8xMF9FWFBfXworI2RlZmluZSBEQkxfTUlOXzEwX0VYUCBfX0RCTF9NSU5fMTBfRVhQX18KKyNkZWZpbmUgTERCTF9NSU5fMTBfRVhQIF9fTERCTF9NSU5fMTBfRVhQX18KKworI2RlZmluZSBGTFRfTUFYX0VYUCBfX0ZMVF9NQVhfRVhQX18KKyNkZWZpbmUgREJMX01BWF9FWFAgX19EQkxfTUFYX0VYUF9fCisjZGVmaW5lIExEQkxfTUFYX0VYUCBfX0xEQkxfTUFYX0VYUF9fCisKKyNkZWZpbmUgRkxUX01BWF8xMF9FWFAgX19GTFRfTUFYXzEwX0VYUF9fCisjZGVmaW5lIERCTF9NQVhfMTBfRVhQIF9fREJMX01BWF8xMF9FWFBfXworI2RlZmluZSBMREJMX01BWF8xMF9FWFAgX19MREJMX01BWF8xMF9FWFBfXworCisjZGVmaW5lIEZMVF9NQVggX19GTFRfTUFYX18KKyNkZWZpbmUgREJMX01BWCBfX0RCTF9NQVhfXworI2RlZmluZSBMREJMX01BWCBfX0xEQkxfTUFYX18KKworI2RlZmluZSBGTFRfRVBTSUxPTiBfX0ZMVF9FUFNJTE9OX18KKyNkZWZpbmUgREJMX0VQU0lMT04gX19EQkxfRVBTSUxPTl9fCisjZGVmaW5lIExEQkxfRVBTSUxPTiBfX0xEQkxfRVBTSUxPTl9fCisKKyNkZWZpbmUgRkxUX01JTiBfX0ZMVF9NSU5fXworI2RlZmluZSBEQkxfTUlOIF9fREJMX01JTl9fCisjZGVmaW5lIExEQkxfTUlOIF9fTERCTF9NSU5fXworCisjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAyMDExMTJMIHx8ICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKyMgIGRlZmluZSBGTFRfVFJVRV9NSU4gX19GTFRfREVOT1JNX01JTl9fCisjICBkZWZpbmUgREJMX1RSVUVfTUlOIF9fREJMX0RFTk9STV9NSU5fXworIyAgZGVmaW5lIExEQkxfVFJVRV9NSU4gX19MREJMX0RFTk9STV9NSU5fXworIyAgZGVmaW5lIEZMVF9ERUNJTUFMX0RJRyBfX0ZMVF9ERUNJTUFMX0RJR19fCisjICBkZWZpbmUgREJMX0RFQ0lNQUxfRElHIF9fREJMX0RFQ0lNQUxfRElHX18KKyMgIGRlZmluZSBMREJMX0RFQ0lNQUxfRElHIF9fTERCTF9ERUNJTUFMX0RJR19fCisjZW5kaWYKKworI2VuZGlmIC8qIF9fRkxPQVRfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbWE0aW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2ZtYTRpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWFhOGNlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbWE0aW50cmluLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qPT09LS0tLSBmbWE0aW50cmluLmggLSBGTUE0IGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YODZJTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGZtYTRpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHg4NmludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fRk1BNElOVFJJTl9ICisjZGVmaW5lIF9fRk1BNElOVFJJTl9ICisKKyNpbmNsdWRlIDxwbW1pbnRyaW4uaD4KKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJmbWE0IikpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY19wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRwcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hY2Nfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY19zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21zdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXN1Yl9zcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1zdWJzcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tc3ViX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJzZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX25tYWNjX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9ubWFjY19wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZubWFkZHBkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbm1hY2Nfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZubWFkZHNzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX25tYWNjX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tYWRkc2QoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9ubXN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm5tc3VicHMoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbm1zdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX25tc3ViX3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJzcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9ubXN1Yl9zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZubXN1YnNkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFkZHN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWRkc3ViX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21zdWJhZGRfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcHMoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXN1YmFkZF9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYWNjX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hY2NfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2KChfX3Y0ZGYpX19BLCAoX192NGRmKV9fQiwgKF9fdjRkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXN1Yl9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm1zdWJwczI1NigoX192OHNmKV9fQSwgKF9fdjhzZilfX0IsIChfX3Y4c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tc3ViX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJwZDI1NigoX192NGRmKV9fQSwgKF9fdjRkZilfX0IsIChfX3Y0ZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X25tYWNjX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwczI1NigoX192OHNmKV9fQSwgKF9fdjhzZilfX0IsIChfX3Y4c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9ubWFjY19wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZubWFkZHBkMjU2KChfX3Y0ZGYpX19BLCAoX192NGRmKV9fQiwgKF9fdjRkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbm1zdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZubXN1YnBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X25tc3ViX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm5tc3VicGQyNTYoKF9fdjRkZilfX0EsIChfX3Y0ZGYpX19CLCAoX192NGRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYWRkc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hZGRzdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMjU2KChfX3Y0ZGYpX19BLCAoX192NGRmKV9fQiwgKF9fdjRkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXN1YmFkZF9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwczI1NigoX192OHNmKV9fQSwgKF9fdjhzZilfX0IsIChfX3Y4c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tc3ViYWRkX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwZDI1NigoX192NGRmKV9fQSwgKF9fdjRkZilfX0IsIChfX3Y0ZGYpX19DKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19GTUE0SU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZm1haW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2ZtYWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMmVmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2ZtYWludHJpbi5oCkBAIC0wLDAgKzEsMjI4IEBACisvKj09PS0tLS0gZm1hNGludHJpbi5oIC0gRk1BNCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxmbWFpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fRk1BSU5UUklOX0gKKyNkZWZpbmUgX19GTUFJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZtYSIpKSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZtYWRkX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZtYWRkX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZtYWRkX3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZtYWRkX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Ztc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Ztc3ViX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJwZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Ztc3ViX3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnNzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Ztc3ViX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJzZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZubWFkZF9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm5tYWRkcHMoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm5tYWRkX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbm1hZGRfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZubWFkZHNzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZubWFkZF9zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZubWFkZHNkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm5tc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbm1zdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZubXN1Yl9zcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm5tc3Vic3MoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm5tc3ViX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tc3Vic2QoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbWFkZHN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbWFkZHN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbXN1YmFkZF9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbXN1YmFkZF9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbWFkZF9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1NigoX192OHNmKV9fQSwgKF9fdjhzZilfX0IsIChfX3Y4c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbWFkZF9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTYoKF9fdjRkZilfX0EsIChfX3Y0ZGYpX19CLCAoX192NGRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbXN1Yl9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm1zdWJwczI1NigoX192OHNmKV9fQSwgKF9fdjhzZilfX0IsIChfX3Y4c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbXN1Yl9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtc3VicGQyNTYoKF9fdjRkZilfX0EsIChfX3Y0ZGYpX19CLCAoX192NGRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbm1hZGRfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZubWFkZHBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2ZubWFkZF9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZubWFkZHBkMjU2KChfX3Y0ZGYpX19BLCAoX192NGRmKV9fQiwgKF9fdjRkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm5tc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczI1NigoX192OHNmKV9fQSwgKF9fdjhzZilfX0IsIChfX3Y4c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbm1zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDI1NigoX192NGRmKV9fQSwgKF9fdjRkZilfX0IsIChfX3Y0ZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2ZtYWRkc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2ZtYWRkc3ViX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDI1NigoX192NGRmKV9fQSwgKF9fdjRkZilfX0IsIChfX3Y0ZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Ztc3ViYWRkX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Ztc3ViYWRkX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwZDI1NigoX192NGRmKV9fQSwgKF9fdjRkZilfX0IsIChfX3Y0ZGYpX19DKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19GTUFJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9meHNyaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2Z4c3JpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzYwMjZhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9meHNyaW50cmluLmgKQEAgLTAsMCArMSw1NSBAQAorLyo9PT0tLS0tIGZ4c3JpbnRyaW4uaCAtIEZYU1IgaW50cmluc2ljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8ZnhzcmludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19GWFNSSU5UUklOX0gKKyNkZWZpbmUgX19GWFNSSU5UUklOX0gKKworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCAgX190YXJnZXRfXygiZnhzciIpKSkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19meHNhdmUodm9pZCAqX19wKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9meHNhdmUoX19wKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19meHNhdmU2NCh2b2lkICpfX3ApIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2Z4c2F2ZTY0KF9fcCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfZnhyc3Rvcih2b2lkICpfX3ApIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2Z4cnN0b3IoX19wKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19meHJzdG9yNjQodm9pZCAqX19wKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9meHJzdG9yNjQoX19wKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaHRtaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2h0bWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzhkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2h0bWludHJpbi5oCkBAIC0wLDAgKzEsMjI2IEBACisvKj09PS0tLS0gaHRtaW50cmluLmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIFBvd2VyUEMgSFRNIC0tLS0tLS0tLS0tLS0tLT09PSpcCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKK1wqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSovCisKKyNpZm5kZWYgX19IVE1JTlRSSU5fSAorI2RlZmluZSBfX0hUTUlOVFJJTl9ICisKKyNpZm5kZWYgX19IVE1fXworI2Vycm9yICJIVE0gaW5zdHJ1Y3Rpb24gc2V0IG5vdCBlbmFibGVkIgorI2VuZGlmCisKKyNpZmRlZiBfX3Bvd2VycGNfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK3R5cGVkZWYgdWludDY0X3QgdGV4YXNyX3Q7Cit0eXBlZGVmIHVpbnQzMl90IHRleGFzcnVfdDsKK3R5cGVkZWYgdWludDMyX3QgdGV4YXNybF90OwordHlwZWRlZiB1aW50cHRyX3QgdGZpYXJfdDsKK3R5cGVkZWYgdWludHB0cl90IHRmaGFyX3Q7CisKKyNkZWZpbmUgX0hUTV9TVEFURShDUjApICgoQ1IwID4+IDEpICYgMHgzKQorI2RlZmluZSBfSFRNX05PTlRSQU5TQUNUSU9OQUwgMHgwCisjZGVmaW5lIF9IVE1fU1VTUEVOREVEICAgICAgICAweDEKKyNkZWZpbmUgX0hUTV9UUkFOU0FDVElPTkFMICAgIDB4MgorCisjZGVmaW5lIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUixCSVROVU0sU0laRSkgXAorICAoKChURVhBU1IpID4+ICg2My0oQklUTlVNKSkpICYgKCgxPDwoU0laRSkpLTEpKQorI2RlZmluZSBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSLEJJVE5VTSxTSVpFKSBcCisgICgoKFRFWEFTUikgPj4gKDMxLShCSVROVU0pKSkgJiAoKDE8PChTSVpFKSktMSkpCisKKyNkZWZpbmUgX1RFWEFTUl9GQUlMVVJFX0NPREUoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgNywgOCkKKyNkZWZpbmUgX1RFWEFTUlVfRkFJTFVSRV9DT0RFKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDcsIDgpCisKKyNkZWZpbmUgX1RFWEFTUl9GQUlMVVJFX1BFUlNJU1RFTlQoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgNywgMSkKKyNkZWZpbmUgX1RFWEFTUlVfRkFJTFVSRV9QRVJTSVNURU5UKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDcsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9ESVNBTExPV0VEKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDgsIDEpCisjZGVmaW5lIF9URVhBU1JVX0RJU0FMTE9XRUQoVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgOCwgMSkKKworI2RlZmluZSBfVEVYQVNSX05FU1RJTkdfT1ZFUkZMT1coVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgOSwgMSkKKyNkZWZpbmUgX1RFWEFTUlVfTkVTVElOR19PVkVSRkxPVyhURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCA5LCAxKQorCisjZGVmaW5lIF9URVhBU1JfRk9PVFBSSU5UX09WRVJGTE9XKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDEwLCAxKQorI2RlZmluZSBfVEVYQVNSVV9GT09UUFJJTlRfT1ZFUkZMT1coVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgMTAsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9TRUxGX0lORFVDRURfQ09ORkxJQ1QoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMTEsIDEpCisjZGVmaW5lIF9URVhBU1JVX1NFTEZfSU5EVUNFRF9DT05GTElDVChURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCAxMSwgMSkKKworI2RlZmluZSBfVEVYQVNSX05PTl9UUkFOU0FDVElPTkFMX0NPTkZMSUNUKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDEyLCAxKQorI2RlZmluZSBfVEVYQVNSVV9OT05fVFJBTlNBQ1RJT05BTF9DT05GTElDVChURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCAxMiwgMSkKKworI2RlZmluZSBfVEVYQVNSX1RSQU5TQUNUSU9OX0NPTkZMSUNUKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDEzLCAxKQorI2RlZmluZSBfVEVYQVNSVV9UUkFOU0FDVElPTl9DT05GTElDVChURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCAxMywgMSkKKworI2RlZmluZSBfVEVYQVNSX1RSQU5TTEFUSU9OX0lOVkFMSURBVElPTl9DT05GTElDVChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAxNCwgMSkKKyNkZWZpbmUgX1RFWEFTUlVfVFJBTlNMQVRJT05fSU5WQUxJREFUSU9OX0NPTkZMSUNUKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDE0LCAxKQorCisjZGVmaW5lIF9URVhBU1JfSU1QTEVNRU5UQUlPTl9TUEVDSUZJQyhURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAxNSwgMSkKKyNkZWZpbmUgX1RFWEFTUlVfSU1QTEVNRU5UQUlPTl9TUEVDSUZJQyhURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCAxNSwgMSkKKworI2RlZmluZSBfVEVYQVNSX0lOU1RSVUNUSU9OX0ZFVENIX0NPTkZMSUNUKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDE2LCAxKQorI2RlZmluZSBfVEVYQVNSVV9JTlNUUlVDVElPTl9GRVRDSF9DT05GTElDVChURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCAxNiwgMSkKKworI2RlZmluZSBfVEVYQVNSX0FCT1JUKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDMxLCAxKQorI2RlZmluZSBfVEVYQVNSVV9BQk9SVChURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCAzMSwgMSkKKworCisjZGVmaW5lIF9URVhBU1JfU1VTUEVOREVEKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDMyLCAxKQorCisjZGVmaW5lIF9URVhBU1JfUFJJVklMRUdFKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDM1LCAyKQorCisjZGVmaW5lIF9URVhBU1JfRkFJTFVSRV9TVU1NQVJZKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDM2LCAxKQorCisjZGVmaW5lIF9URVhBU1JfVEZJQVJfRVhBQ1QoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMzcsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9ST1QoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMzgsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9UUkFOU0FDVElPTl9MRVZFTChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCA2MywgMTIpCisKKyNlbmRpZiAvKiBfX3Bvd2VycGMgKi8KKworI2lmZGVmIF9fczM5MF9fCisKKy8qIENvbmRpdGlvbiBjb2RlcyBnZW5lcmF0ZWQgYnkgdGJlZ2luICAqLworI2RlZmluZSBfSFRNX1RCRUdJTl9TVEFSVEVEICAgICAgIDAKKyNkZWZpbmUgX0hUTV9UQkVHSU5fSU5ERVRFUk1JTkFURSAxCisjZGVmaW5lIF9IVE1fVEJFR0lOX1RSQU5TSUVOVCAgICAgMgorI2RlZmluZSBfSFRNX1RCRUdJTl9QRVJTSVNURU5UICAgIDMKKworLyogVGhlIGFib3J0IGNvZGVzIGJlbG93IHRoaXMgdGhyZXNob2xkIGFyZSByZXNlcnZlZCBmb3IgbWFjaGluZSB1c2UuICAqLworI2RlZmluZSBfSFRNX0ZJUlNUX1VTRVJfQUJPUlRfQ09ERSAyNTYKKworLyogVGhlIHRyYW5zYWN0aW9uIGRpYWdub3N0aWMgYmxvY2sgaXMgaXQgaXMgZGVmaW5lZCBpbiB0aGUgUHJpbmNpcGxlcworICAgb2YgT3BlcmF0aW9uIGNoYXB0ZXIgNS05MS4gICovCisKK3N0cnVjdCBfX2h0bV90ZGIgeworICB1bnNpZ25lZCBjaGFyIGZvcm1hdDsgICAgICAgICAgICAgICAgLyogICAwICovCisgIHVuc2lnbmVkIGNoYXIgZmxhZ3M7CisgIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQxWzRdOworICB1bnNpZ25lZCBzaG9ydCBuZXN0aW5nX2RlcHRoOworICB1bnNpZ25lZCBsb25nIGxvbmcgYWJvcnRfY29kZTsgICAgICAgLyogICA4ICovCisgIHVuc2lnbmVkIGxvbmcgbG9uZyBjb25mbGljdF90b2tlbjsgICAvKiAgMTYgKi8KKyAgdW5zaWduZWQgbG9uZyBsb25nIGF0aWE7ICAgICAgICAgICAgIC8qICAyNCAqLworICB1bnNpZ25lZCBjaGFyIGVhaWQ7ICAgICAgICAgICAgICAgICAgLyogIDMyICovCisgIHVuc2lnbmVkIGNoYXIgZHhjOworICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkMlsyXTsKKyAgdW5zaWduZWQgaW50IHByb2dyYW1faW50X2lkOworICB1bnNpZ25lZCBsb25nIGxvbmcgZXhjZXB0aW9uX2lkOyAgICAgLyogIDQwICovCisgIHVuc2lnbmVkIGxvbmcgbG9uZyBiZWE7ICAgICAgICAgICAgICAvKiAgNDggKi8KKyAgdW5zaWduZWQgY2hhciByZXNlcnZlZDNbNzJdOyAgICAgICAgIC8qICA1NiAqLworICB1bnNpZ25lZCBsb25nIGxvbmcgZ3Byc1sxNl07ICAgICAgICAgLyogMTI4ICovCit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fYWxpZ25lZF9fICg4KSkpOworCisKKy8qIEhlbHBlciBpbnRyaW5zaWNzIHRvIHJldHJ5IHRiZWdpbiBpbiBjYXNlIG9mIHRyYW5zaWVudCBmYWlsdXJlLiAgKi8KKworc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19idWlsdGluX3RiZWdpbl9yZXRyeV9udWxsIChpbnQgX19yZXRyeSkKK3sKKyAgaW50IGNjLCBpID0gMDsKKworICB3aGlsZSAoKGNjID0gX19idWlsdGluX3RiZWdpbigwKSkgPT0gX0hUTV9UQkVHSU5fVFJBTlNJRU5UCisgICAgICAgICAmJiBpKysgPCBfX3JldHJ5KQorICAgIF9fYnVpbHRpbl90eF9hc3Npc3QoaSk7CisKKyAgcmV0dXJuIGNjOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X3RkYiAodm9pZCAqX190ZGIsIGludCBfX3JldHJ5KQoreworICBpbnQgY2MsIGkgPSAwOworCisgIHdoaWxlICgoY2MgPSBfX2J1aWx0aW5fdGJlZ2luKF9fdGRiKSkgPT0gX0hUTV9UQkVHSU5fVFJBTlNJRU5UCisgICAgICAgICAmJiBpKysgPCBfX3JldHJ5KQorICAgIF9fYnVpbHRpbl90eF9hc3Npc3QoaSk7CisKKyAgcmV0dXJuIGNjOworfQorCisjZGVmaW5lIF9fYnVpbHRpbl90YmVnaW5fcmV0cnkodGRiLCByZXRyeSkgXAorICAoX19idWlsdGluX2NvbnN0YW50X3AodGRiID09IDApICYmIHRkYiA9PSAwID8gXAorICAgX19idWlsdGluX3RiZWdpbl9yZXRyeV9udWxsKHJldHJ5KSA6IFwKKyAgIF9fYnVpbHRpbl90YmVnaW5fcmV0cnlfdGRiKHRkYiwgcmV0cnkpKQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X25vZmxvYXRfbnVsbCAoaW50IF9fcmV0cnkpCit7CisgIGludCBjYywgaSA9IDA7CisKKyAgd2hpbGUgKChjYyA9IF9fYnVpbHRpbl90YmVnaW5fbm9mbG9hdCgwKSkgPT0gX0hUTV9UQkVHSU5fVFJBTlNJRU5UCisgICAgICAgICAmJiBpKysgPCBfX3JldHJ5KQorICAgIF9fYnVpbHRpbl90eF9hc3Npc3QoaSk7CisKKyAgcmV0dXJuIGNjOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X25vZmxvYXRfdGRiICh2b2lkICpfX3RkYiwgaW50IF9fcmV0cnkpCit7CisgIGludCBjYywgaSA9IDA7CisKKyAgd2hpbGUgKChjYyA9IF9fYnVpbHRpbl90YmVnaW5fbm9mbG9hdChfX3RkYikpID09IF9IVE1fVEJFR0lOX1RSQU5TSUVOVAorICAgICAgICAgJiYgaSsrIDwgX19yZXRyeSkKKyAgICBfX2J1aWx0aW5fdHhfYXNzaXN0KGkpOworCisgIHJldHVybiBjYzsKK30KKworI2RlZmluZSBfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X25vZmxvYXQodGRiLCByZXRyeSkgXAorICAoX19idWlsdGluX2NvbnN0YW50X3AodGRiID09IDApICYmIHRkYiA9PSAwID8gXAorICAgX19idWlsdGluX3RiZWdpbl9yZXRyeV9ub2Zsb2F0X251bGwocmV0cnkpIDogXAorICAgX19idWlsdGluX3RiZWdpbl9yZXRyeV9ub2Zsb2F0X3RkYih0ZGIsIHJldHJ5KSkKKworI2VuZGlmIC8qIF9fczM5MF9fICovCisKKyNlbmRpZiAvKiBfX0hUTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2h0bXhsaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2h0bXhsaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkYzcwNQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaHRteGxpbnRyaW4uaApAQCAtMCwwICsxLDM2MyBAQAorLyo9PT0tLS0tIGh0bXhsaW50cmluLmggLSBYTCBjb21waWxlciBIVE0gZXhlY3V0aW9uIGludHJpbnNpY3MtLS0tLS0tLS0tLS0tPT09KlwKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorXCo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KKworI2lmbmRlZiBfX0hUTVhMSU5UUklOX0gKKyNkZWZpbmUgX19IVE1YTElOVFJJTl9ICisKKyNpZm5kZWYgX19IVE1fXworI2Vycm9yICJIVE0gaW5zdHJ1Y3Rpb24gc2V0IG5vdCBlbmFibGVkIgorI2VuZGlmCisKKyNpbmNsdWRlIDxodG1pbnRyaW4uaD4KKworI2lmZGVmIF9fcG93ZXJwY19fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBfVEVYQVNSX1BUUihUTV9CVUYpIFwKKyAgKCh0ZXhhc3JfdCAqKSgoVE1fQlVGKSswKSkKKyNkZWZpbmUgX1RFWEFTUlVfUFRSKFRNX0JVRikgXAorICAoKHRleGFzcnVfdCAqKSgoVE1fQlVGKSswKSkKKyNkZWZpbmUgX1RFWEFTUkxfUFRSKFRNX0JVRikgXAorICAoKHRleGFzcmxfdCAqKSgoVE1fQlVGKSs0KSkKKyNkZWZpbmUgX1RGSUFSX1BUUihUTV9CVUYpIFwKKyAgKCh0Zmlhcl90ICopKChUTV9CVUYpKzgpKQorCit0eXBlZGVmIGNoYXIgVE1fYnVmZl90eXBlWzE2XTsKKworLyogVGhpcyBtYWNybyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHRyYW5zYWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkKKyAgIHN0YXJ0ZWQgZnJvbSB0aGUgX19UTV9iZWdpbigpIGFuZCBfX1RNX3NpbXBsZV9iZWdpbigpIGludHJpbnNpYyBmdW5jdGlvbnMKKyAgIGJlbG93LiAgKi8KKyNkZWZpbmUgX0hUTV9UQkVHSU5fU1RBUlRFRCAgICAgMQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9zaW1wbGVfYmVnaW4gKHZvaWQpCit7CisgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2J1aWx0aW5fdGJlZ2luICgwKSwgMSkpCisgICAgcmV0dXJuIF9IVE1fVEJFR0lOX1NUQVJURUQ7CisgIHJldHVybiAwOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9iZWdpbiAodm9pZCogY29uc3QgX19UTV9idWZmKQoreworICAqX1RFWEFTUkxfUFRSIChfX1RNX2J1ZmYpID0gMDsKKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fYnVpbHRpbl90YmVnaW4gKDApLCAxKSkKKyAgICByZXR1cm4gX0hUTV9UQkVHSU5fU1RBUlRFRDsKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisgICpfVEVYQVNSX1BUUiAoX19UTV9idWZmKSA9IF9fYnVpbHRpbl9nZXRfdGV4YXNyICgpOworI2Vsc2UKKyAgKl9URVhBU1JVX1BUUiAoX19UTV9idWZmKSA9IF9fYnVpbHRpbl9nZXRfdGV4YXNydSAoKTsKKyAgKl9URVhBU1JMX1BUUiAoX19UTV9idWZmKSA9IF9fYnVpbHRpbl9nZXRfdGV4YXNyICgpOworI2VuZGlmCisgICpfVEZJQVJfUFRSIChfX1RNX2J1ZmYpID0gX19idWlsdGluX2dldF90ZmlhciAoKTsKKyAgcmV0dXJuIDA7Cit9CisKK2V4dGVybiBfX2lubGluZSBsb25nCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX2VuZCAodm9pZCkKK3sKKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fYnVpbHRpbl90ZW5kICgwKSwgMSkpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9hYm9ydCAodm9pZCkKK3sKKyAgX19idWlsdGluX3RhYm9ydCAoMCk7Cit9CisKK2V4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX25hbWVkX2Fib3J0ICh1bnNpZ25lZCBjaGFyIGNvbnN0IF9fY29kZSkKK3sKKyAgX19idWlsdGluX3RhYm9ydCAoX19jb2RlKTsKK30KKworZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fcmVzdW1lICh2b2lkKQoreworICBfX2J1aWx0aW5fdHJlc3VtZSAoKTsKK30KKworZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fc3VzcGVuZCAodm9pZCkKK3sKKyAgX19idWlsdGluX3RzdXNwZW5kICgpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9pc191c2VyX2Fib3J0ICh2b2lkKiBjb25zdCBfX1RNX2J1ZmYpCit7CisgIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoX19UTV9idWZmKTsKKyAgcmV0dXJuIF9URVhBU1JVX0FCT1JUICh0ZXhhc3J1KTsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1faXNfbmFtZWRfdXNlcl9hYm9ydCAodm9pZCogY29uc3QgX19UTV9idWZmLCB1bnNpZ25lZCBjaGFyICpfX2NvZGUpCit7CisgIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoX19UTV9idWZmKTsKKworICAqX19jb2RlID0gX1RFWEFTUlVfRkFJTFVSRV9DT0RFICh0ZXhhc3J1KTsKKyAgcmV0dXJuIF9URVhBU1JVX0FCT1JUICh0ZXhhc3J1KTsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1faXNfaWxsZWdhbCAodm9pZCogY29uc3QgX19UTV9idWZmKQoreworICB0ZXhhc3J1X3QgdGV4YXNydSA9ICpfVEVYQVNSVV9QVFIgKF9fVE1fYnVmZik7CisgIHJldHVybiBfVEVYQVNSVV9ESVNBTExPV0VEICh0ZXhhc3J1KTsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1faXNfZm9vdHByaW50X2V4Y2VlZGVkICh2b2lkKiBjb25zdCBfX1RNX2J1ZmYpCit7CisgIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoX19UTV9idWZmKTsKKyAgcmV0dXJuIF9URVhBU1JVX0ZPT1RQUklOVF9PVkVSRkxPVyAodGV4YXNydSk7Cit9CisKK2V4dGVybiBfX2lubGluZSBsb25nCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX25lc3RpbmdfZGVwdGggKHZvaWQqIGNvbnN0IF9fVE1fYnVmZikKK3sKKyAgdGV4YXNybF90IHRleGFzcmw7CisKKyAgaWYgKF9IVE1fU1RBVEUgKF9fYnVpbHRpbl90dGVzdCAoKSkgPT0gX0hUTV9OT05UUkFOU0FDVElPTkFMKQorICAgIHsKKyAgICAgIHRleGFzcmwgPSAqX1RFWEFTUkxfUFRSIChfX1RNX2J1ZmYpOworICAgICAgaWYgKCFfVEVYQVNSX0ZBSUxVUkVfU1VNTUFSWSAodGV4YXNybCkpCisgICAgICAgIHRleGFzcmwgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHRleGFzcmwgPSAodGV4YXNybF90KSBfX2J1aWx0aW5fZ2V0X3RleGFzciAoKTsKKworICByZXR1cm4gX1RFWEFTUl9UUkFOU0FDVElPTl9MRVZFTCAodGV4YXNybCk7Cit9CisKK2V4dGVybiBfX2lubGluZSBsb25nCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX2lzX25lc3RlZF90b29fZGVlcCh2b2lkKiBjb25zdCBfX1RNX2J1ZmYpCit7CisgIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoX19UTV9idWZmKTsKKyAgcmV0dXJuIF9URVhBU1JVX05FU1RJTkdfT1ZFUkZMT1cgKHRleGFzcnUpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9pc19jb25mbGljdCh2b2lkKiBjb25zdCBfX1RNX2J1ZmYpCit7CisgIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoVE1fYnVmZik7CisgIC8qIFJldHVybiBURVhBU1IgYml0cyAxMSAoU2VsZi1JbmR1Y2VkIENvbmZsaWN0KSB0aHJvdWdoCisgICAgIDE0IChUcmFuc2xhdGlvbiBJbnZhbGlkYXRpb24gQ29uZmxpY3QpLiAgKi8KKyAgcmV0dXJuIChfVEVYQVNSVV9FWFRSQUNUX0JJVFMgKHRleGFzcnUsIDE0LCA0KSkgPyAxIDogMDsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1faXNfZmFpbHVyZV9wZXJzaXN0ZW50KHZvaWQqIGNvbnN0IF9fVE1fYnVmZikKK3sKKyAgdGV4YXNydV90IHRleGFzcnUgPSAqX1RFWEFTUlVfUFRSIChfX1RNX2J1ZmYpOworICByZXR1cm4gX1RFWEFTUlVfRkFJTFVSRV9QRVJTSVNURU5UICh0ZXhhc3J1KTsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fZmFpbHVyZV9hZGRyZXNzKHZvaWQqIGNvbnN0IF9fVE1fYnVmZikKK3sKKyAgcmV0dXJuICpfVEZJQVJfUFRSIChfX1RNX2J1ZmYpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX2ZhaWx1cmVfY29kZSh2b2lkKiBjb25zdCBfX1RNX2J1ZmYpCit7CisgIHJldHVybiAqX1RFWEFTUl9QVFIgKF9fVE1fYnVmZik7Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX3Bvd2VycGNfXyAqLworCisjaWZkZWYgX19zMzkwX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKiBUaGVzZSBpbnRyaW5zaWNzIGFyZSBiZWluZyBtYWRlIGF2YWlsYWJsZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCisgICB0aGUgSUJNIFhMIGNvbXBpbGVyLiAgRm9yIGRvY3VtZW50YXRpb24gcGxlYXNlIHNlZSB0aGUgInovT1MgWEwKKyAgIEMvQysrIFByb2dyYW1taW5nIEd1aWRlIiBwdWJsaWNhbGx5IGF2YWlsYWJsZSBvbiB0aGUgd2ViLiAgKi8KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1fc2ltcGxlX2JlZ2luICgpCit7CisgIHJldHVybiBfX2J1aWx0aW5fdGJlZ2luX25vZmxvYXQgKDApOworfQorCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9iZWdpbiAodm9pZCogY29uc3QgX190ZGIpCit7CisgIHJldHVybiBfX2J1aWx0aW5fdGJlZ2luX25vZmxvYXQgKF9fdGRiKTsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1fZW5kICgpCit7CisgIHJldHVybiBfX2J1aWx0aW5fdGVuZCAoKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorX19UTV9hYm9ydCAoKQoreworICByZXR1cm4gX19idWlsdGluX3RhYm9ydCAoX0hUTV9GSVJTVF9VU0VSX0FCT1JUX0NPREUpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9uYW1lZF9hYm9ydCAodW5zaWduZWQgY2hhciBjb25zdCBfX2NvZGUpCit7CisgIHJldHVybiBfX2J1aWx0aW5fdGFib3J0ICgoaW50KV9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFICsgX19jb2RlKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1fbm9uX3RyYW5zYWN0aW9uYWxfc3RvcmUgKHZvaWQqIGNvbnN0IF9fYWRkciwgbG9uZyBsb25nIGNvbnN0IF9fdmFsdWUpCit7CisgIF9fYnVpbHRpbl9ub25fdHhfc3RvcmUgKCh1aW50NjRfdCopX19hZGRyLCAodWludDY0X3QpX192YWx1ZSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX25lc3RpbmdfZGVwdGggKHZvaWQqIGNvbnN0IF9fdGRiX3B0cikKK3sKKyAgaW50IGRlcHRoID0gX19idWlsdGluX3R4X25lc3RpbmdfZGVwdGggKCk7CisgIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKilfX3RkYl9wdHI7CisKKyAgaWYgKGRlcHRoICE9IDApCisgICAgcmV0dXJuIGRlcHRoOworCisgIGlmICh0ZGItPmZvcm1hdCAhPSAxKQorICAgIHJldHVybiAwOworICByZXR1cm4gdGRiLT5uZXN0aW5nX2RlcHRoOworfQorCisvKiBUcmFuc2FjdGlvbiBmYWlsdXJlIGRpYWdub3N0aWNzICovCisKK3N0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX2lzX3VzZXJfYWJvcnQgKHZvaWQqIGNvbnN0IF9fdGRiX3B0cikKK3sKKyAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKV9fdGRiX3B0cjsKKworICBpZiAodGRiLT5mb3JtYXQgIT0gMSkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gISEodGRiLT5hYm9ydF9jb2RlID49IF9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFKTsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1faXNfbmFtZWRfdXNlcl9hYm9ydCAodm9pZCogY29uc3QgX190ZGJfcHRyLCB1bnNpZ25lZCBjaGFyKiBfX2NvZGUpCit7CisgIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKilfX3RkYl9wdHI7CisKKyAgaWYgKHRkYi0+Zm9ybWF0ICE9IDEpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHRkYi0+YWJvcnRfY29kZSA+PSBfSFRNX0ZJUlNUX1VTRVJfQUJPUlRfQ09ERSkKKyAgICB7CisgICAgICAqX19jb2RlID0gdGRiLT5hYm9ydF9jb2RlIC0gX0hUTV9GSVJTVF9VU0VSX0FCT1JUX0NPREU7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9pc19pbGxlZ2FsICh2b2lkKiBjb25zdCBfX3RkYl9wdHIpCit7CisgIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKilfX3RkYl9wdHI7CisKKyAgcmV0dXJuICh0ZGItPmZvcm1hdCA9PSAxCisJICAmJiAodGRiLT5hYm9ydF9jb2RlID09IDQgLyogdW5maWx0ZXJlZCBwcm9ncmFtIGludGVycnVwdGlvbiAqLworCSAgICAgIHx8IHRkYi0+YWJvcnRfY29kZSA9PSAxMSAvKiByZXN0cmljdGVkIGluc3RydWN0aW9uICovKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX2lzX2Zvb3RwcmludF9leGNlZWRlZCAodm9pZCogY29uc3QgX190ZGJfcHRyKQoreworICBzdHJ1Y3QgX19odG1fdGRiICp0ZGIgPSAoc3RydWN0IF9faHRtX3RkYiopX190ZGJfcHRyOworCisgIHJldHVybiAodGRiLT5mb3JtYXQgPT0gMQorCSAgJiYgKHRkYi0+YWJvcnRfY29kZSA9PSA3IC8qIGZldGNoIG92ZXJmbG93ICovCisJICAgICAgfHwgdGRiLT5hYm9ydF9jb2RlID09IDggLyogc3RvcmUgb3ZlcmZsb3cgKi8pKTsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1faXNfbmVzdGVkX3Rvb19kZWVwICh2b2lkKiBjb25zdCBfX3RkYl9wdHIpCit7CisgIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKilfX3RkYl9wdHI7CisKKyAgcmV0dXJuIHRkYi0+Zm9ybWF0ID09IDEgJiYgdGRiLT5hYm9ydF9jb2RlID09IDEzOyAvKiBkZXB0aCBleGNlZWRlZCAqLworfQorCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9pc19jb25mbGljdCAodm9pZCogY29uc3QgX190ZGJfcHRyKQoreworICBzdHJ1Y3QgX19odG1fdGRiICp0ZGIgPSAoc3RydWN0IF9faHRtX3RkYiopX190ZGJfcHRyOworCisgIHJldHVybiAodGRiLT5mb3JtYXQgPT0gMQorCSAgJiYgKHRkYi0+YWJvcnRfY29kZSA9PSA5IC8qIGZldGNoIGNvbmZsaWN0ICovCisJICAgICAgfHwgdGRiLT5hYm9ydF9jb2RlID09IDEwIC8qIHN0b3JlIGNvbmZsaWN0ICovKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX2lzX2ZhaWx1cmVfcGVyc2lzdGVudCAobG9uZyBjb25zdCBfX3Jlc3VsdCkKK3sKKyAgcmV0dXJuIF9fcmVzdWx0ID09IF9IVE1fVEJFR0lOX1BFUlNJU1RFTlQ7Cit9CisKK3N0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX2ZhaWx1cmVfYWRkcmVzcyAodm9pZCogY29uc3QgX190ZGJfcHRyKQoreworICBzdHJ1Y3QgX19odG1fdGRiICp0ZGIgPSAoc3RydWN0IF9faHRtX3RkYiopX190ZGJfcHRyOworICByZXR1cm4gdGRiLT5hdGlhOworfQorCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9mYWlsdXJlX2NvZGUgKHZvaWQqIGNvbnN0IF9fdGRiX3B0cikKK3sKKyAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKV9fdGRiX3B0cjsKKworICByZXR1cm4gdGRiLT5hYm9ydF9jb2RlOworfQorCisjZW5kaWYgLyogX19zMzkwX18gKi8KKworI2VuZGlmIC8qIF9fSFRNWExJTlRSSU5fSCAgKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaWEzMmludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pYTMyaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3ZjNmZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaWEzMmludHJpbi5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qID09PS0tLS0tLS0tIGlhMzJpbnRyaW4uaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YODZJTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGlhMzJpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHg4NmludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fSUEzMklOVFJJTl9ICisjZGVmaW5lIF9fSUEzMklOVFJJTl9ICisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmVhZGVmbGFncyh2b2lkKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcmVhZGVmbGFnc191NjQoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX193cml0ZWVmbGFncyh1bnNpZ25lZCBsb25nIGxvbmcgX19mKQoreworICBfX2J1aWx0aW5faWEzMl93cml0ZWVmbGFnc191NjQoX19mKTsKK30KKworI2Vsc2UgLyogIV9feDg2XzY0X18gKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yZWFkZWZsYWdzKHZvaWQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZWFkZWZsYWdzX3UzMigpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3dyaXRlZWZsYWdzKHVuc2lnbmVkIGludCBfX2YpCit7CisgIF9fYnVpbHRpbl9pYTMyX3dyaXRlZWZsYWdzX3UzMihfX2YpOworfQorI2VuZGlmIC8qICFfX3g4Nl82NF9fICovCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yZHBtYyhpbnQgX19BKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHBtYyhfX0EpOworfQorCisvKiBfX3JkdHNjICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmR0c2Modm9pZCkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfcmR0c2MoKTsKK30KKworLyogX19yZHRzY3AgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yZHRzY3AodW5zaWduZWQgaW50ICpfX0EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkdHNjcChfX0EpOworfQorCisjZGVmaW5lIF9yZHRzYygpIF9fcmR0c2MoKQorCisjZGVmaW5lIF9yZHBtYyhBKSBfX3JkcG1jKEEpCisKKyNlbmRpZiAvKiBfX0lBMzJJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pbW1pbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaW1taW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIyNzUyMwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaW1taW50cmluLmgKQEAgLTAsMCArMSwyODMgQEAKKy8qPT09LS0tLSBpbW1pbnRyaW4uaCAtIEludGVsIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2RlZmluZSBfX0lNTUlOVFJJTl9ICisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fTU1YX18pCisjaW5jbHVkZSA8bW1pbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1NTRV9fKQorI2luY2x1ZGUgPHhtbWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fU1NFMl9fKQorI2luY2x1ZGUgPGVtbWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fU1NFM19fKQorI2luY2x1ZGUgPHBtbWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fU1NTRTNfXykKKyNpbmNsdWRlIDx0bW1pbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgXAorICAgIChkZWZpbmVkKF9fU1NFNF8yX18pIHx8IGRlZmluZWQoX19TU0U0XzFfXykpCisjaW5jbHVkZSA8c21taW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IFwKKyAgICAoZGVmaW5lZChfX0FFU19fKSB8fCBkZWZpbmVkKF9fUENMTVVMX18pKQorI2luY2x1ZGUgPHdtbWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQ0xGTFVTSE9QVF9fKQorI2luY2x1ZGUgPGNsZmx1c2hvcHRpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0FWWF9fKQorI2luY2x1ZGUgPGF2eGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQVZYMl9fKQorI2luY2x1ZGUgPGF2eDJpbnRyaW4uaD4KKworLyogVGhlIDI1Ni1iaXQgdmVyc2lvbnMgb2YgZnVuY3Rpb25zIGluIGYxNmNpbnRyaW4uaC4KKyAgIEludGVsIGRvY3VtZW50cyB0aGVzZSBhcyBiZWluZyBpbiBpbW1pbnRyaW4uaCwgYW5kCisgICB0aGV5IGRlcGVuZCBvbiB0eXBlZGVmcyBmcm9tIGF2eGludHJpbi5oLiAqLworCisjZGVmaW5lIF9tbTI1Nl9jdnRwc19waChhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaDI1NigoX192OHNmKShfX20yNTYpKGEpLCAoaW1tKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJmMTZjIikpKQorX21tMjU2X2N2dHBoX3BzKF9fbTEyOGkgX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHMyNTYoKF9fdjhoaSlfX2EpOworfQorI2VuZGlmIC8qIF9fQVZYMl9fICovCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQk1JX18pCisjaW5jbHVkZSA8Ym1paW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19CTUkyX18pCisjaW5jbHVkZSA8Ym1pMmludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fTFpDTlRfXykKKyNpbmNsdWRlIDxsemNudGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fRk1BX18pCisjaW5jbHVkZSA8Zm1haW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19BVlg1MTJGX18pCisjaW5jbHVkZSA8YXZ4NTEyZmludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQVZYNTEyVkxfXykKKyNpbmNsdWRlIDxhdng1MTJ2bGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQVZYNTEyQldfXykKKyNpbmNsdWRlIDxhdng1MTJid2ludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQVZYNTEyQ0RfXykKKyNpbmNsdWRlIDxhdng1MTJjZGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQVZYNTEyRFFfXykKKyNpbmNsdWRlIDxhdng1MTJkcWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBcCisgICAgKGRlZmluZWQoX19BVlg1MTJWTF9fKSAmJiBkZWZpbmVkKF9fQVZYNTEyQldfXykpCisjaW5jbHVkZSA8YXZ4NTEydmxid2ludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBcCisgICAgKGRlZmluZWQoX19BVlg1MTJWTF9fKSAmJiBkZWZpbmVkKF9fQVZYNTEyQ0RfXykpCisjaW5jbHVkZSA8YXZ4NTEydmxjZGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBcCisgICAgKGRlZmluZWQoX19BVlg1MTJWTF9fKSAmJiBkZWZpbmVkKF9fQVZYNTEyRFFfXykpCisjaW5jbHVkZSA8YXZ4NTEydmxkcWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQVZYNTEyRVJfXykKKyNpbmNsdWRlIDxhdng1MTJlcmludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQVZYNTEySUZNQV9fKQorI2luY2x1ZGUgPGF2eDUxMmlmbWFpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgXAorICAgIChkZWZpbmVkKF9fQVZYNTEySUZNQV9fKSAmJiBkZWZpbmVkKF9fQVZYNTEyVkxfXykpCisjaW5jbHVkZSA8YXZ4NTEyaWZtYXZsaW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19BVlg1MTJWQk1JX18pCisjaW5jbHVkZSA8YXZ4NTEydmJtaWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBcCisgICAgKGRlZmluZWQoX19BVlg1MTJWQk1JX18pICYmIGRlZmluZWQoX19BVlg1MTJWTF9fKSkKKyNpbmNsdWRlIDxhdng1MTJ2Ym1pdmxpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0FWWDUxMlBGX18pCisjaW5jbHVkZSA8YXZ4NTEycGZpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1BLVV9fKQorI2luY2x1ZGUgPHBrdWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fUkRSTkRfXykKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInJkcm5kIikpKQorX3JkcmFuZDE2X3N0ZXAodW5zaWduZWQgc2hvcnQgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkcmFuZDE2X3N0ZXAoX19wKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicmRybmQiKSkpCitfcmRyYW5kMzJfc3RlcCh1bnNpZ25lZCBpbnQgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkcmFuZDMyX3N0ZXAoX19wKTsKK30KKworLyogX19iaXRfc2Nhbl9mb3J3YXJkICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19iaXRfc2Nhbl9mb3J3YXJkKGludCBfX0EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9jdHooX19BKTsKK30KKworLyogX19iaXRfc2Nhbl9yZXZlcnNlICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19iaXRfc2Nhbl9yZXZlcnNlKGludCBfX0EpIHsKKyAgcmV0dXJuIDMxIC0gX19idWlsdGluX2NseihfX0EpOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicmRybmQiKSkpCitfcmRyYW5kNjRfc3RlcCh1bnNpZ25lZCBsb25nIGxvbmcgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkcmFuZDY0X3N0ZXAoX19wKTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIF9fUkRSTkRfXyAqLworCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0ZTR1NCQVNFX18pCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCitfcmVhZGZzYmFzZV91MzIodm9pZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkZnNiYXNlMzIoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCitfcmVhZGZzYmFzZV91NjQodm9pZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkZnNiYXNlNjQoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCitfcmVhZGdzYmFzZV91MzIodm9pZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkZ3NiYXNlMzIoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCitfcmVhZGdzYmFzZV91NjQodm9pZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkZ3NiYXNlNjQoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQorX3dyaXRlZnNiYXNlX3UzMih1bnNpZ25lZCBpbnQgX19WKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfd3Jmc2Jhc2UzMihfX1YpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCitfd3JpdGVmc2Jhc2VfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1YpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl93cmZzYmFzZTY0KF9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJmc2dzYmFzZSIpKSkKK193cml0ZWdzYmFzZV91MzIodW5zaWduZWQgaW50IF9fVikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3dyZ3NiYXNlMzIoX19WKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQorX3dyaXRlZ3NiYXNlX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19WKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfd3Jnc2Jhc2U2NChfX1YpOworfQorCisjZW5kaWYKKyNlbmRpZiAvKiBfX0ZTR1NCQVNFX18gKi8KKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19SVE1fXykKKyNpbmNsdWRlIDxydG1pbnRyaW4uaD4KKyNpbmNsdWRlIDx4dGVzdGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fU0hBX18pCisjaW5jbHVkZSA8c2hhaW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19GWFNSX18pCisjaW5jbHVkZSA8ZnhzcmludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fWFNBVkVfXykKKyNpbmNsdWRlIDx4c2F2ZWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fWFNBVkVPUFRfXykKKyNpbmNsdWRlIDx4c2F2ZW9wdGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fWFNBVkVDX18pCisjaW5jbHVkZSA8eHNhdmVjaW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19YU0FWRVNfXykKKyNpbmNsdWRlIDx4c2F2ZXNpbnRyaW4uaD4KKyNlbmRpZgorCisvKiBTb21lIGludHJpbnNpY3MgaW5zaWRlIGFkeGludHJpbi5oIGFyZSBhdmFpbGFibGUgb25seSBvbiBwcm9jZXNzb3JzIHdpdGggQURYLAorICogd2hlcmVhcyBvdGhlcnMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGFsbCB0aW1lcy4gKi8KKyNpbmNsdWRlIDxhZHhpbnRyaW4uaD4KKworI2VuZGlmIC8qIF9fSU1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2ludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODcxMWEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2ludHJpbi5oCkBAIC0wLDAgKzEsOTU3IEBACisvKiA9PT0tLS0tLS0tLSBpbnRyaW4uaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKy8qIE9ubHkgaW5jbHVkZSB0aGlzIGlmIHdlJ3JlIGNvbXBpbGluZyBmb3IgdGhlIHdpbmRvd3MgcGxhdGZvcm0uICovCisjaWZuZGVmIF9NU0NfVkVSCisjaW5jbHVkZV9uZXh0IDxpbnRyaW4uaD4KKyNlbHNlCisKKyNpZm5kZWYgX19JTlRSSU5fSAorI2RlZmluZSBfX0lOVFJJTl9ICisKKy8qIEZpcnN0IGluY2x1ZGUgdGhlIHN0YW5kYXJkIGludHJpbnNpY3MuICovCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorI2luY2x1ZGUgPHg4NmludHJpbi5oPgorI2VuZGlmCisKKy8qIEZvciB0aGUgZGVmaW5pdGlvbiBvZiBqbXBfYnVmLiAqLworI2lmIF9fU1REQ19IT1NURURfXworI2luY2x1ZGUgPHNldGptcC5oPgorI2VuZGlmCisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19NTVhfXykKKy8qIEFuZCB0aGUgcmFuZG9tIG9uZXMgdGhhdCBhcmVuJ3QgaW4gdGhvc2UgZmlsZXMuICovCitfX202NCBfbV9mcm9tX2Zsb2F0KGZsb2F0KTsKK2Zsb2F0IF9tX3RvX2Zsb2F0KF9fbTY0KTsKKyNlbmRpZgorCisvKiBPdGhlciBhc3NvcnRlZCBpbnN0cnVjdGlvbiBpbnRyaW5zaWNzLiAqLwordm9pZCBfX2FkZGZzYnl0ZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBjaGFyKTsKK3ZvaWQgX19hZGRmc2R3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX2FkZGZzd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIF9fY29kZV9zZWcoY29uc3QgY2hhciAqKTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9fY3B1aWQoaW50WzRdLCBpbnQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19jcHVpZGV4KGludFs0XSwgaW50LCBpbnQpOwordm9pZCBfX2RlYnVnYnJlYWsodm9pZCk7CitfX2ludDY0IF9fZW11bChpbnQsIGludCk7Cit1bnNpZ25lZCBfX2ludDY0IF9fZW11bHUodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwordm9pZCBfX2NkZWNsIF9fZmFzdGZhaWwodW5zaWduZWQgaW50KTsKK3Vuc2lnbmVkIGludCBfX2dldGNhbGxlcnNlZmxhZ3Modm9pZCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX2hhbHQodm9pZCk7Cit1bnNpZ25lZCBjaGFyIF9faW5ieXRlKHVuc2lnbmVkIHNob3J0KTsKK3ZvaWQgX19pbmJ5dGVzdHJpbmcodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIF9faW5jZnNieXRlKHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX2luY2ZzZHdvcmQodW5zaWduZWQgbG9uZyk7Cit2b2lkIF9faW5jZnN3b3JkKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgbG9uZyBfX2luZHdvcmQodW5zaWduZWQgc2hvcnQpOwordm9pZCBfX2luZHdvcmRzdHJpbmcodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIF9faW50MmModm9pZCk7Cit2b2lkIF9faW52bHBnKHZvaWQgKik7Cit1bnNpZ25lZCBzaG9ydCBfX2lud29yZCh1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIF9faW53b3Jkc3RyaW5nKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19saWR0KHZvaWQgKik7Cit1bnNpZ25lZCBfX2ludDY0IF9fbGxfbHNoaWZ0KHVuc2lnbmVkIF9faW50NjQsIGludCk7CitfX2ludDY0IF9fbGxfcnNoaWZ0KF9faW50NjQsIGludCk7Cit2b2lkIF9fbGx3cGNiKHZvaWQgKik7Cit1bnNpZ25lZCBjaGFyIF9fbHdwaW5zMzIodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit2b2lkIF9fbHdwdmFsMzIodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit1bnNpZ25lZCBpbnQgX19semNudCh1bnNpZ25lZCBpbnQpOwordW5zaWduZWQgc2hvcnQgX19semNudDE2KHVuc2lnbmVkIHNob3J0KTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9fbW92c2IodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICosIHNpemVfdCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX21vdnNkKHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyBjb25zdCAqLCBzaXplX3QpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19tb3Zzdyh1bnNpZ25lZCBzaG9ydCAqLCB1bnNpZ25lZCBzaG9ydCBjb25zdCAqLCBzaXplX3QpOwordm9pZCBfX25vcCh2b2lkKTsKK3ZvaWQgX19udnJlZ19yZXN0b3JlX2ZlbmNlKHZvaWQpOwordm9pZCBfX252cmVnX3NhdmVfZmVuY2Uodm9pZCk7Cit2b2lkIF9fb3V0Ynl0ZSh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgY2hhcik7Cit2b2lkIF9fb3V0Ynl0ZXN0cmluZyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19vdXRkd29yZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIF9fb3V0ZHdvcmRzdHJpbmcodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIF9fb3V0d29yZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwordm9pZCBfX291dHdvcmRzdHJpbmcodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0ICosIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGludCBfX3BvcGNudCh1bnNpZ25lZCBpbnQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIHNob3J0IF9fcG9wY250MTYodW5zaWduZWQgc2hvcnQpOwordW5zaWduZWQgbG9uZyBfX3JlYWRjcjAodm9pZCk7Cit1bnNpZ25lZCBsb25nIF9fcmVhZGNyMih2b2lkKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBsb25nIF9fcmVhZGNyMyh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgX19yZWFkY3I0KHZvaWQpOwordW5zaWduZWQgbG9uZyBfX3JlYWRjcjgodm9pZCk7Cit1bnNpZ25lZCBpbnQgX19yZWFkZHIodW5zaWduZWQgaW50KTsKKyNpZmRlZiBfX2kzODZfXworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX19yZWFkZnNieXRlKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGxvbmcgX19yZWFkZnNkd29yZCh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBfX2ludDY0IF9fcmVhZGZzcXdvcmQodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgc2hvcnQgX19yZWFkZnN3b3JkKHVuc2lnbmVkIGxvbmcpOworI2VuZGlmCitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgX19pbnQ2NCBfX3JlYWRtc3IodW5zaWduZWQgbG9uZyk7Cit1bnNpZ25lZCBfX2ludDY0IF9fcmVhZHBtYyh1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIGxvbmcgX19zZWdtZW50bGltaXQodW5zaWduZWQgbG9uZyk7Cit2b2lkIF9fc2lkdCh2b2lkICopOwordm9pZCAqX19zbHdwY2Iodm9pZCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX3N0b3NiKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciwgc2l6ZV90KTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9fc3Rvc2QodW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nLCBzaXplX3QpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19zdG9zdyh1bnNpZ25lZCBzaG9ydCAqLCB1bnNpZ25lZCBzaG9ydCwgc2l6ZV90KTsKK3ZvaWQgX19zdm1fY2xnaSh2b2lkKTsKK3ZvaWQgX19zdm1faW52bHBnYSh2b2lkICosIGludCk7Cit2b2lkIF9fc3ZtX3NraW5pdChpbnQpOwordm9pZCBfX3N2bV9zdGdpKHZvaWQpOwordm9pZCBfX3N2bV92bWxvYWQoc2l6ZV90KTsKK3ZvaWQgX19zdm1fdm1ydW4oc2l6ZV90KTsKK3ZvaWQgX19zdm1fdm1zYXZlKHNpemVfdCk7Cit2b2lkIF9fdWQyKHZvaWQpOwordW5zaWduZWQgX19pbnQ2NCBfX3VsbF9yc2hpZnQodW5zaWduZWQgX19pbnQ2NCwgaW50KTsKK3ZvaWQgX192bXhfb2ZmKHZvaWQpOwordm9pZCBfX3ZteF92bXB0cnN0KHVuc2lnbmVkIF9faW50NjQgKik7Cit2b2lkIF9fd2JpbnZkKHZvaWQpOwordm9pZCBfX3dyaXRlY3IwKHVuc2lnbmVkIGludCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX3dyaXRlY3IzKHVuc2lnbmVkIGludCk7Cit2b2lkIF9fd3JpdGVjcjQodW5zaWduZWQgaW50KTsKK3ZvaWQgX193cml0ZWNyOCh1bnNpZ25lZCBpbnQpOwordm9pZCBfX3dyaXRlZHIodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwordm9pZCBfX3dyaXRlZnNieXRlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIpOwordm9pZCBfX3dyaXRlZnNkd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX193cml0ZWZzcXdvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgX19pbnQ2NCk7Cit2b2lkIF9fd3JpdGVmc3dvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgc2hvcnQpOwordm9pZCBfX3dyaXRlbXNyKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIF9faW50NjQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgKl9BZGRyZXNzT2ZSZXR1cm5BZGRyZXNzKHZvaWQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5Gb3J3YXJkKHVuc2lnbmVkIGxvbmcgKl9JbmRleCwgdW5zaWduZWQgbG9uZyBfTWFzayk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfQml0U2NhblJldmVyc2UodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBsb25nIF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0KGxvbmcgY29uc3QgKiwgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfYml0dGVzdGFuZGNvbXBsZW1lbnQobG9uZyAqLCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kcmVzZXQobG9uZyAqLCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kc2V0KGxvbmcgKiwgbG9uZyk7Cit1bnNpZ25lZCBfX2ludDY0IF9fY2RlY2wgX2J5dGVzd2FwX3VpbnQ2NCh1bnNpZ25lZCBfX2ludDY0KTsKK3Vuc2lnbmVkIGxvbmcgX19jZGVjbCBfYnl0ZXN3YXBfdWxvbmcodW5zaWduZWQgbG9uZyk7Cit1bnNpZ25lZCBzaG9ydCBfX2NkZWNsIF9ieXRlc3dhcF91c2hvcnQodW5zaWduZWQgc2hvcnQpOwordm9pZCBfX2NkZWNsIF9kaXNhYmxlKHZvaWQpOwordm9pZCBfX2NkZWNsIF9lbmFibGUodm9pZCk7Citsb25nIF9JbnRlcmxvY2tlZEFkZExhcmdlU3RhdGlzdGljKF9faW50NjQgdm9sYXRpbGUgKl9BZGRlbmQsIGxvbmcgX1ZhbHVlKTsKK3N0YXRpYyBfX2lubGluZV9fCitsb25nIF9JbnRlcmxvY2tlZEFuZChsb25nIHZvbGF0aWxlICpfVmFsdWUsIGxvbmcgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK3Nob3J0IF9JbnRlcmxvY2tlZEFuZDE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCitjaGFyIF9JbnRlcmxvY2tlZEFuZDgoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKTsKK3Vuc2lnbmVkIGNoYXIgX2ludGVybG9ja2VkYml0dGVzdGFuZHJlc2V0KGxvbmcgdm9sYXRpbGUgKiwgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfaW50ZXJsb2NrZWRiaXR0ZXN0YW5kc2V0KGxvbmcgdm9sYXRpbGUgKiwgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXworbG9uZyBfX2NkZWNsIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZShsb25nIHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgX0V4Y2hhbmdlLCBsb25nIF9Db21wYXJhbmQpOworbG9uZyBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VfSExFQWNxdWlyZShsb25nIHZvbGF0aWxlICosIGxvbmcsIGxvbmcpOworbG9uZyBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VfSExFUmVsZWFzZShsb25nIHZvbGF0aWxlICosIGxvbmcsIGxvbmcpOworc3RhdGljIF9faW5saW5lX18KK3Nob3J0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTE2KHNob3J0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfRXhjaGFuZ2UsIHNob3J0IF9Db21wYXJhbmQpOworc3RhdGljIF9faW5saW5lX18KK19faW50NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjQoX19pbnQ2NCB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0IF9FeGNoYW5nZSwgX19pbnQ2NCBfQ29tcGFyYW5kKTsKK19faW50NjQgX0ludGVybG9ja2VkY29tcGFyZUV4Y2hhbmdlNjRfSExFQWNxdWlyZShfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCk7CitfX2ludDY0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0X0hMRVJlbGVhc2UoX19pbnQ2NCB2b2xhdGlsZSAqLCBfX2ludDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQpOworc3RhdGljIF9faW5saW5lX18KK2NoYXIgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlOChjaGFyIHZvbGF0aWxlICpfRGVzdGluYXRpb24sIGNoYXIgX0V4Y2hhbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX0NvbXBhcmFuZCk7Cit2b2lkICpfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyX0hMRUFjcXVpcmUodm9pZCAqdm9sYXRpbGUgKiwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7Cit2b2lkICpfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyX0hMRVJlbGVhc2Uodm9pZCAqdm9sYXRpbGUgKiwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7CitzdGF0aWMgX19pbmxpbmVfXworbG9uZyBfX2NkZWNsIF9JbnRlcmxvY2tlZERlY3JlbWVudChsb25nIHZvbGF0aWxlICpfQWRkZW5kKTsKK3N0YXRpYyBfX2lubGluZV9fCitzaG9ydCBfSW50ZXJsb2NrZWREZWNyZW1lbnQxNihzaG9ydCB2b2xhdGlsZSAqX0FkZGVuZCk7Citsb25nIF9JbnRlcmxvY2tlZEV4Y2hhbmdlKGxvbmcgdm9sYXRpbGUgKl9UYXJnZXQsIGxvbmcgX1ZhbHVlKTsKK3N0YXRpYyBfX2lubGluZV9fCitzaG9ydCBfSW50ZXJsb2NrZWRFeGNoYW5nZTE2KHNob3J0IHZvbGF0aWxlICpfVGFyZ2V0LCBzaG9ydCBfVmFsdWUpOworc3RhdGljIF9faW5saW5lX18KK2NoYXIgX0ludGVybG9ja2VkRXhjaGFuZ2U4KGNoYXIgdm9sYXRpbGUgKl9UYXJnZXQsIGNoYXIgX1ZhbHVlKTsKK3N0YXRpYyBfX2lubGluZV9fCitsb25nIF9fY2RlY2wgX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQobG9uZyB2b2xhdGlsZSAqX0FkZGVuZCwgbG9uZyBfVmFsdWUpOworbG9uZyBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZF9ITEVBY3F1aXJlKGxvbmcgdm9sYXRpbGUgKiwgbG9uZyk7Citsb25nIF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkX0hMRVJlbGVhc2UobG9uZyB2b2xhdGlsZSAqLCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCitzaG9ydCBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDE2KHNob3J0IHZvbGF0aWxlICpfQWRkZW5kLCBzaG9ydCBfVmFsdWUpOworX19pbnQ2NCBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDY0X0hMRUFjcXVpcmUoX19pbnQ2NCB2b2xhdGlsZSAqLCBfX2ludDY0KTsKK19faW50NjQgX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQ2NF9ITEVSZWxlYXNlKF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCk7CitzdGF0aWMgX19pbmxpbmVfXworY2hhciBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDgoY2hhciB2b2xhdGlsZSAqX0FkZGVuZCwgY2hhciBfVmFsdWUpOworc3RhdGljIF9faW5saW5lX18KK2xvbmcgX19jZGVjbCBfSW50ZXJsb2NrZWRJbmNyZW1lbnQobG9uZyB2b2xhdGlsZSAqX0FkZGVuZCk7CitzdGF0aWMgX19pbmxpbmVfXworc2hvcnQgX0ludGVybG9ja2VkSW5jcmVtZW50MTYoc2hvcnQgdm9sYXRpbGUgKl9BZGRlbmQpOworc3RhdGljIF9faW5saW5lX18KK2xvbmcgX0ludGVybG9ja2VkT3IobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCitzaG9ydCBfSW50ZXJsb2NrZWRPcjE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCitjaGFyIF9JbnRlcmxvY2tlZE9yOChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK2xvbmcgX0ludGVybG9ja2VkWG9yKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzayk7CitzdGF0aWMgX19pbmxpbmVfXworc2hvcnQgX0ludGVybG9ja2VkWG9yMTYoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK2NoYXIgX0ludGVybG9ja2VkWG9yOChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spOwordm9pZCBfX2NkZWNsIF9pbnZwY2lkKHVuc2lnbmVkIGludCwgdm9pZCAqKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBsb25nIF9fY2RlY2wgX2xyb3RsKHVuc2lnbmVkIGxvbmcsIGludCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgbG9uZyBfX2NkZWNsIF9scm90cih1bnNpZ25lZCBsb25nLCBpbnQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX1JlYWRCYXJyaWVyKHZvaWQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX1JlYWRXcml0ZUJhcnJpZXIodm9pZCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCAqX1JldHVybkFkZHJlc3Modm9pZCk7Cit1bnNpZ25lZCBpbnQgX3JvcnhfdTMyKHVuc2lnbmVkIGludCwgY29uc3QgdW5zaWduZWQgaW50KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBpbnQgX19jZGVjbCBfcm90bCh1bnNpZ25lZCBpbnQgX1ZhbHVlLCBpbnQgX1NoaWZ0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBzaG9ydCBfcm90bDE2KHVuc2lnbmVkIHNob3J0IF9WYWx1ZSwgdW5zaWduZWQgY2hhciBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIF9faW50NjQgX19jZGVjbCBfcm90bDY0KHVuc2lnbmVkIF9faW50NjQgX1ZhbHVlLCBpbnQgX1NoaWZ0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9yb3RsOCh1bnNpZ25lZCBjaGFyIF9WYWx1ZSwgdW5zaWduZWQgY2hhciBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGludCBfX2NkZWNsIF9yb3RyKHVuc2lnbmVkIGludCBfVmFsdWUsIGludCBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIHNob3J0IF9yb3RyMTYodW5zaWduZWQgc2hvcnQgX1ZhbHVlLCB1bnNpZ25lZCBjaGFyIF9TaGlmdCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgX19pbnQ2NCBfX2NkZWNsIF9yb3RyNjQodW5zaWduZWQgX19pbnQ2NCBfVmFsdWUsIGludCBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX3JvdHI4KHVuc2lnbmVkIGNoYXIgX1ZhbHVlLCB1bnNpZ25lZCBjaGFyIF9TaGlmdCk7CitpbnQgX3NhcnhfaTMyKGludCwgdW5zaWduZWQgaW50KTsKKyNpZiBfX1NURENfSE9TVEVEX18KK2ludCBfX2NkZWNsIF9zZXRqbXAoam1wX2J1Zik7CisjZW5kaWYKK3Vuc2lnbmVkIGludCBfc2hseF91MzIodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwordW5zaWduZWQgaW50IF9zaHJ4X3UzMih1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit2b2lkIF9TdG9yZV9ITEVSZWxlYXNlKGxvbmcgdm9sYXRpbGUgKiwgbG9uZyk7Cit2b2lkIF9TdG9yZTY0X0hMRVJlbGVhc2UoX19pbnQ2NCB2b2xhdGlsZSAqLCBfX2ludDY0KTsKK3ZvaWQgX1N0b3JlUG9pbnRlcl9ITEVSZWxlYXNlKHZvaWQgKnZvbGF0aWxlICosIHZvaWQgKik7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfV3JpdGVCYXJyaWVyKHZvaWQpOwordW5zaWduZWQgX19pbnQzMiB4YmVnaW4odm9pZCk7Cit2b2lkIF94ZW5kKHZvaWQpOworc3RhdGljIF9faW5saW5lX18KKyNkZWZpbmUgX1hDUl9YRkVBVFVSRV9FTkFCTEVEX01BU0sgMAordW5zaWduZWQgX19pbnQ2NCBfX2NkZWNsIF94Z2V0YnYodW5zaWduZWQgaW50KTsKK3ZvaWQgX19jZGVjbCBfeHNldGJ2KHVuc2lnbmVkIGludCwgdW5zaWduZWQgX19pbnQ2NCk7CisKKy8qIFRoZXNlIGFkZGl0aW9uYWwgaW50cmluc2ljcyBhcmUgdHVybmVkIG9uIGluIHg2NC9hbWQ2NC94ODZfNjQgbW9kZS4gKi8KKyNpZmRlZiBfX3g4Nl82NF9fCit2b2lkIF9fYWRkZ3NieXRlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIpOwordm9pZCBfX2FkZGdzZHdvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cit2b2lkIF9fYWRkZ3Nxd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBfX2ludDY0KTsKK3ZvaWQgX19hZGRnc3dvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgc2hvcnQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19mYXN0c3RvcmVmZW5jZSh2b2lkKTsKK3ZvaWQgX19pbmNnc2J5dGUodW5zaWduZWQgbG9uZyk7Cit2b2lkIF9faW5jZ3Nkd29yZCh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19pbmNnc3F3b3JkKHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX2luY2dzd29yZCh1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIGNoYXIgX19sd3BpbnM2NCh1bnNpZ25lZCBfX2ludDY0LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit2b2lkIF9fbHdwdmFsNjQodW5zaWduZWQgX19pbnQ2NCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwordW5zaWduZWQgX19pbnQ2NCBfX2x6Y250NjQodW5zaWduZWQgX19pbnQ2NCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX21vdnNxKHVuc2lnbmVkIGxvbmcgbG9uZyAqLCB1bnNpZ25lZCBsb25nIGxvbmcgY29uc3QgKiwgc2l6ZV90KTsKK19faW50NjQgX19tdWxoKF9faW50NjQsIF9faW50NjQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIF9faW50NjQgX19wb3BjbnQ2NCh1bnNpZ25lZCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9fcmVhZGdzYnl0ZSh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBsb25nIF9fcmVhZGdzZHdvcmQodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgX19pbnQ2NCBfX3JlYWRnc3F3b3JkKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgc2hvcnQgX19yZWFkZ3N3b3JkKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgX19pbnQ2NCBfX3NoaWZ0bGVmdDEyOCh1bnNpZ25lZCBfX2ludDY0IF9Mb3dQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX2ludDY0IF9IaWdoUGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfU2hpZnQpOwordW5zaWduZWQgX19pbnQ2NCBfX3NoaWZ0cmlnaHQxMjgodW5zaWduZWQgX19pbnQ2NCBfTG93UGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9faW50NjQgX0hpZ2hQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19zdG9zcSh1bnNpZ25lZCBfX2ludDY0ICosIHVuc2lnbmVkIF9faW50NjQsIHNpemVfdCk7Cit1bnNpZ25lZCBjaGFyIF9fdm14X29uKHVuc2lnbmVkIF9faW50NjQgKik7Cit1bnNpZ25lZCBjaGFyIF9fdm14X3ZtY2xlYXIodW5zaWduZWQgX19pbnQ2NCAqKTsKK3Vuc2lnbmVkIGNoYXIgX192bXhfdm1sYXVuY2godm9pZCk7Cit1bnNpZ25lZCBjaGFyIF9fdm14X3ZtcHRybGQodW5zaWduZWQgX19pbnQ2NCAqKTsKK3Vuc2lnbmVkIGNoYXIgX192bXhfdm1yZWFkKHNpemVfdCwgc2l6ZV90ICopOwordW5zaWduZWQgY2hhciBfX3ZteF92bXJlc3VtZSh2b2lkKTsKK3Vuc2lnbmVkIGNoYXIgX192bXhfdm13cml0ZShzaXplX3QsIHNpemVfdCk7Cit2b2lkIF9fd3JpdGVnc2J5dGUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhcik7Cit2b2lkIF9fd3JpdGVnc2R3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX3dyaXRlZ3Nxd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBfX2ludDY0KTsKK3ZvaWQgX193cml0ZWdzd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBzaG9ydCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfQml0U2NhbkZvcndhcmQ2NCh1bnNpZ25lZCBsb25nICpfSW5kZXgsIHVuc2lnbmVkIF9faW50NjQgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5SZXZlcnNlNjQodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBfX2ludDY0IF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0NjQoX19pbnQ2NCBjb25zdCAqLCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kY29tcGxlbWVudDY0KF9faW50NjQgKiwgX19pbnQ2NCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfYml0dGVzdGFuZHJlc2V0NjQoX19pbnQ2NCAqLCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kc2V0NjQoX19pbnQ2NCAqLCBfX2ludDY0KTsKK3Vuc2lnbmVkIF9faW50NjQgX19jZGVjbCBfYnl0ZXN3YXBfdWludDY0KHVuc2lnbmVkIF9faW50NjQpOworbG9uZyBfSW50ZXJsb2NrZWRBbmRfbnAobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKTsKK3Nob3J0IF9JbnRlcmxvY2tlZEFuZDE2X25wKHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKTsKK19faW50NjQgX0ludGVybG9ja2VkQW5kNjRfbnAoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlLCBfX2ludDY0IF9NYXNrKTsKK2NoYXIgX0ludGVybG9ja2VkQW5kOF9ucChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spOwordW5zaWduZWQgY2hhciBfaW50ZXJsb2NrZWRiaXR0ZXN0YW5kcmVzZXQ2NChfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX2ludGVybG9ja2VkYml0dGVzdGFuZHNldDY0KF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCk7Citsb25nIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZV9ucChsb25nIHZvbGF0aWxlICpfRGVzdGluYXRpb24sIGxvbmcgX0V4Y2hhbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfQ29tcGFyYW5kKTsKK3Vuc2lnbmVkIGNoYXIgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlMTI4KF9faW50NjQgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgX0V4Y2hhbmdlSGlnaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgX0V4Y2hhbmdlTG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCAqX0NvbXBhcmVhbmRSZXN1bHQpOwordW5zaWduZWQgY2hhciBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UxMjhfbnAoX19pbnQ2NCB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCBfRXhjaGFuZ2VIaWdoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCBfRXhjaGFuZ2VMb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0ICpfQ29tcGFyYW5kUmVzdWx0KTsKK3Nob3J0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTE2X25wKHNob3J0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfRXhjaGFuZ2UsIHNob3J0IF9Db21wYXJhbmQpOworX19pbnQ2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U2NF9ITEVBY3F1aXJlKF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0KTsKK19faW50NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjRfSExFUmVsZWFzZShfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCk7CitfX2ludDY0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0X25wKF9faW50NjQgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCBfRXhjaGFuZ2UsIF9faW50NjQgX0NvbXBhcmFuZCk7Cit2b2lkICpfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyKHZvaWQgKnZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9FeGNoYW5nZSwgdm9pZCAqX0NvbXBhcmFuZCk7Cit2b2lkICpfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyX25wKHZvaWQgKnZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9FeGNoYW5nZSwgdm9pZCAqX0NvbXBhcmFuZCk7CitzdGF0aWMgX19pbmxpbmVfXworX19pbnQ2NCBfSW50ZXJsb2NrZWREZWNyZW1lbnQ2NChfX2ludDY0IHZvbGF0aWxlICpfQWRkZW5kKTsKK3N0YXRpYyBfX2lubGluZV9fCitfX2ludDY0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlNjQoX19pbnQ2NCB2b2xhdGlsZSAqX1RhcmdldCwgX19pbnQ2NCBfVmFsdWUpOworc3RhdGljIF9faW5saW5lX18KK19faW50NjQgX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQ2NChfX2ludDY0IHZvbGF0aWxlICpfQWRkZW5kLCBfX2ludDY0IF9WYWx1ZSk7Cit2b2lkICpfSW50ZXJsb2NrZWRFeGNoYW5nZVBvaW50ZXIodm9pZCAqdm9sYXRpbGUgKl9UYXJnZXQsIHZvaWQgKl9WYWx1ZSk7CitzdGF0aWMgX19pbmxpbmVfXworX19pbnQ2NCBfSW50ZXJsb2NrZWRJbmNyZW1lbnQ2NChfX2ludDY0IHZvbGF0aWxlICpfQWRkZW5kKTsKK2xvbmcgX0ludGVybG9ja2VkT3JfbnAobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKTsKK3Nob3J0IF9JbnRlcmxvY2tlZE9yMTZfbnAoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK19faW50NjQgX0ludGVybG9ja2VkT3I2NChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spOworX19pbnQ2NCBfSW50ZXJsb2NrZWRPcjY0X25wKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzayk7CitjaGFyIF9JbnRlcmxvY2tlZE9yOF9ucChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spOworbG9uZyBfSW50ZXJsb2NrZWRYb3JfbnAobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKTsKK3Nob3J0IF9JbnRlcmxvY2tlZFhvcjE2X25wKHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCitfX2ludDY0IF9JbnRlcmxvY2tlZFhvcjY0KF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzayk7CitfX2ludDY0IF9JbnRlcmxvY2tlZFhvcjY0X25wKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzayk7CitjaGFyIF9JbnRlcmxvY2tlZFhvcjhfbnAoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCitfX2ludDY0IF9tdWwxMjgoX19pbnQ2NCBfTXVsdGlwbGllciwgX19pbnQ2NCBfTXVsdGlwbGljYW5kLAorICAgICAgICAgICAgICAgIF9faW50NjQgKl9IaWdoUHJvZHVjdCk7Cit1bnNpZ25lZCBfX2ludDY0IF9yb3J4X3U2NCh1bnNpZ25lZCBfX2ludDY0LCBjb25zdCB1bnNpZ25lZCBpbnQpOworX19pbnQ2NCBfc2FyeF9pNjQoX19pbnQ2NCwgdW5zaWduZWQgaW50KTsKKyNpZiBfX1NURENfSE9TVEVEX18KK2ludCBfX2NkZWNsIF9zZXRqbXBleChqbXBfYnVmKTsKKyNlbmRpZgordW5zaWduZWQgX19pbnQ2NCBfc2hseF91NjQodW5zaWduZWQgX19pbnQ2NCwgdW5zaWduZWQgaW50KTsKK3Vuc2lnbmVkIF9faW50NjQgX3NocnhfdTY0KHVuc2lnbmVkIF9faW50NjQsIHVuc2lnbmVkIGludCk7CisvKgorICogTXVsdGlwbHkgdHdvIDY0LWJpdCBpbnRlZ2VycyBhbmQgb2J0YWluIGEgNjQtYml0IHJlc3VsdC4KKyAqIFRoZSBsb3ctaGFsZiBpcyByZXR1cm5lZCBkaXJlY3RseSBhbmQgdGhlIGhpZ2ggaGFsZiBpcyBpbiBhbiBvdXQgcGFyYW1ldGVyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX3VtdWwxMjgodW5zaWduZWQgX19pbnQ2NCBfTXVsdGlwbGllciwgdW5zaWduZWQgX19pbnQ2NCBfTXVsdGlwbGljYW5kLAorICAgICAgICAgdW5zaWduZWQgX19pbnQ2NCAqX0hpZ2hQcm9kdWN0KSB7CisgIHVuc2lnbmVkIF9faW50MTI4IF9GdWxsUHJvZHVjdCA9CisgICAgICAodW5zaWduZWQgX19pbnQxMjgpX011bHRpcGxpZXIgKiAodW5zaWduZWQgX19pbnQxMjgpX011bHRpcGxpY2FuZDsKKyAgKl9IaWdoUHJvZHVjdCA9IF9GdWxsUHJvZHVjdCA+PiA2NDsKKyAgcmV0dXJuIF9GdWxsUHJvZHVjdDsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3VtdWxoKHVuc2lnbmVkIF9faW50NjQgX011bHRpcGxpZXIsIHVuc2lnbmVkIF9faW50NjQgX011bHRpcGxpY2FuZCkgeworICB1bnNpZ25lZCBfX2ludDEyOCBfRnVsbFByb2R1Y3QgPQorICAgICAgKHVuc2lnbmVkIF9faW50MTI4KV9NdWx0aXBsaWVyICogKHVuc2lnbmVkIF9faW50MTI4KV9NdWx0aXBsaWNhbmQ7CisgIHJldHVybiBfRnVsbFByb2R1Y3QgPj4gNjQ7Cit9CisKKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBNdWx0aXBsaWNhdGlvbgorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2VtdWwoaW50IF9faW4xLCBpbnQgX19pbjIpIHsKKyAgcmV0dXJuIChfX2ludDY0KV9faW4xICogKF9faW50NjQpX19pbjI7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX19lbXVsdSh1bnNpZ25lZCBpbnQgX19pbjEsIHVuc2lnbmVkIGludCBfX2luMikgeworICByZXR1cm4gKHVuc2lnbmVkIF9faW50NjQpX19pbjEgKiAodW5zaWduZWQgX19pbnQ2NClfX2luMjsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBCaXQgVHdpZGRsaW5nCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19yb3RsOCh1bnNpZ25lZCBjaGFyIF9WYWx1ZSwgdW5zaWduZWQgY2hhciBfU2hpZnQpIHsKKyAgX1NoaWZ0ICY9IDB4NzsKKyAgcmV0dXJuIF9TaGlmdCA/IChfVmFsdWUgPDwgX1NoaWZ0KSB8IChfVmFsdWUgPj4gKDggLSBfU2hpZnQpKSA6IF9WYWx1ZTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfcm90cjgodW5zaWduZWQgY2hhciBfVmFsdWUsIHVuc2lnbmVkIGNoYXIgX1NoaWZ0KSB7CisgIF9TaGlmdCAmPSAweDc7CisgIHJldHVybiBfU2hpZnQgPyAoX1ZhbHVlID4+IF9TaGlmdCkgfCAoX1ZhbHVlIDw8ICg4IC0gX1NoaWZ0KSkgOiBfVmFsdWU7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19yb3RsMTYodW5zaWduZWQgc2hvcnQgX1ZhbHVlLCB1bnNpZ25lZCBjaGFyIF9TaGlmdCkgeworICBfU2hpZnQgJj0gMHhmOworICByZXR1cm4gX1NoaWZ0ID8gKF9WYWx1ZSA8PCBfU2hpZnQpIHwgKF9WYWx1ZSA+PiAoMTYgLSBfU2hpZnQpKSA6IF9WYWx1ZTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX3JvdHIxNih1bnNpZ25lZCBzaG9ydCBfVmFsdWUsIHVuc2lnbmVkIGNoYXIgX1NoaWZ0KSB7CisgIF9TaGlmdCAmPSAweGY7CisgIHJldHVybiBfU2hpZnQgPyAoX1ZhbHVlID4+IF9TaGlmdCkgfCAoX1ZhbHVlIDw8ICgxNiAtIF9TaGlmdCkpIDogX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX3JvdGwodW5zaWduZWQgaW50IF9WYWx1ZSwgaW50IF9TaGlmdCkgeworICBfU2hpZnQgJj0gMHgxZjsKKyAgcmV0dXJuIF9TaGlmdCA/IChfVmFsdWUgPDwgX1NoaWZ0KSB8IChfVmFsdWUgPj4gKDMyIC0gX1NoaWZ0KSkgOiBfVmFsdWU7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcm90cih1bnNpZ25lZCBpbnQgX1ZhbHVlLCBpbnQgX1NoaWZ0KSB7CisgIF9TaGlmdCAmPSAweDFmOworICByZXR1cm4gX1NoaWZ0ID8gKF9WYWx1ZSA+PiBfU2hpZnQpIHwgKF9WYWx1ZSA8PCAoMzIgLSBfU2hpZnQpKSA6IF9WYWx1ZTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbHJvdGwodW5zaWduZWQgbG9uZyBfVmFsdWUsIGludCBfU2hpZnQpIHsKKyAgX1NoaWZ0ICY9IDB4MWY7CisgIHJldHVybiBfU2hpZnQgPyAoX1ZhbHVlIDw8IF9TaGlmdCkgfCAoX1ZhbHVlID4+ICgzMiAtIF9TaGlmdCkpIDogX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19scm90cih1bnNpZ25lZCBsb25nIF9WYWx1ZSwgaW50IF9TaGlmdCkgeworICBfU2hpZnQgJj0gMHgxZjsKKyAgcmV0dXJuIF9TaGlmdCA/IChfVmFsdWUgPj4gX1NoaWZ0KSB8IChfVmFsdWUgPDwgKDMyIC0gX1NoaWZ0KSkgOiBfVmFsdWU7Cit9CitzdGF0aWMKK19faW5saW5lX18gdW5zaWduZWQgX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19yb3RsNjQodW5zaWduZWQgX19pbnQ2NCBfVmFsdWUsIGludCBfU2hpZnQpIHsKKyAgX1NoaWZ0ICY9IDB4M2Y7CisgIHJldHVybiBfU2hpZnQgPyAoX1ZhbHVlIDw8IF9TaGlmdCkgfCAoX1ZhbHVlID4+ICg2NCAtIF9TaGlmdCkpIDogX1ZhbHVlOworfQorc3RhdGljCitfX2lubGluZV9fIHVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcm90cjY0KHVuc2lnbmVkIF9faW50NjQgX1ZhbHVlLCBpbnQgX1NoaWZ0KSB7CisgIF9TaGlmdCAmPSAweDNmOworICByZXR1cm4gX1NoaWZ0ID8gKF9WYWx1ZSA+PiBfU2hpZnQpIHwgKF9WYWx1ZSA8PCAoNjQgLSBfU2hpZnQpKSA6IF9WYWx1ZTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBCaXQgQ291bnRpbmcgYW5kIFRlc3RpbmcKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0JpdFNjYW5Gb3J3YXJkKHVuc2lnbmVkIGxvbmcgKl9JbmRleCwgdW5zaWduZWQgbG9uZyBfTWFzaykgeworICBpZiAoIV9NYXNrKQorICAgIHJldHVybiAwOworICAqX0luZGV4ID0gX19idWlsdGluX2N0emwoX01hc2spOworICByZXR1cm4gMTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfQml0U2NhblJldmVyc2UodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBsb25nIF9NYXNrKSB7CisgIGlmICghX01hc2spCisgICAgcmV0dXJuIDA7CisgICpfSW5kZXggPSAzMSAtIF9fYnVpbHRpbl9jbHpsKF9NYXNrKTsKKyAgcmV0dXJuIDE7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fcG9wY250MTYodW5zaWduZWQgc2hvcnQgX1ZhbHVlKSB7CisgIHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQoKGludClfVmFsdWUpOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19wb3BjbnQodW5zaWduZWQgaW50IF9WYWx1ZSkgeworICByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KF9WYWx1ZSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2JpdHRlc3QobG9uZyBjb25zdCAqX0JpdEJhc2UsIGxvbmcgX0JpdFBvcykgeworICByZXR1cm4gKCpfQml0QmFzZSA+PiBfQml0UG9zKSAmIDE7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2JpdHRlc3RhbmRjb21wbGVtZW50KGxvbmcgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKKyAgdW5zaWduZWQgY2hhciBfUmVzID0gKCpfQml0QmFzZSA+PiBfQml0UG9zKSAmIDE7CisgICpfQml0QmFzZSA9ICpfQml0QmFzZSBeICgxIDw8IF9CaXRQb3MpOworICByZXR1cm4gX1JlczsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfYml0dGVzdGFuZHJlc2V0KGxvbmcgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKKyAgdW5zaWduZWQgY2hhciBfUmVzID0gKCpfQml0QmFzZSA+PiBfQml0UG9zKSAmIDE7CisgICpfQml0QmFzZSA9ICpfQml0QmFzZSAmIH4oMSA8PCBfQml0UG9zKTsKKyAgcmV0dXJuIF9SZXM7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2JpdHRlc3RhbmRzZXQobG9uZyAqX0JpdEJhc2UsIGxvbmcgX0JpdFBvcykgeworICB1bnNpZ25lZCBjaGFyIF9SZXMgPSAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKKyAgKl9CaXRCYXNlID0gKl9CaXRCYXNlIHwgKDEgPDwgX0JpdFBvcyk7CisgIHJldHVybiBfUmVzOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19pbnRlcmxvY2tlZGJpdHRlc3RhbmRzZXQobG9uZyB2b2xhdGlsZSAqX0JpdEJhc2UsIGxvbmcgX0JpdFBvcykgeworICBsb25nIF9QcmV2VmFsID0gX19hdG9taWNfZmV0Y2hfb3IoX0JpdEJhc2UsIDFsIDw8IF9CaXRQb3MsIF9fQVRPTUlDX1NFUV9DU1QpOworICByZXR1cm4gKF9QcmV2VmFsID4+IF9CaXRQb3MpICYgMTsKK30KKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0JpdFNjYW5Gb3J3YXJkNjQodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBfX2ludDY0IF9NYXNrKSB7CisgIGlmICghX01hc2spCisgICAgcmV0dXJuIDA7CisgICpfSW5kZXggPSBfX2J1aWx0aW5fY3R6bGwoX01hc2spOworICByZXR1cm4gMTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfQml0U2NhblJldmVyc2U2NCh1bnNpZ25lZCBsb25nICpfSW5kZXgsIHVuc2lnbmVkIF9faW50NjQgX01hc2spIHsKKyAgaWYgKCFfTWFzaykKKyAgICByZXR1cm4gMDsKKyAgKl9JbmRleCA9IDYzIC0gX19idWlsdGluX2NsemxsKF9NYXNrKTsKKyAgcmV0dXJuIDE7Cit9CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fcG9wY250NjQodW5zaWduZWQgX19pbnQ2NCBfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKF9WYWx1ZSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2JpdHRlc3Q2NChfX2ludDY0IGNvbnN0ICpfQml0QmFzZSwgX19pbnQ2NCBfQml0UG9zKSB7CisgIHJldHVybiAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfYml0dGVzdGFuZGNvbXBsZW1lbnQ2NChfX2ludDY0ICpfQml0QmFzZSwgX19pbnQ2NCBfQml0UG9zKSB7CisgIHVuc2lnbmVkIGNoYXIgX1JlcyA9ICgqX0JpdEJhc2UgPj4gX0JpdFBvcykgJiAxOworICAqX0JpdEJhc2UgPSAqX0JpdEJhc2UgXiAoMWxsIDw8IF9CaXRQb3MpOworICByZXR1cm4gX1JlczsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfYml0dGVzdGFuZHJlc2V0NjQoX19pbnQ2NCAqX0JpdEJhc2UsIF9faW50NjQgX0JpdFBvcykgeworICB1bnNpZ25lZCBjaGFyIF9SZXMgPSAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKKyAgKl9CaXRCYXNlID0gKl9CaXRCYXNlICYgfigxbGwgPDwgX0JpdFBvcyk7CisgIHJldHVybiBfUmVzOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19iaXR0ZXN0YW5kc2V0NjQoX19pbnQ2NCAqX0JpdEJhc2UsIF9faW50NjQgX0JpdFBvcykgeworICB1bnNpZ25lZCBjaGFyIF9SZXMgPSAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKKyAgKl9CaXRCYXNlID0gKl9CaXRCYXNlIHwgKDFsbCA8PCBfQml0UG9zKTsKKyAgcmV0dXJuIF9SZXM7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2ludGVybG9ja2VkYml0dGVzdGFuZHNldDY0KF9faW50NjQgdm9sYXRpbGUgKl9CaXRCYXNlLCBfX2ludDY0IF9CaXRQb3MpIHsKKyAgbG9uZyBsb25nIF9QcmV2VmFsID0KKyAgICAgIF9fYXRvbWljX2ZldGNoX29yKF9CaXRCYXNlLCAxbGwgPDwgX0JpdFBvcywgX19BVE9NSUNfU0VRX0NTVCk7CisgIHJldHVybiAoX1ByZXZWYWwgPj4gX0JpdFBvcykgJiAxOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogSW50ZXJsb2NrZWQgRXhjaGFuZ2UgQWRkCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkOChjaGFyIHZvbGF0aWxlICpfQWRkZW5kLCBjaGFyIF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYWRkKF9BZGRlbmQsIF9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkMTYoc2hvcnQgdm9sYXRpbGUgKl9BZGRlbmQsIHNob3J0IF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYWRkKF9BZGRlbmQsIF9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkNjQoX19pbnQ2NCB2b2xhdGlsZSAqX0FkZGVuZCwgX19pbnQ2NCBfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FkZChfQWRkZW5kLCBfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogSW50ZXJsb2NrZWQgRXhjaGFuZ2UgU3ViCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlU3ViOChjaGFyIHZvbGF0aWxlICpfU3ViZW5kLCBjaGFyIF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfc3ViKF9TdWJlbmQsIF9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlU3ViMTYoc2hvcnQgdm9sYXRpbGUgKl9TdWJlbmQsIHNob3J0IF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfc3ViKF9TdWJlbmQsIF9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRXhjaGFuZ2VTdWIobG9uZyB2b2xhdGlsZSAqX1N1YmVuZCwgbG9uZyBfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX3N1YihfU3ViZW5kLCBfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZVN1YjY0KF9faW50NjQgdm9sYXRpbGUgKl9TdWJlbmQsIF9faW50NjQgX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9zdWIoX1N1YmVuZCwgX1ZhbHVlLCBfX0FUT01JQ19TRVFfQ1NUKTsKK30KKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKK3wqIEludGVybG9ja2VkIEluY3JlbWVudAorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkSW5jcmVtZW50MTYoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfYWRkX2ZldGNoKF9WYWx1ZSwgMSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEluY3JlbWVudDY0KF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfYWRkX2ZldGNoKF9WYWx1ZSwgMSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBJbnRlcmxvY2tlZCBEZWNyZW1lbnQKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZERlY3JlbWVudDE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX3N1Yl9mZXRjaChfVmFsdWUsIDEsIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWREZWNyZW1lbnQ2NChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX3N1Yl9mZXRjaChfVmFsdWUsIDEsIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogSW50ZXJsb2NrZWQgQW5kCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEFuZDgoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hbmQoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEFuZDE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hbmQoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkQW5kKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYW5kKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRBbmQ2NChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FuZChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKK30KKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKK3wqIEludGVybG9ja2VkIE9yCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZE9yOChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX29yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRPcjE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9vcihfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRPcihsb25nIHZvbGF0aWxlICpfVmFsdWUsIGxvbmcgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX29yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRPcjY0KF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfb3IoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBJbnRlcmxvY2tlZCBYb3IKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgX19pbmxpbmVfXyBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkWG9yOChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX3hvcihfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkWG9yMTYoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX3hvcihfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRYb3IobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF94b3IoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZFhvcjY0KF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfeG9yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogSW50ZXJsb2NrZWQgRXhjaGFuZ2UKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgX19pbmxpbmVfXyBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRXhjaGFuZ2U4KGNoYXIgdm9sYXRpbGUgKl9UYXJnZXQsIGNoYXIgX1ZhbHVlKSB7CisgIF9fYXRvbWljX2V4Y2hhbmdlKF9UYXJnZXQsICZfVmFsdWUsICZfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOworICByZXR1cm4gX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZTE2KHNob3J0IHZvbGF0aWxlICpfVGFyZ2V0LCBzaG9ydCBfVmFsdWUpIHsKKyAgX19hdG9taWNfZXhjaGFuZ2UoX1RhcmdldCwgJl9WYWx1ZSwgJl9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7CisgIHJldHVybiBfVmFsdWU7Cit9CisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlNjQoX19pbnQ2NCB2b2xhdGlsZSAqX1RhcmdldCwgX19pbnQ2NCBfVmFsdWUpIHsKKyAgX19hdG9taWNfZXhjaGFuZ2UoX1RhcmdldCwgJl9WYWx1ZSwgJl9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7CisgIHJldHVybiBfVmFsdWU7Cit9CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBJbnRlcmxvY2tlZCBDb21wYXJlIEV4Y2hhbmdlCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTgoY2hhciB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9FeGNoYW5nZSwgY2hhciBfQ29tcGFyYW5kKSB7CisgIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoX0Rlc3RpbmF0aW9uLCAmX0NvbXBhcmFuZCwgJl9FeGNoYW5nZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19TRVFfQ1NUKTsKKyAgcmV0dXJuIF9Db21wYXJhbmQ7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTE2KHNob3J0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfRXhjaGFuZ2UsIHNob3J0IF9Db21wYXJhbmQpIHsKKyAgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZShfRGVzdGluYXRpb24sICZfQ29tcGFyYW5kLCAmX0V4Y2hhbmdlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQVRPTUlDX1NFUV9DU1QsIF9fQVRPTUlDX1NFUV9DU1QpOworICByZXR1cm4gX0NvbXBhcmFuZDsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U2NChfX2ludDY0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0IF9FeGNoYW5nZSwgX19pbnQ2NCBfQ29tcGFyYW5kKSB7CisgIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoX0Rlc3RpbmF0aW9uLCAmX0NvbXBhcmFuZCwgJl9FeGNoYW5nZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19TRVFfQ1NUKTsKKyAgcmV0dXJuIF9Db21wYXJhbmQ7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogQmFycmllcnMKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBvdGhlciBpbnRyaW5zaWNzIG9yIEMrKzExIGF0b21pY3MgaW5zdGVhZCIpKSkKK19SZWFkV3JpdGVCYXJyaWVyKHZvaWQpIHsKKyAgX19hdG9taWNfc2lnbmFsX2ZlbmNlKF9fQVRPTUlDX1NFUV9DU1QpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2Ugb3RoZXIgaW50cmluc2ljcyBvciBDKysxMSBhdG9taWNzIGluc3RlYWQiKSkpCitfUmVhZEJhcnJpZXIodm9pZCkgeworICBfX2F0b21pY19zaWduYWxfZmVuY2UoX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBvdGhlciBpbnRyaW5zaWNzIG9yIEMrKzExIGF0b21pY3MgaW5zdGVhZCIpKSkKK19Xcml0ZUJhcnJpZXIodm9pZCkgeworICBfX2F0b21pY19zaWduYWxfZmVuY2UoX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fZmFzdHN0b3JlZmVuY2Uodm9pZCkgeworICBfX2F0b21pY190aHJlYWRfZmVuY2UoX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiByZWFkZnMsIHJlYWRncworfCogKFBvaW50ZXJzIGluIGFkZHJlc3Mgc3BhY2UgIzI1NiBhbmQgIzI1NyBhcmUgcmVsYXRpdmUgdG8gdGhlIEdTIGFuZCBGUworfCogc2VnbWVudCByZWdpc3RlcnMsIHJlc3BlY3RpdmVseS4pCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBfX3B0cl90b19hZGRyX3NwYWNlKF9fYWRkcl9zcGFjZV9uYnIsIF9fdHlwZSwgX19vZmZzZXQpICAgICAgICAgICAgICBcCisgICAgKCh2b2xhdGlsZSBfX3R5cGUgX19hdHRyaWJ1dGVfXygoX19hZGRyZXNzX3NwYWNlX18oX19hZGRyX3NwYWNlX25icikpKSopIFwKKyAgICAoX19vZmZzZXQpKQorCisjaWZkZWYgX19pMzg2X18KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRmc2J5dGUodW5zaWduZWQgbG9uZyBfX29mZnNldCkgeworICByZXR1cm4gKl9fcHRyX3RvX2FkZHJfc3BhY2UoMjU3LCB1bnNpZ25lZCBjaGFyLCBfX29mZnNldCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fcmVhZGZzd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7CisgIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTcsIHVuc2lnbmVkIHNob3J0LCBfX29mZnNldCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX19yZWFkZnNxd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7CisgIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTcsIHVuc2lnbmVkIF9faW50NjQsIF9fb2Zmc2V0KTsKK30KKyNlbmRpZgorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRnc2J5dGUodW5zaWduZWQgbG9uZyBfX29mZnNldCkgeworICByZXR1cm4gKl9fcHRyX3RvX2FkZHJfc3BhY2UoMjU2LCB1bnNpZ25lZCBjaGFyLCBfX29mZnNldCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fcmVhZGdzd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7CisgIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTYsIHVuc2lnbmVkIHNob3J0LCBfX29mZnNldCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19yZWFkZ3Nkd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7CisgIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTYsIHVuc2lnbmVkIGxvbmcsIF9fb2Zmc2V0KTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRnc3F3b3JkKHVuc2lnbmVkIGxvbmcgX19vZmZzZXQpIHsKKyAgcmV0dXJuICpfX3B0cl90b19hZGRyX3NwYWNlKDI1NiwgdW5zaWduZWQgX19pbnQ2NCwgX19vZmZzZXQpOworfQorI2VuZGlmCisjdW5kZWYgX19wdHJfdG9fYWRkcl9zcGFjZQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKK3wqIG1vdnMsIHN0b3MKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fbW92c2IodW5zaWduZWQgY2hhciAqX19kc3QsIHVuc2lnbmVkIGNoYXIgY29uc3QgKl9fc3JjLCBzaXplX3QgX19uKSB7CisgIF9fYXNtX18oInJlcCBtb3ZzYiIgOiA6ICJEIihfX2RzdCksICJTIihfX3NyYyksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlc2kiLCAiJWVjeCIpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fbW92c2QodW5zaWduZWQgbG9uZyAqX19kc3QsIHVuc2lnbmVkIGxvbmcgY29uc3QgKl9fc3JjLCBzaXplX3QgX19uKSB7CisgIF9fYXNtX18oInJlcCBtb3ZzbCIgOiA6ICJEIihfX2RzdCksICJTIihfX3NyYyksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlc2kiLCAiJWVjeCIpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fbW92c3codW5zaWduZWQgc2hvcnQgKl9fZHN0LCB1bnNpZ25lZCBzaG9ydCBjb25zdCAqX19zcmMsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIG1vdnN3IiA6IDogIkQiKF9fZHN0KSwgIlMiKF9fc3JjKSwgImMiKF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIiVlZGkiLCAiJWVzaSIsICIlZWN4Iik7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19zdG9zYih1bnNpZ25lZCBjaGFyICpfX2RzdCwgdW5zaWduZWQgY2hhciBfX3gsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIHN0b3NiIiA6IDogIkQiKF9fZHN0KSwgImEiKF9feCksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlY3giKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3N0b3NkKHVuc2lnbmVkIGxvbmcgKl9fZHN0LCB1bnNpZ25lZCBsb25nIF9feCwgc2l6ZV90IF9fbikgeworICBfX2FzbV9fKCJyZXAgc3Rvc2wiIDogOiAiRCIoX19kc3QpLCAiYSIoX194KSwgImMiKF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIiVlZGkiLCAiJWVjeCIpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fc3Rvc3codW5zaWduZWQgc2hvcnQgKl9fZHN0LCB1bnNpZ25lZCBzaG9ydCBfX3gsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIHN0b3N3IiA6IDogIkQiKF9fZHN0KSwgImEiKF9feCksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlY3giKTsKK30KKyNlbmRpZgorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX21vdnNxKHVuc2lnbmVkIGxvbmcgbG9uZyAqX19kc3QsIHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdCAqX19zcmMsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIG1vdnNxIiA6IDogIkQiKF9fZHN0KSwgIlMiKF9fc3JjKSwgImMiKF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIiVlZGkiLCAiJWVzaSIsICIlZWN4Iik7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19zdG9zcSh1bnNpZ25lZCBfX2ludDY0ICpfX2RzdCwgdW5zaWduZWQgX19pbnQ2NCBfX3gsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIHN0b3NxIiA6IDogIkQiKF9fZHN0KSwgImEiKF9feCksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlY3giKTsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogTWlzYworXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgKiBfX0RFRkFVTFRfRk5fQVRUUlMKK19BZGRyZXNzT2ZSZXR1cm5BZGRyZXNzKHZvaWQpIHsKKyAgcmV0dXJuICh2b2lkKikoKGNoYXIqKV9fYnVpbHRpbl9mcmFtZV9hZGRyZXNzKDApICsgc2l6ZW9mKHZvaWQqKSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkICogX19ERUZBVUxUX0ZOX0FUVFJTCitfUmV0dXJuQWRkcmVzcyh2b2lkKSB7CisgIHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7Cit9CisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fY3B1aWQoaW50IF9faW5mb1s0XSwgaW50IF9fbGV2ZWwpIHsKKyAgX19hc21fXyAoImNwdWlkIiA6ICI9YSIoX19pbmZvWzBdKSwgIj1iIiAoX19pbmZvWzFdKSwgIj1jIihfX2luZm9bMl0pLCAiPWQiKF9faW5mb1szXSkKKyAgICAgICAgICAgICAgICAgICA6ICJhIihfX2xldmVsKSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19jcHVpZGV4KGludCBfX2luZm9bNF0sIGludCBfX2xldmVsLCBpbnQgX19lY3gpIHsKKyAgX19hc21fXyAoImNwdWlkIiA6ICI9YSIoX19pbmZvWzBdKSwgIj1iIiAoX19pbmZvWzFdKSwgIj1jIihfX2luZm9bMl0pLCAiPWQiKF9faW5mb1szXSkKKyAgICAgICAgICAgICAgICAgICA6ICJhIihfX2xldmVsKSwgImMiKF9fZWN4KSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fY2RlY2wgX19ERUZBVUxUX0ZOX0FUVFJTCitfeGdldGJ2KHVuc2lnbmVkIGludCBfX3hjcl9ubykgeworICB1bnNpZ25lZCBpbnQgX19lYXgsIF9fZWR4OworICBfX2FzbV9fICgieGdldGJ2IiA6ICI9YSIgKF9fZWF4KSwgIj1kIiAoX19lZHgpIDogImMiIChfX3hjcl9ubykpOworICByZXR1cm4gKCh1bnNpZ25lZCBfX2ludDY0KV9fZWR4IDw8IDMyKSB8IF9fZWF4OworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19faGFsdCh2b2lkKSB7CisgIF9fYXNtX18gdm9sYXRpbGUgKCJobHQiKTsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogUHJpdmlsZWdlZCBpbnRyaW5zaWNzCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRtc3IodW5zaWduZWQgbG9uZyBfX3JlZ2lzdGVyKSB7CisgIC8vIExvYWRzIHRoZSBjb250ZW50cyBvZiBhIDY0LWJpdCBtb2RlbCBzcGVjaWZpYyByZWdpc3RlciAoTVNSKSBzcGVjaWZpZWQgaW4KKyAgLy8gdGhlIEVDWCByZWdpc3RlciBpbnRvIHJlZ2lzdGVycyBFRFg6RUFYLiBUaGUgRURYIHJlZ2lzdGVyIGlzIGxvYWRlZCB3aXRoCisgIC8vIHRoZSBoaWdoLW9yZGVyIDMyIGJpdHMgb2YgdGhlIE1TUiBhbmQgdGhlIEVBWCByZWdpc3RlciBpcyBsb2FkZWQgd2l0aCB0aGUKKyAgLy8gbG93LW9yZGVyIDMyIGJpdHMuIElmIGxlc3MgdGhhbiA2NCBiaXRzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgTVNSIGJlaW5nCisgIC8vIHJlYWQsIHRoZSB2YWx1ZXMgcmV0dXJuZWQgdG8gRURYOkVBWCBpbiB1bmltcGxlbWVudGVkIGJpdCBsb2NhdGlvbnMgYXJlCisgIC8vIHVuZGVmaW5lZC4KKyAgdW5zaWduZWQgbG9uZyBfX2VkeDsKKyAgdW5zaWduZWQgbG9uZyBfX2VheDsKKyAgX19hc21fXyAoInJkbXNyIiA6ICI9ZCIoX19lZHgpLCAiPWEiKF9fZWF4KSA6ICJjIihfX3JlZ2lzdGVyKSk7CisgIHJldHVybiAoKCh1bnNpZ25lZCBfX2ludDY0KV9fZWR4KSA8PCAzMikgfCAodW5zaWduZWQgX19pbnQ2NClfX2VheDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fcmVhZGNyMyh2b2lkKSB7CisgIHVuc2lnbmVkIGxvbmcgX19jcjNfdmFsOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdiAlJWNyMywgJTAiIDogIj1xIihfX2NyM192YWwpIDogOiAibWVtb3J5Iik7CisgIHJldHVybiBfX2NyM192YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3dyaXRlY3IzKHVuc2lnbmVkIGludCBfX2NyM192YWwpIHsKKyAgX19hc21fXyAoIm1vdiAlMCwgJSVjcjMiIDogOiAicSIoX19jcjNfdmFsKSA6ICJtZW1vcnkiKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0lOVFJJTl9IICovCisjZW5kaWYgLyogX01TQ19WRVIgKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaW50dHlwZXMuaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaW50dHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDhlYWJhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pbnR0eXBlcy5oCkBAIC0wLDAgKzEsMTA2IEBACisvKj09PS0tLS0gaW50dHlwZXMuaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgaW50ZWdlciBwcmludGYgbWFjcm9zIC0tLS0tLS0tLS09PT0qXAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCitcKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLworCisjaWZuZGVmIF9fQ0xBTkdfSU5UVFlQRVNfSAorI2RlZmluZSBfX0NMQU5HX0lOVFRZUEVTX0gKKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTgwMAorI2Vycm9yIE1TVkMgZG9lcyBub3QgaGF2ZSBpbnR0eXBlcy5oIHByaW9yIHRvIFZpc3VhbCBTdHVkaW8gMjAxMworI2VuZGlmCisKKyNpbmNsdWRlX25leHQgPGludHR5cGVzLmg+CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE5MDAKKy8qIE1TVkMgaGVhZGVycyBkZWZpbmUgaW50MzJfdCBhcyBpbnQsIGJ1dCBQUkl4MzIgYXMgImx4IiBpbnN0ZWFkIG9mICJ4Ii4KKyAqIFRoaXMgdHJpZ2dlcnMgZm9ybWF0IHdhcm5pbmdzLCBzbyBmaXggaXQgdXAgaGVyZS4gKi8KKyN1bmRlZiBQUklkMzIKKyN1bmRlZiBQUklkTEVBU1QzMgorI3VuZGVmIFBSSWRGQVNUMzIKKyN1bmRlZiBQUklpMzIKKyN1bmRlZiBQUklpTEVBU1QzMgorI3VuZGVmIFBSSWlGQVNUMzIKKyN1bmRlZiBQUklvMzIKKyN1bmRlZiBQUklvTEVBU1QzMgorI3VuZGVmIFBSSW9GQVNUMzIKKyN1bmRlZiBQUkl1MzIKKyN1bmRlZiBQUkl1TEVBU1QzMgorI3VuZGVmIFBSSXVGQVNUMzIKKyN1bmRlZiBQUkl4MzIKKyN1bmRlZiBQUkl4TEVBU1QzMgorI3VuZGVmIFBSSXhGQVNUMzIKKyN1bmRlZiBQUklYMzIKKyN1bmRlZiBQUklYTEVBU1QzMgorI3VuZGVmIFBSSVhGQVNUMzIKKworI3VuZGVmIFNDTmQzMgorI3VuZGVmIFNDTmRMRUFTVDMyCisjdW5kZWYgU0NOZEZBU1QzMgorI3VuZGVmIFNDTmkzMgorI3VuZGVmIFNDTmlMRUFTVDMyCisjdW5kZWYgU0NOaUZBU1QzMgorI3VuZGVmIFNDTm8zMgorI3VuZGVmIFNDTm9MRUFTVDMyCisjdW5kZWYgU0NOb0ZBU1QzMgorI3VuZGVmIFNDTnUzMgorI3VuZGVmIFNDTnVMRUFTVDMyCisjdW5kZWYgU0NOdUZBU1QzMgorI3VuZGVmIFNDTngzMgorI3VuZGVmIFNDTnhMRUFTVDMyCisjdW5kZWYgU0NOeEZBU1QzMgorCisjZGVmaW5lIFBSSWQzMiAiZCIKKyNkZWZpbmUgUFJJZExFQVNUMzIgImQiCisjZGVmaW5lIFBSSWRGQVNUMzIgImQiCisjZGVmaW5lIFBSSWkzMiAiaSIKKyNkZWZpbmUgUFJJaUxFQVNUMzIgImkiCisjZGVmaW5lIFBSSWlGQVNUMzIgImkiCisjZGVmaW5lIFBSSW8zMiAibyIKKyNkZWZpbmUgUFJJb0xFQVNUMzIgIm8iCisjZGVmaW5lIFBSSW9GQVNUMzIgIm8iCisjZGVmaW5lIFBSSXUzMiAidSIKKyNkZWZpbmUgUFJJdUxFQVNUMzIgInUiCisjZGVmaW5lIFBSSXVGQVNUMzIgInUiCisjZGVmaW5lIFBSSXgzMiAieCIKKyNkZWZpbmUgUFJJeExFQVNUMzIgIngiCisjZGVmaW5lIFBSSXhGQVNUMzIgIngiCisjZGVmaW5lIFBSSVgzMiAiWCIKKyNkZWZpbmUgUFJJWExFQVNUMzIgIlgiCisjZGVmaW5lIFBSSVhGQVNUMzIgIlgiCisKKyNkZWZpbmUgU0NOZDMyICJkIgorI2RlZmluZSBTQ05kTEVBU1QzMiAiZCIKKyNkZWZpbmUgU0NOZEZBU1QzMiAiZCIKKyNkZWZpbmUgU0NOaTMyICJpIgorI2RlZmluZSBTQ05pTEVBU1QzMiAiaSIKKyNkZWZpbmUgU0NOaUZBU1QzMiAiaSIKKyNkZWZpbmUgU0NObzMyICJvIgorI2RlZmluZSBTQ05vTEVBU1QzMiAibyIKKyNkZWZpbmUgU0NOb0ZBU1QzMiAibyIKKyNkZWZpbmUgU0NOdTMyICJ1IgorI2RlZmluZSBTQ051TEVBU1QzMiAidSIKKyNkZWZpbmUgU0NOdUZBU1QzMiAidSIKKyNkZWZpbmUgU0NOeDMyICJ4IgorI2RlZmluZSBTQ054TEVBU1QzMiAieCIKKyNkZWZpbmUgU0NOeEZBU1QzMiAieCIKKyNlbmRpZgorCisjZW5kaWYgLyogX19DTEFOR19JTlRUWVBFU19IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2lzbzY0Ni5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pc282NDYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ExM2M1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pc282NDYuaApAQCAtMCwwICsxLDQzIEBACisvKj09PS0tLS0gaXNvNjQ2LmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIGFsdGVybmF0ZSBzcGVsbGluZ3Mgb2Ygb3BlcmF0b3JzLS0tPT09CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVsaSBGcmllZG1hbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lTTzY0Nl9ICisjZGVmaW5lIF9fSVNPNjQ2X0gKKworI2lmbmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBhbmQgICAgJiYKKyNkZWZpbmUgYW5kX2VxICY9CisjZGVmaW5lIGJpdGFuZCAmCisjZGVmaW5lIGJpdG9yICB8CisjZGVmaW5lIGNvbXBsICB+CisjZGVmaW5lIG5vdCAgICAhCisjZGVmaW5lIG5vdF9lcSAhPQorI2RlZmluZSBvciAgICAgfHwKKyNkZWZpbmUgb3JfZXEgIHw9CisjZGVmaW5lIHhvciAgICBeCisjZGVmaW5lIHhvcl9lcSBePQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0lTTzY0Nl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2xpbWl0cy5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDQxODdjCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9saW1pdHMuaApAQCAtMCwwICsxLDExOCBAQAorLyo9PT0tLS0tIGxpbWl0cy5oIC0gU3RhbmRhcmQgaGVhZGVyIGZvciBpbnRlZ2VyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tPT09KlwKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ2hyaXMgTGF0dG5lcgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCitcKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLworCisjaWZuZGVmIF9fQ0xBTkdfTElNSVRTX0gKKyNkZWZpbmUgX19DTEFOR19MSU1JVFNfSAorCisvKiBUaGUgc3lzdGVtJ3MgbGltaXRzLmggbWF5LCBpbiB0dXJuLCB0cnkgdG8gI2luY2x1ZGVfbmV4dCBHQ0MncyBsaW1pdHMuaC4KKyAgIEF2ZXJ0IHRoaXMgI2luY2x1ZGVfbmV4dCBtYWRuZXNzLiAqLworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgIWRlZmluZWQgX0dDQ19MSU1JVFNfSF8KKyNkZWZpbmUgX0dDQ19MSU1JVFNfSF8KKyNlbmRpZgorCisvKiBTeXN0ZW0gaGVhZGVycyBpbmNsdWRlIGEgbnVtYmVyIG9mIGNvbnN0YW50cyBmcm9tIFBPU0lYIGluIDxsaW1pdHMuaD4uCisgICBJbmNsdWRlIGl0IGlmIHdlJ3JlIGhvc3RlZC4gKi8KKyNpZiBfX1NURENfSE9TVEVEX18gJiYgX19oYXNfaW5jbHVkZV9uZXh0KDxsaW1pdHMuaD4pCisjaW5jbHVkZV9uZXh0IDxsaW1pdHMuaD4KKyNlbmRpZgorCisvKiBNYW55IHN5c3RlbSBoZWFkZXJzIHRyeSB0byAiaGVscCB1cyBvdXQiIGJ5IGRlZmluaW5nIHRoZXNlLiAgTm8gcmVhbGx5LCB3ZQorICAga25vdyBob3cgYmlnIGVhY2ggZGF0YXR5cGUgaXMuICovCisjdW5kZWYgIFNDSEFSX01JTgorI3VuZGVmICBTQ0hBUl9NQVgKKyN1bmRlZiAgVUNIQVJfTUFYCisjdW5kZWYgIFNIUlRfTUlOCisjdW5kZWYgIFNIUlRfTUFYCisjdW5kZWYgIFVTSFJUX01BWAorI3VuZGVmICBJTlRfTUlOCisjdW5kZWYgIElOVF9NQVgKKyN1bmRlZiAgVUlOVF9NQVgKKyN1bmRlZiAgTE9OR19NSU4KKyN1bmRlZiAgTE9OR19NQVgKKyN1bmRlZiAgVUxPTkdfTUFYCisKKyN1bmRlZiAgQ0hBUl9CSVQKKyN1bmRlZiAgQ0hBUl9NSU4KKyN1bmRlZiAgQ0hBUl9NQVgKKworLyogQzkwLzk5IDUuMi40LjIuMSAqLworI2RlZmluZSBTQ0hBUl9NQVggX19TQ0hBUl9NQVhfXworI2RlZmluZSBTSFJUX01BWCAgX19TSFJUX01BWF9fCisjZGVmaW5lIElOVF9NQVggICBfX0lOVF9NQVhfXworI2RlZmluZSBMT05HX01BWCAgX19MT05HX01BWF9fCisKKyNkZWZpbmUgU0NIQVJfTUlOICgtX19TQ0hBUl9NQVhfXy0xKQorI2RlZmluZSBTSFJUX01JTiAgKC1fX1NIUlRfTUFYX18gLTEpCisjZGVmaW5lIElOVF9NSU4gICAoLV9fSU5UX01BWF9fICAtMSkKKyNkZWZpbmUgTE9OR19NSU4gICgtX19MT05HX01BWF9fIC0xTCkKKworI2RlZmluZSBVQ0hBUl9NQVggKF9fU0NIQVJfTUFYX18qMiAgKzEpCisjZGVmaW5lIFVTSFJUX01BWCAoX19TSFJUX01BWF9fICoyICArMSkKKyNkZWZpbmUgVUlOVF9NQVggIChfX0lOVF9NQVhfXyAgKjJVICsxVSkKKyNkZWZpbmUgVUxPTkdfTUFYIChfX0xPTkdfTUFYX18gKjJVTCsxVUwpCisKKyNpZm5kZWYgTUJfTEVOX01BWAorI2RlZmluZSBNQl9MRU5fTUFYIDEKKyNlbmRpZgorCisjZGVmaW5lIENIQVJfQklUICBfX0NIQVJfQklUX18KKworI2lmZGVmIF9fQ0hBUl9VTlNJR05FRF9fICAvKiAtZnVuc2lnbmVkLWNoYXIgKi8KKyNkZWZpbmUgQ0hBUl9NSU4gMAorI2RlZmluZSBDSEFSX01BWCBVQ0hBUl9NQVgKKyNlbHNlCisjZGVmaW5lIENIQVJfTUlOIFNDSEFSX01JTgorI2RlZmluZSBDSEFSX01BWCBfX1NDSEFSX01BWF9fCisjZW5kaWYKKworLyogQzk5IDUuMi40LjIuMTogQWRkZWQgbG9uZyBsb25nLgorICAgQysrMTEgMTguMy4zLjI6IHNhbWUgY29udGVudHMgYXMgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgPGxpbWl0cy5oPi4KKyAqLworI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisKKyN1bmRlZiAgTExPTkdfTUlOCisjdW5kZWYgIExMT05HX01BWAorI3VuZGVmICBVTExPTkdfTUFYCisKKyNkZWZpbmUgTExPTkdfTUFYICBfX0xPTkdfTE9OR19NQVhfXworI2RlZmluZSBMTE9OR19NSU4gICgtX19MT05HX0xPTkdfTUFYX18tMUxMKQorI2RlZmluZSBVTExPTkdfTUFYIChfX0xPTkdfTE9OR19NQVhfXyoyVUxMKzFVTEwpCisjZW5kaWYKKworLyogTE9OR19MT05HX01JTi9MT05HX0xPTkdfTUFYL1VMT05HX0xPTkdfTUFYIGFyZSBhIEdOVSBleHRlbnNpb24uICBJdCdzIHRvbyBiYWQKKyAgIHRoYXQgd2UgZG9uJ3QgaGF2ZSBzb21ldGhpbmcgbGlrZSAjcHJhZ21hIHBvaXNvbiB0aGF0IGNvdWxkIGJlIHVzZWQgdG8KKyAgIGRlcHJlY2F0ZSBhIG1hY3JvIC0gdGhlIGNvZGUgc2hvdWxkIGp1c3QgdXNlIExMT05HX01BWCBhbmQgZnJpZW5kcy4KKyAqLworI2lmIGRlZmluZWQoX19HTlVfTElCUkFSWV9fKSA/IGRlZmluZWQoX19VU0VfR05VKSA6ICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKworI3VuZGVmICAgTE9OR19MT05HX01JTgorI3VuZGVmICAgTE9OR19MT05HX01BWAorI3VuZGVmICAgVUxPTkdfTE9OR19NQVgKKworI2RlZmluZSBMT05HX0xPTkdfTUFYICBfX0xPTkdfTE9OR19NQVhfXworI2RlZmluZSBMT05HX0xPTkdfTUlOICAoLV9fTE9OR19MT05HX01BWF9fLTFMTCkKKyNkZWZpbmUgVUxPTkdfTE9OR19NQVggKF9fTE9OR19MT05HX01BWF9fKjJVTEwrMVVMTCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19DTEFOR19MSU1JVFNfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9semNudGludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9semNudGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDBlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2x6Y250aW50cmluLmgKQEAgLTAsMCArMSw2OCBAQAorLyo9PT0tLS0tIGx6Y250aW50cmluLmggLSBMWkNOVCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmICFkZWZpbmVkIF9fWDg2SU5UUklOX0ggJiYgIWRlZmluZWQgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGx6Y250aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0xaQ05USU5UUklOX0gKKyNkZWZpbmUgX19MWkNOVElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygibHpjbnQiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX19semNudDE2KHVuc2lnbmVkIHNob3J0IF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jbHpzKF9fWCkgOiAxNjsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19semNudDMyKHVuc2lnbmVkIGludCBfX1gpCit7CisgIHJldHVybiBfX1ggPyBfX2J1aWx0aW5fY2x6KF9fWCkgOiAzMjsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX2x6Y250X3UzMih1bnNpZ25lZCBpbnQgX19YKQoreworICByZXR1cm4gX19YID8gX19idWlsdGluX2NseihfX1gpIDogMzI7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2x6Y250NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jbHpsbChfX1gpIDogNjQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19semNudF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jbHpsbChfX1gpIDogNjQ7Cit9CisjZW5kaWYKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19MWkNOVElOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21tM2Rub3cuaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW0zZG5vdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NDg2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21tM2Rub3cuaApAQCAtMCwwICsxLDE3MSBAQAorLyo9PT0tLS0tIG1tM2Rub3cuaCAtIDNETm93ISBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfTU0zRE5PV19IX0lOQ0xVREVECisjZGVmaW5lIF9NTTNETk9XX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPG1taW50cmluLmg+CisjaW5jbHVkZSA8cHJmY2h3aW50cmluLmg+CisKK3R5cGVkZWYgZmxvYXQgX192MnNmIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOworCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oIjNkbm93IikpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21fZmVtbXModm9pZCkgeworICBfX2J1aWx0aW5faWEzMl9mZW1tcygpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3Bhdmd1c2IoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3Bhdmd1c2IoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmMmlkKF9fbTY0IF9fbSkgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmMmlkKChfX3Yyc2YpX19tKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZmFjYyhfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZhY2MoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmYWRkKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmFkZCgoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZjbXBlcShfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZjbXBlcSgoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZjbXBnZShfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZjbXBnZSgoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZjbXBndChfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZjbXBndCgoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZtYXgoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmbWF4KChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZm1pbihfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZtaW4oKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmbXVsKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZm11bCgoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZyY3AoX19tNjQgX19tKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZyY3AoKF9fdjJzZilfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmcmNwaXQxKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZnJjcGl0MSgoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZyY3BpdDIoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmcmNwaXQyKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZnJzcXJ0KF9fbTY0IF9fbSkgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmcnNxcnQoKF9fdjJzZilfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmcnNxcnRpdDEoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmcnNxaXQxKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZnN1YihfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZzdWIoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3Bmc3VicihfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZzdWJyKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9waTJmZChfX202NCBfX20pIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9waTJmZCgoX192MnNpKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcG11bGhydyhfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG11bGhydygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8qIEhhbmRsZSB0aGUgM2Rub3dhIGluc3RydWN0aW9ucyBoZXJlLiAqLworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCIzZG5vd2EiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGYyaXcoX19tNjQgX19tKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGYyaXcoKF9fdjJzZilfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmbmFjYyhfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZuYWNjKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZnBuYWNjKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZnBuYWNjKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9waTJmdyhfX202NCBfX20pIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9waTJmdygoX192MnNpKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcHN3YXBkc2YoX19tNjQgX19tKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN3YXBkc2YoKF9fdjJzZilfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3Bzd2FwZHNpKF9fbTY0IF9fbSkgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3Bzd2FwZHNpKChfX3Yyc2kpX19tKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW1fbWFsbG9jLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21tX21hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWFmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21tX21hbGxvYy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qPT09LS0tLSBtbV9tYWxsb2MuaCAtIEFsbG9jYXRpbmcgYW5kIEZyZWVpbmcgQWxpZ25lZCBNZW1vcnkgQmxvY2tzIC0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19NTV9NQUxMT0NfSAorI2RlZmluZSBfX01NX01BTExPQ19ICisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2Vsc2UKKyNpZm5kZWYgX19jcGx1c3BsdXMKK2V4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24odm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpOworI2Vsc2UKKy8vIFNvbWUgc3lzdGVtcyAoZS5nLiB0aG9zZSB3aXRoIEdOVSBsaWJjKSBkZWNsYXJlIHBvc2l4X21lbWFsaWduIHdpdGggYW4KKy8vIGV4Y2VwdGlvbiBzcGVjaWZpZXIuIFZpYSBhbiAiZWdyZWdpb3VzIHdvcmthcm91bmQiIGluCisvLyBTZW1hOjpDaGVja0VxdWl2YWxlbnRFeGNlcHRpb25TcGVjLCBDbGFuZyBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYXMgYSB2YWxpZAorLy8gcmVkZWNsYXJhdGlvbiBvZiBnbGliYydzIGRlY2xhcmF0aW9uLgorZXh0ZXJuICJDIiBpbnQgcG9zaXhfbWVtYWxpZ24odm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpOworI2VuZGlmCisjZW5kaWYKKworI2lmICEoZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoX21tX21hbGxvYykpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkICpfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hbGxvY19fKSkKK19tbV9tYWxsb2Moc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fYWxpZ24pCit7CisgIGlmIChfX2FsaWduID09IDEpIHsKKyAgICByZXR1cm4gbWFsbG9jKF9fc2l6ZSk7CisgIH0KKworICBpZiAoIShfX2FsaWduICYgKF9fYWxpZ24gLSAxKSkgJiYgX19hbGlnbiA8IHNpemVvZih2b2lkICopKQorICAgIF9fYWxpZ24gPSBzaXplb2Yodm9pZCAqKTsKKworICB2b2lkICpfX21hbGxvY2VkTWVtb3J5OworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisgIF9fbWFsbG9jZWRNZW1vcnkgPSBfX21pbmd3X2FsaWduZWRfbWFsbG9jKF9fc2l6ZSwgX19hbGlnbik7CisjZWxpZiBkZWZpbmVkKF9XSU4zMikKKyAgX19tYWxsb2NlZE1lbW9yeSA9IF9hbGlnbmVkX21hbGxvYyhfX3NpemUsIF9fYWxpZ24pOworI2Vsc2UKKyAgaWYgKHBvc2l4X21lbWFsaWduKCZfX21hbGxvY2VkTWVtb3J5LCBfX2FsaWduLCBfX3NpemUpKQorICAgIHJldHVybiAwOworI2VuZGlmCisKKyAgcmV0dXJuIF9fbWFsbG9jZWRNZW1vcnk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19tbV9mcmVlKHZvaWQgKl9fcCkKK3sKKyAgZnJlZShfX3ApOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX01NX01BTExPQ19IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21taW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21taW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmZDYwNQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW1pbnRyaW4uaApAQCAtMCwwICsxLDE1NDUgQEAKKy8qPT09LS0tLSBtbWludHJpbi5oIC0gTU1YIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19NTUlOVFJJTl9ICisjZGVmaW5lIF9fTU1JTlRSSU5fSAorCit0eXBlZGVmIGxvbmcgbG9uZyBfX202NCBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCkpKTsKKwordHlwZWRlZiBsb25nIGxvbmcgX192MWRpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOwordHlwZWRlZiBpbnQgX192MnNpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOwordHlwZWRlZiBzaG9ydCBfX3Y0aGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7Cit0eXBlZGVmIGNoYXIgX192OHFpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOworCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oIm1teCIpKSkKKworLy8vIFxicmllZiBDbGVhcnMgdGhlIE1NWCBzdGF0ZSBieSBzZXR0aW5nIHRoZSBzdGF0ZSBvZiB0aGUgeDg3IHN0YWNrIHJlZ2lzdGVycworLy8vICAgIHRvIGVtcHR5LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEVNTVMgaW5zdHJ1Y3Rpb24uCisvLy8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZW1wdHkodm9pZCkKK3sKKyAgICBfX2J1aWx0aW5faWEzMl9lbW1zKCk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvciwgc2V0dGluZyB0aGUgbG93ZXIgMzIgYml0cyB0byB0aGUKKy8vLyAgICB2YWx1ZSBvZiB0aGUgMzItYml0IGludGVnZXIgcGFyYW1ldGVyIGFuZCBzZXR0aW5nIHRoZSB1cHBlciAzMiBiaXRzIHRvIDAuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkQgLyBNT1ZEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9faQorLy8vICAgIEEgMzItYml0IGludGVnZXIgdmFsdWUuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IuIFRoZSBsb3dlciAzMiBiaXRzIGNvbnRhaW4gdGhlIHZhbHVlIG9mIHRoZQorLy8vICAgIHBhcmFtZXRlci4gVGhlIHVwcGVyIDMyIGJpdHMgYXJlIHNldCB0byAwLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2kzMl9zaTY0KGludCBfX2kpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl92ZWNfaW5pdF92MnNpKF9faSwgMCk7Cit9CisKKy8vLyBcYnJpZWYgUmV0dXJucyB0aGUgbG93ZXIgMzIgYml0cyBvZiBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBhcyBhIDMyLWJpdAorLy8vICAgIHNpZ25lZCBpbnRlZ2VyLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZEIC8gTU9WRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDMyLWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZSBjb250YWluaW5nIHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZQorLy8vICAgIHBhcmFtZXRlci4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzaTY0X3NpMzIoX19tNjQgX19tKQoreworICAgIHJldHVybiBfX2J1aWx0aW5faWEzMl92ZWNfZXh0X3Yyc2koKF9fdjJzaSlfX20sIDApOworfQorCisvLy8gXGJyaWVmIENhc3RzIGEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlEgLyBNT1ZEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9faQorLy8vICAgIEEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNhbWUgYml0d2lzZSBwYXR0ZXJuIGFzIHRoZQorLy8vICAgIHBhcmFtZXRlci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNpNjRfbTY0KGxvbmcgbG9uZyBfX2kpCit7CisgICAgcmV0dXJuIChfX202NClfX2k7Cit9CisKKy8vLyBcYnJpZWYgQ2FzdHMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgaW50byBhIDY0LWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WUSAvIE1PVkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgc2FtZSBiaXR3aXNlIHBhdHRlcm4gYXMgdGhlCisvLy8gICAgcGFyYW1ldGVyLgorc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dG02NF9zaTY0KF9fbTY0IF9fbSkKK3sKKyAgICByZXR1cm4gKGxvbmcgbG9uZylfX207Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgMTYtYml0IHNpZ25lZCBpbnRlZ2VycyBmcm9tIGJvdGggNjQtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgcGFyYW1ldGVycyBvZiBbNCB4IGkxNl0gaW50byA4LWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZXMsIGFuZCBjb25zdHJ1Y3RzCisvLy8gICAgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gYXMgdGhlIHJlc3VsdC4gUG9zaXRpdmUgdmFsdWVzCisvLy8gICAgZ3JlYXRlciB0aGFuIDB4N0YgYXJlIHNhdHVyYXRlZCB0byAweDdGLiBOZWdhdGl2ZSB2YWx1ZXMgbGVzcyB0aGFuIDB4ODAKKy8vLyAgICBhcmUgc2F0dXJhdGVkIHRvIDB4ODAuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFDS1NTV0IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4gRWFjaCAxNi1iaXQgZWxlbWVudCBpcyB0cmVhdGVkIGFzIGEKKy8vLyAgICAxNi1iaXQgc2lnbmVkIGludGVnZXIgYW5kIGlzIGNvbnZlcnRlZCB0byBhbiA4LWJpdCBzaWduZWQgaW50ZWdlciB3aXRoCisvLy8gICAgc2F0dXJhdGlvbi4gUG9zaXRpdmUgdmFsdWVzIGdyZWF0ZXIgdGhhbiAweDdGIGFyZSBzYXR1cmF0ZWQgdG8gMHg3Ri4KKy8vLyAgICBOZWdhdGl2ZSB2YWx1ZXMgbGVzcyB0aGFuIDB4ODAgYXJlIHNhdHVyYXRlZCB0byAweDgwLiBUaGUgY29udmVydGVkCisvLy8gICAgWzQgeCBpOF0gdmFsdWVzIGFyZSB3cml0dGVuIHRvIHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uIEVhY2ggMTYtYml0IGVsZW1lbnQgaXMgdHJlYXRlZCBhcyBhCisvLy8gICAgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIGFuZCBpcyBjb252ZXJ0ZWQgdG8gYW4gOC1iaXQgc2lnbmVkIGludGVnZXIgd2l0aAorLy8vICAgIHNhdHVyYXRpb24uIFBvc2l0aXZlIHZhbHVlcyBncmVhdGVyIHRoYW4gMHg3RiBhcmUgc2F0dXJhdGVkIHRvIDB4N0YuCisvLy8gICAgTmVnYXRpdmUgdmFsdWVzIGxlc3MgdGhhbiAweDgwIGFyZSBzYXR1cmF0ZWQgdG8gMHg4MC4gVGhlIGNvbnZlcnRlZAorLy8vICAgIFs0IHggaThdIHZhbHVlcyBhcmUgd3JpdHRlbiB0byB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BhY2tzX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhY2tzc3diKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyAzMi1iaXQgc2lnbmVkIGludGVnZXJzIGZyb20gYm90aCA2NC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBwYXJhbWV0ZXJzIG9mIFsyIHggaTMyXSBpbnRvIDE2LWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZXMsIGFuZCBjb25zdHJ1Y3RzCisvLy8gICAgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGFzIHRoZSByZXN1bHQuIFBvc2l0aXZlIHZhbHVlcworLy8vICAgIGdyZWF0ZXIgdGhhbiAweDdGRkYgYXJlIHNhdHVyYXRlZCB0byAweDdGRkYuIE5lZ2F0aXZlIHZhbHVlcyBsZXNzIHRoYW4KKy8vLyAgICAweDgwMDAgYXJlIHNhdHVyYXRlZCB0byAweDgwMDAuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFDS1NTRFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4gRWFjaCAzMi1iaXQgZWxlbWVudCBpcyB0cmVhdGVkIGFzIGEKKy8vLyAgICAzMi1iaXQgc2lnbmVkIGludGVnZXIgYW5kIGlzIGNvbnZlcnRlZCB0byBhIDE2LWJpdCBzaWduZWQgaW50ZWdlciB3aXRoCisvLy8gICAgc2F0dXJhdGlvbi4gUG9zaXRpdmUgdmFsdWVzIGdyZWF0ZXIgdGhhbiAweDdGRkYgYXJlIHNhdHVyYXRlZCB0byAweDdGRkYuCisvLy8gICAgTmVnYXRpdmUgdmFsdWVzIGxlc3MgdGhhbiAweDgwMDAgYXJlIHNhdHVyYXRlZCB0byAweDgwMDAuIFRoZSBjb252ZXJ0ZWQKKy8vLyAgICBbMiB4IGkxNl0gdmFsdWVzIGFyZSB3cml0dGVuIHRvIHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uIEVhY2ggMzItYml0IGVsZW1lbnQgaXMgdHJlYXRlZCBhcyBhCisvLy8gICAgMzItYml0IHNpZ25lZCBpbnRlZ2VyIGFuZCBpcyBjb252ZXJ0ZWQgdG8gYSAxNi1iaXQgc2lnbmVkIGludGVnZXIgd2l0aAorLy8vICAgIHNhdHVyYXRpb24uIFBvc2l0aXZlIHZhbHVlcyBncmVhdGVyIHRoYW4gMHg3RkZGIGFyZSBzYXR1cmF0ZWQgdG8gMHg3RkZGLgorLy8vICAgIE5lZ2F0aXZlIHZhbHVlcyBsZXNzIHRoYW4gMHg4MDAwIGFyZSBzYXR1cmF0ZWQgdG8gMHg4MDAwLiBUaGUgY29udmVydGVkCisvLy8gICAgWzIgeCBpMTZdIHZhbHVlcyBhcmUgd3JpdHRlbiB0byB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wYWNrc19waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWNrc3NkdygoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgMTYtYml0IHNpZ25lZCBpbnRlZ2VycyBmcm9tIGJvdGggNjQtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgcGFyYW1ldGVycyBvZiBbNCB4IGkxNl0gaW50byA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcywgYW5kCisvLy8gICAgY29uc3RydWN0cyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XSBhcyB0aGUgcmVzdWx0LiBWYWx1ZXMKKy8vLyAgICBncmVhdGVyIHRoYW4gMHhGRiBhcmUgc2F0dXJhdGVkIHRvIDB4RkYuIFZhbHVlcyBsZXNzIHRoYW4gMCBhcmUgc2F0dXJhdGVkCisvLy8gICAgdG8gMC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUNLVVNXQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLiBFYWNoIDE2LWJpdCBlbGVtZW50IGlzIHRyZWF0ZWQgYXMgYQorLy8vICAgIDE2LWJpdCBzaWduZWQgaW50ZWdlciBhbmQgaXMgY29udmVydGVkIHRvIGFuIDgtYml0IHVuc2lnbmVkIGludGVnZXIgd2l0aAorLy8vICAgIHNhdHVyYXRpb24uIFZhbHVlcyBncmVhdGVyIHRoYW4gMHhGRiBhcmUgc2F0dXJhdGVkIHRvIDB4RkYuIFZhbHVlcyBsZXNzCisvLy8gICAgdGhhbiAwIGFyZSBzYXR1cmF0ZWQgdG8gMC4gVGhlIGNvbnZlcnRlZCBbNCB4IGk4XSB2YWx1ZXMgYXJlIHdyaXR0ZW4gdG8KKy8vLyAgICB0aGUgbG93ZXIgMzIgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLiBFYWNoIDE2LWJpdCBlbGVtZW50IGlzIHRyZWF0ZWQgYXMgYQorLy8vICAgIDE2LWJpdCBzaWduZWQgaW50ZWdlciBhbmQgaXMgY29udmVydGVkIHRvIGFuIDgtYml0IHVuc2lnbmVkIGludGVnZXIgd2l0aAorLy8vICAgIHNhdHVyYXRpb24uIFZhbHVlcyBncmVhdGVyIHRoYW4gMHhGRiBhcmUgc2F0dXJhdGVkIHRvIDB4RkYuIFZhbHVlcyBsZXNzCisvLy8gICAgdGhhbiAwIGFyZSBzYXR1cmF0ZWQgdG8gMC4gVGhlIGNvbnZlcnRlZCBbNCB4IGk4XSB2YWx1ZXMgYXJlIHdyaXR0ZW4gdG8KKy8vLyAgICB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BhY2tzX3B1MTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhY2t1c3diKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBVbnBhY2tzIHRoZSB1cHBlciAzMiBiaXRzIGZyb20gdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMgb2YgWzggeCBpOF0KKy8vLyAgICBhbmQgaW50ZXJsZWF2ZXMgdGhlbSBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBVTlBDS0hCVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gICAgQml0cyBbMzk6MzJdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzc6MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs0Nzo0MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMjM6MTZdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbNTU6NDhdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzM5OjMyXSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzYzOjU2XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs1NTo0OF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vICAgIEJpdHMgWzM5OjMyXSBhcmUgd3JpdHRlbiB0byBiaXRzIFsxNTo4XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzQ3OjQwXSBhcmUgd3JpdHRlbiB0byBiaXRzIFszMToyNF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs1NTo0OF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNDc6NDBdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbNjM6NTZdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjU2XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIGludGVybGVhdmVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNraGlfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wdW5wY2toYncoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFVucGFja3MgdGhlIHVwcGVyIDMyIGJpdHMgZnJvbSB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBvZgorLy8vICAgIFs0IHggaTE2XSBhbmQgaW50ZXJsZWF2ZXMgdGhlbSBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQVU5QQ0tIV0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyAgICBCaXRzIFs0NzozMl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTU6MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs2Mzo0OF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNDc6MzJdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gICAgQml0cyBbNDc6MzJdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzMxOjE2XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzYzOjQ4XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs2Mzo0OF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2toaV9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wdW5wY2tod2QoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFVucGFja3MgdGhlIHVwcGVyIDMyIGJpdHMgZnJvbSB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBvZgorLy8vICAgIFsyIHggaTMyXSBhbmQgaW50ZXJsZWF2ZXMgdGhlbSBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQVU5QQ0tIRFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4gVGhlIHVwcGVyIDMyIGJpdHMgYXJlIHdyaXR0ZW4gdG8KKy8vLyAgICB0aGUgbG93ZXIgMzIgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLiBUaGUgdXBwZXIgMzIgYml0cyBhcmUgd3JpdHRlbiB0bworLy8vICAgIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIGludGVybGVhdmVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNraGlfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHVucGNraGRxKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKK30KKworLy8vIFxicmllZiBVbnBhY2tzIHRoZSBsb3dlciAzMiBiaXRzIGZyb20gdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMgb2YgWzggeCBpOF0KKy8vLyAgICBhbmQgaW50ZXJsZWF2ZXMgdGhlbSBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBVTlBDS0xCVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gICAgQml0cyBbNzowXSBhcmUgd3JpdHRlbiB0byBiaXRzIFs3OjBdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMTU6OF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMjM6MTZdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMjM6MTZdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzM5OjMyXSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzMxOjI0XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs1NTo0OF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vICAgIEJpdHMgWzc6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTU6OF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFsxNTo4XSBhcmUgd3JpdHRlbiB0byBiaXRzIFszMToyNF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFsyMzoxNl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNDc6NDBdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMzE6MjRdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjU2XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIGludGVybGVhdmVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNrbG9fcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wdW5wY2tsYncoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFVucGFja3MgdGhlIGxvd2VyIDMyIGJpdHMgZnJvbSB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBvZgorLy8vICAgIFs0IHggaTE2XSBhbmQgaW50ZXJsZWF2ZXMgdGhlbSBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQVU5QQ0tMV0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyAgICBCaXRzIFsxNTowXSBhcmUgd3JpdHRlbiB0byBiaXRzIFsxNTowXSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzMxOjE2XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs0NzozMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyAgICBCaXRzIFsxNTowXSBhcmUgd3JpdHRlbiB0byBiaXRzIFszMToxNl0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFszMToxNl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNjM6NDhdIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGludGVybGVhdmVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNrbG9fcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHVucGNrbHdkKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBVbnBhY2tzIHRoZSBsb3dlciAzMiBiaXRzIGZyb20gdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMgb2YKKy8vLyAgICBbMiB4IGkzMl0gYW5kIGludGVybGVhdmVzIHRoZW0gaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFVOUENLTERRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uIFRoZSBsb3dlciAzMiBiaXRzIGFyZSB3cml0dGVuIHRvCisvLy8gICAgdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4gVGhlIGxvd2VyIDMyIGJpdHMgYXJlIHdyaXR0ZW4gdG8KKy8vLyAgICB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSBpbnRlcmxlYXZlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2xvX3BpMzIoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3B1bnBja2xkcSgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgQWRkcyBlYWNoIDgtYml0IGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QgNjQtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb2YgWzggeCBpOF0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgOC1iaXQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBzZWNvbmQKKy8vLyAgICA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uIFRoZSBsb3dlciA4IGJpdHMgb2YgdGhlIHJlc3VsdHMgYXJlCisvLy8gICAgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFEREIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgc3VtcyBvZiBib3RoCisvLy8gICAgcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGRiKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworLy8vIFxicmllZiBBZGRzIGVhY2ggMTYtYml0IGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QgNjQtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb2YgWzQgeCBpMTZdIHRvIHRoZSBjb3JyZXNwb25kaW5nIDE2LWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIHNlY29uZAorLy8vICAgIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uIFRoZSBsb3dlciAxNiBiaXRzIG9mIHRoZSByZXN1bHRzIGFyZQorLy8vICAgIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUREVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBzdW1zIG9mIGJvdGgKKy8vLyAgICBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGR3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBBZGRzIGVhY2ggMzItYml0IGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QgNjQtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb2YgWzIgeCBpMzJdIHRvIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIHNlY29uZAorLy8vICAgIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSByZXN1bHRzIGFyZQorLy8vICAgIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQURERCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSBzdW1zIG9mIGJvdGgKKy8vLyAgICBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkX3BpMzIoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGRkKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKK30KKworLy8vIFxicmllZiBBZGRzIGVhY2ggOC1iaXQgc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QgNjQtYml0IGludGVnZXIKKy8vLyAgICB2ZWN0b3Igb2YgWzggeCBpOF0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgOC1iaXQgc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZgorLy8vICAgIHRoZSBzZWNvbmQgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLiBQb3NpdGl2ZSBzdW1zIGdyZWF0ZXIgdGhhbgorLy8vICAgIDB4N0YgYXJlIHNhdHVyYXRlZCB0byAweDdGLiBOZWdhdGl2ZSBzdW1zIGxlc3MgdGhhbiAweDgwIGFyZSBzYXR1cmF0ZWQgdG8KKy8vLyAgICAweDgwLiBUaGUgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFERFNCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIHNhdHVyYXRlZCBzdW1zCisvLy8gICAgb2YgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkc19waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGRzYigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgQWRkcyBlYWNoIDE2LWJpdCBzaWduZWQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbNCB4IGkxNl0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YKKy8vLyAgICB0aGUgc2Vjb25kIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uIFBvc2l0aXZlIHN1bXMgZ3JlYXRlciB0aGFuCisvLy8gICAgMHg3RkZGIGFyZSBzYXR1cmF0ZWQgdG8gMHg3RkZGLiBOZWdhdGl2ZSBzdW1zIGxlc3MgdGhhbiAweDgwMDAgYXJlCisvLy8gICAgc2F0dXJhdGVkIHRvIDB4ODAwMC4gVGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBBRERTVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBzYXR1cmF0ZWQgc3VtcworLy8vICAgIG9mIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHNfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFkZHN3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBBZGRzIGVhY2ggOC1iaXQgdW5zaWduZWQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbOCB4IGk4XSB0byB0aGUgY29ycmVzcG9uZGluZyA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YKKy8vLyAgICB0aGUgc2Vjb25kIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4gU3VtcyBncmVhdGVyIHRoYW4gMHhGRiBhcmUKKy8vLyAgICBzYXR1cmF0ZWQgdG8gMHhGRi4gVGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mCisvLy8gICAgWzggeCBpOF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFERFVTQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XSBjb250YWluaW5nIHRoZSBzYXR1cmF0ZWQKKy8vLyAgICB1bnNpZ25lZCBzdW1zIG9mIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHNfcHU4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWRkdXNiKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworLy8vIFxicmllZiBBZGRzIGVhY2ggMTYtYml0IHVuc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QgNjQtYml0IGludGVnZXIKKy8vLyAgICB2ZWN0b3Igb2YgWzQgeCBpMTZdIHRvIHRoZSBjb3JyZXNwb25kaW5nIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQKKy8vLyAgICBvZiB0aGUgc2Vjb25kIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uIFN1bXMgZ3JlYXRlciB0aGFuCisvLy8gICAgMHhGRkZGIGFyZSBzYXR1cmF0ZWQgdG8gMHhGRkZGLiBUaGUgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFERFVTVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBzYXR1cmF0ZWQKKy8vLyAgICB1bnNpZ25lZCBzdW1zIG9mIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHNfcHUxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFkZHVzdygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIGVhY2ggOC1iaXQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBzZWNvbmQgNjQtYml0IGludGVnZXIKKy8vLyAgICB2ZWN0b3Igb2YgWzggeCBpOF0gZnJvbSB0aGUgY29ycmVzcG9uZGluZyA4LWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlCisvLy8gICAgZmlyc3QgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLiBUaGUgbG93ZXIgOCBiaXRzIG9mIHRoZSByZXN1bHRzCisvLy8gICAgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTVUJCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XSBjb250YWluaW5nIHRoZSBtaW51ZW5kcy4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIHN1YnRyYWhlbmRzLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVuY2VzIG9mCisvLy8gICAgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX3BpOChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YmIoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFN1YnRyYWN0cyBlYWNoIDE2LWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIHNlY29uZCA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbNCB4IGkxNl0gZnJvbSB0aGUgY29ycmVzcG9uZGluZyAxNi1iaXQgaW50ZWdlciBlbGVtZW50IG9mIHRoZQorLy8vICAgIGZpcnN0IDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uIFRoZSBsb3dlciAxNiBiaXRzIG9mIHRoZQorLy8vICAgIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU1VCVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmRzLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIHN1YnRyYWhlbmRzLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBkaWZmZXJlbmNlcyBvZgorLy8vICAgIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3VidygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIGVhY2ggMzItYml0IGludGVnZXIgZWxlbWVudCBvZiB0aGUgc2Vjb25kIDY0LWJpdCBpbnRlZ2VyCisvLy8gICAgdmVjdG9yIG9mIFsyIHggaTMyXSBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlCisvLy8gICAgZmlyc3QgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlCisvLy8gICAgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTVUJEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyB0aGUgbWludWVuZHMuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVuY2VzIG9mCisvLy8gICAgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX3BpMzIoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzdWJkKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgZWFjaCA4LWJpdCBzaWduZWQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBzZWNvbmQgNjQtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gZnJvbSB0aGUgY29ycmVzcG9uZGluZyA4LWJpdCBzaWduZWQgaW50ZWdlcgorLy8vICAgIGVsZW1lbnQgb2YgdGhlIGZpcnN0IDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4gUG9zaXRpdmUgcmVzdWx0cworLy8vICAgIGdyZWF0ZXIgdGhhbiAweDdGIGFyZSBzYXR1cmF0ZWQgdG8gMHg3Ri4gTmVnYXRpdmUgcmVzdWx0cyBsZXNzIHRoYW4gMHg4MAorLy8vICAgIGFyZSBzYXR1cmF0ZWQgdG8gMHg4MC4gVGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIKKy8vLyAgICB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNVQlNCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XSBjb250YWluaW5nIHRoZSBtaW51ZW5kcy4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIHN1YnRyYWhlbmRzLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIHNhdHVyYXRlZAorLy8vICAgIGRpZmZlcmVuY2VzIG9mIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1YnNfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3Vic2IoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFN1YnRyYWN0cyBlYWNoIDE2LWJpdCBzaWduZWQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBzZWNvbmQgNjQtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgMTYtYml0IHNpZ25lZCBpbnRlZ2VyCisvLy8gICAgZWxlbWVudCBvZiB0aGUgZmlyc3QgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4gUG9zaXRpdmUgcmVzdWx0cworLy8vICAgIGdyZWF0ZXIgdGhhbiAweDdGRkYgYXJlIHNhdHVyYXRlZCB0byAweDdGRkYuIE5lZ2F0aXZlIHJlc3VsdHMgbGVzcyB0aGFuCisvLy8gICAgMHg4MDAwIGFyZSBzYXR1cmF0ZWQgdG8gMHg4MDAwLiBUaGUgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNVQlNXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgbWludWVuZHMuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIHNhdHVyYXRlZAorLy8vICAgIGRpZmZlcmVuY2VzIG9mIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1YnNfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YnN3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgZWFjaCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIHNlY29uZCA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XSBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIDgtYml0IHVuc2lnbmVkIGludGVnZXIKKy8vLyAgICBlbGVtZW50IG9mIHRoZSBmaXJzdCA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uIElmIGFuIGVsZW1lbnQgb2YKKy8vLyAgICB0aGUgZmlyc3QgdmVjdG9yIGlzIGxlc3MgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBzZWNvbmQKKy8vLyAgICB2ZWN0b3IsIHRoZSByZXN1bHQgaXMgc2F0dXJhdGVkIHRvIDAuIFRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhCisvLy8gICAgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTVUJVU0IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmRzLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgc2F0dXJhdGVkCisvLy8gICAgZGlmZmVyZW5jZXMgb2YgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Vic19wdTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFN1YnRyYWN0cyBlYWNoIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIHNlY29uZCA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gZnJvbSB0aGUgY29ycmVzcG9uZGluZyAxNi1iaXQgdW5zaWduZWQKKy8vLyAgICBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIGZpcnN0IDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uIElmIGFuCisvLy8gICAgZWxlbWVudCBvZiB0aGUgZmlyc3QgdmVjdG9yIGlzIGxlc3MgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZQorLy8vICAgIHNlY29uZCB2ZWN0b3IsIHRoZSByZXN1bHQgaXMgc2F0dXJhdGVkIHRvIDAuIFRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50bworLy8vICAgIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU1VCVVNXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgbWludWVuZHMuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIHNhdHVyYXRlZAorLy8vICAgIGRpZmZlcmVuY2VzIG9mIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1YnNfcHUxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YnVzdygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyBlYWNoIDE2LWJpdCBzaWduZWQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gYnkgdGhlIGNvcnJlc3BvbmRpbmcgMTYtYml0IHNpZ25lZCBpbnRlZ2VyCisvLy8gICAgZWxlbWVudCBvZiB0aGUgc2Vjb25kIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gYW5kIGdldCBmb3VyCisvLy8gICAgMzItYml0IHByb2R1Y3RzLiBBZGRzIGFkamFjZW50IHBhaXJzIG9mIHByb2R1Y3RzIHRvIGdldCB0d28gMzItYml0IHN1bXMuCisvLy8gICAgVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlc2UgdHdvIHN1bXMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIKKy8vLyAgICB2ZWN0b3Igb2YgWzIgeCBpMzJdLiBGb3IgZXhhbXBsZSwgYml0cyBbMTU6MF0gb2YgYm90aCBwYXJhbWV0ZXJzIGFyZQorLy8vICAgIG11bHRpcGxpZWQsIGJpdHMgWzMxOjE2XSBvZiBib3RoIHBhcmFtZXRlcnMgYXJlIG11bHRpcGxpZWQsIGFuZCB0aGUgc3VtCisvLy8gICAgb2YgYm90aCByZXN1bHRzIGlzIHdyaXR0ZW4gdG8gYml0cyBbMzE6MF0gb2YgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQTUFERFdEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIHN1bXMgb2YKKy8vLyAgICBwcm9kdWN0cyBvZiBib3RoIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWRkX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BtYWRkd2QoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgZWFjaCAxNi1iaXQgc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QgNjQtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGJ5IHRoZSBjb3JyZXNwb25kaW5nIDE2LWJpdCBzaWduZWQgaW50ZWdlcgorLy8vICAgIGVsZW1lbnQgb2YgdGhlIHNlY29uZCA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLiBQYWNrcyB0aGUgdXBwZXIKKy8vLyAgICAxNiBiaXRzIG9mIHRoZSAzMi1iaXQgcHJvZHVjdHMgaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE1VTEhXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIHVwcGVyIDE2IGJpdHMKKy8vLyAgICBvZiB0aGUgcHJvZHVjdHMgb2YgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsaGlfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG11bGh3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBNdWx0aXBsaWVzIGVhY2ggMTYtYml0IHNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIGZpcnN0IDY0LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBieSB0aGUgY29ycmVzcG9uZGluZyAxNi1iaXQgc2lnbmVkIGludGVnZXIKKy8vLyAgICBlbGVtZW50IG9mIHRoZSBzZWNvbmQgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4gUGFja3MgdGhlIGxvd2VyCisvLy8gICAgMTYgYml0cyBvZiB0aGUgMzItYml0IHByb2R1Y3RzIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBNVUxMVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBsb3dlciAxNiBiaXRzCisvLy8gICAgb2YgdGhlIHByb2R1Y3RzIG9mIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bGxvX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BtdWxsdygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgTGVmdC1zaGlmdHMgZWFjaCAxNi1iaXQgc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QKKy8vLyAgICBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSwgYnkgdGhlIG51bWJlcgorLy8vICAgIG9mIGJpdHMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgcGFyYW1ldGVyLCB3aGljaCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBUaGUKKy8vLyAgICBsb3dlciAxNiBiaXRzIG9mIHRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZgorLy8vICAgIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU0xMVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBpbnRlcnByZXRlZCBhcyBhIHNpbmdsZSA2NC1iaXQgaW50ZWdlci4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgbGVmdC1zaGlmdGVkCisvLy8gICAgdmFsdWVzLiBJZiBfX2NvdW50IGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMTYsIHRoZSByZXN1bHQgaXMgc2V0IHRvIGFsbCAwLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsX3BpMTYoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNsbHcoKF9fdjRoaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIExlZnQtc2hpZnRzIGVhY2ggMTYtYml0IHNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YgYSA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbNCB4IGkxNl0gYnkgdGhlIG51bWJlciBvZiBiaXRzIHNwZWNpZmllZCBieSBhIDMyLWJpdCBpbnRlZ2VyLgorLy8vICAgIFRoZSBsb3dlciAxNiBiaXRzIG9mIHRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU0xMVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBsZWZ0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZXMuIElmIF9fY291bnQgaXMgZ3JlYXRlciBvciBlcXVhbCB0byAxNiwgdGhlIHJlc3VsdCBpcyBzZXQgdG8gYWxsIDAuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGxpX3BpMTYoX19tNjQgX19tLCBpbnQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzbGx3aSgoX192NGhpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgTGVmdC1zaGlmdHMgZWFjaCAzMi1iaXQgc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QKKy8vLyAgICBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSwgYnkgdGhlIG51bWJlcgorLy8vICAgIG9mIGJpdHMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgcGFyYW1ldGVyLCB3aGljaCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBUaGUKKy8vLyAgICBsb3dlciAzMiBiaXRzIG9mIHRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZgorLy8vICAgIFsyIHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU0xMRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBpbnRlcnByZXRlZCBhcyBhIHNpbmdsZSA2NC1iaXQgaW50ZWdlci4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyB0aGUgbGVmdC1zaGlmdGVkCisvLy8gICAgdmFsdWVzLiBJZiBfX2NvdW50IGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMzIsIHRoZSByZXN1bHQgaXMgc2V0IHRvIGFsbCAwLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsX3BpMzIoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNsbGQoKF9fdjJzaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIExlZnQtc2hpZnRzIGVhY2ggMzItYml0IHNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YgYSA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbMiB4IGkzMl0gYnkgdGhlIG51bWJlciBvZiBiaXRzIHNwZWNpZmllZCBieSBhIDMyLWJpdCBpbnRlZ2VyLgorLy8vICAgIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9mIFsyIHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU0xMRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSBsZWZ0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZXMuIElmIF9fY291bnQgaXMgZ3JlYXRlciBvciBlcXVhbCB0byAzMiwgdGhlIHJlc3VsdCBpcyBzZXQgdG8gYWxsIDAuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGxpX3BpMzIoX19tNjQgX19tLCBpbnQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzbGxkaSgoX192MnNpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgTGVmdC1zaGlmdHMgdGhlIGZpcnN0IDY0LWJpdCBpbnRlZ2VyIHBhcmFtZXRlciBieSB0aGUgbnVtYmVyIG9mIGJpdHMKKy8vLyAgICBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCA2NC1iaXQgaW50ZWdlciBwYXJhbWV0ZXIuIFRoZSBsb3dlciA2NCBiaXRzIG9mCisvLy8gICAgcmVzdWx0IGFyZSByZXR1cm5lZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU0xMUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBpbnRlcnByZXRlZCBhcyBhIHNpbmdsZSA2NC1iaXQgaW50ZWdlci4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGludGVycHJldGVkIGFzIGEgc2luZ2xlIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGxlZnQtc2hpZnRlZCB2YWx1ZS4gSWYKKy8vLyAgICAgX19jb3VudCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIDY0LCB0aGUgcmVzdWx0IGlzIHNldCB0byAwLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsX3NpNjQoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNsbHEoKF9fdjFkaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIExlZnQtc2hpZnRzIHRoZSBmaXJzdCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgNjQtYml0IGludGVnZXIsIGJ5IHRoZQorLy8vICAgIG51bWJlciBvZiBiaXRzIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIHBhcmFtZXRlciwgd2hpY2ggaXMgYSAzMi1iaXQKKy8vLyAgICBpbnRlZ2VyLiBUaGUgbG93ZXIgNjQgYml0cyBvZiByZXN1bHQgYXJlIHJldHVybmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTTExRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGludGVycHJldGVkIGFzIGEgc2luZ2xlIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBsZWZ0LXNoaWZ0ZWQgdmFsdWUuIElmCisvLy8gICAgIF9fY291bnQgaXMgZ3JlYXRlciBvciBlcXVhbCB0byA2NCwgdGhlIHJlc3VsdCBpcyBzZXQgdG8gMC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbGlfc2k2NChfX202NCBfX20sIGludCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNsbHFpKChfX3YxZGkpX19tLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCAxNi1iaXQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIsCisvLy8gICAgd2hpY2ggaXMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLCBieSB0aGUgbnVtYmVyIG9mIGJpdHMKKy8vLyAgICBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgNjQtYml0IGludGVnZXIuIEhpZ2gtb3JkZXIKKy8vLyAgICBiaXRzIGFyZSBmaWxsZWQgd2l0aCB0aGUgc2lnbiBiaXQgb2YgdGhlIGluaXRpYWwgdmFsdWUgb2YgZWFjaCAxNi1iaXQKKy8vLyAgICBlbGVtZW50LiBUaGUgMTYtYml0IHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTUkFXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGludGVycHJldGVkIGFzIGEgc2luZ2xlIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JhX3BpMTYoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNyYXcoKF9fdjRoaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIDE2LWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBvZiBbNCB4IGkxNl0gYnkgdGhlIG51bWJlciBvZiBiaXRzIHNwZWNpZmllZCBieSBhIDMyLWJpdCBpbnRlZ2VyLgorLy8vICAgIEhpZ2gtb3JkZXIgYml0cyBhcmUgZmlsbGVkIHdpdGggdGhlIHNpZ24gYml0IG9mIHRoZSBpbml0aWFsIHZhbHVlIG9mIGVhY2gKKy8vLyAgICAxNi1iaXQgZWxlbWVudC4gVGhlIDE2LWJpdCByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdCBpbnRlZ2VyCisvLy8gICAgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU1JBVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JhaV9waTE2KF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3Jhd2koKF9fdjRoaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIDMyLWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHBhcmFtZXRlciwKKy8vLyAgICB3aGljaCBpcyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0sIGJ5IHRoZSBudW1iZXIgb2YgYml0cworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIHBhcmFtZXRlciwgd2hpY2ggaXMgYSA2NC1iaXQgaW50ZWdlci4gSGlnaC1vcmRlcgorLy8vICAgIGJpdHMgYXJlIGZpbGxlZCB3aXRoIHRoZSBzaWduIGJpdCBvZiB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBlYWNoIDMyLWJpdAorLy8vICAgIGVsZW1lbnQuIFRoZSAzMi1iaXQgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YKKy8vLyAgICBbMiB4IGkzMl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNSQUQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgNjQtYml0IGludGVnZXIuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmFfcGkzMihfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3JhZCgoX192MnNpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIGVhY2ggMzItYml0IGludGVnZXIgZWxlbWVudCBvZiBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9mIFsyIHggaTMyXSBieSB0aGUgbnVtYmVyIG9mIGJpdHMgc3BlY2lmaWVkIGJ5IGEgMzItYml0IGludGVnZXIuCisvLy8gICAgSGlnaC1vcmRlciBiaXRzIGFyZSBmaWxsZWQgd2l0aCB0aGUgc2lnbiBiaXQgb2YgdGhlIGluaXRpYWwgdmFsdWUgb2YgZWFjaAorLy8vICAgIDMyLWJpdCBlbGVtZW50LiBUaGUgMzItYml0IHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIKKy8vLyAgICB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTUkFEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgMzItYml0IGludGVnZXIgdmFsdWUuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmFpX3BpMzIoX19tNjQgX19tLCBpbnQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzcmFkaSgoX192MnNpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIGVhY2ggMTYtYml0IGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyLAorLy8vICAgIHdoaWNoIGlzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSwgYnkgdGhlIG51bWJlciBvZiBiaXRzCisvLy8gICAgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgcGFyYW1ldGVyLCB3aGljaCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBIaWdoLW9yZGVyCisvLy8gICAgYml0cyBhcmUgY2xlYXJlZC4gVGhlIDE2LWJpdCByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdCBpbnRlZ2VyCisvLy8gICAgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU1JMVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBpbnRlcnByZXRlZCBhcyBhIHNpbmdsZSA2NC1iaXQgaW50ZWdlci4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybF9waTE2KF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3Bzcmx3KChfX3Y0aGkpX19tLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCAxNi1iaXQgaW50ZWdlciBlbGVtZW50IG9mIGEgNjQtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb2YgWzQgeCBpMTZdIGJ5IHRoZSBudW1iZXIgb2YgYml0cyBzcGVjaWZpZWQgYnkgYSAzMi1iaXQgaW50ZWdlci4KKy8vLyAgICBIaWdoLW9yZGVyIGJpdHMgYXJlIGNsZWFyZWQuIFRoZSAxNi1iaXQgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNSTFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybGlfcGkxNihfX202NCBfX20sIGludCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNybHdpKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCAzMi1iaXQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIsCisvLy8gICAgd2hpY2ggaXMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLCBieSB0aGUgbnVtYmVyIG9mIGJpdHMKKy8vLyAgICBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgNjQtYml0IGludGVnZXIuIEhpZ2gtb3JkZXIKKy8vLyAgICBiaXRzIGFyZSBjbGVhcmVkLiBUaGUgMzItYml0IHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIKKy8vLyAgICB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTUkxEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGludGVycHJldGVkIGFzIGEgc2luZ2xlIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsX3BpMzIoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNybGQoKF9fdjJzaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIDMyLWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBvZiBbMiB4IGkzMl0gYnkgdGhlIG51bWJlciBvZiBiaXRzIHNwZWNpZmllZCBieSBhIDMyLWJpdCBpbnRlZ2VyLgorLy8vICAgIEhpZ2gtb3JkZXIgYml0cyBhcmUgY2xlYXJlZC4gVGhlIDMyLWJpdCByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU1JMRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsaV9waTMyKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3JsZGkoKF9fdjJzaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyB0aGUgZmlyc3QgNjQtYml0IGludGVnZXIgcGFyYW1ldGVyIGJ5IHRoZSBudW1iZXIgb2YgYml0cworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIDY0LWJpdCBpbnRlZ2VyIHBhcmFtZXRlci4gSGlnaC1vcmRlciBiaXRzIGFyZQorLy8vICAgIGNsZWFyZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNSTFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgNjQtYml0IGludGVnZXIuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBpbnRlcnByZXRlZCBhcyBhIHNpbmdsZSA2NC1iaXQgaW50ZWdlci4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsX3NpNjQoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNybHEoKF9fdjFkaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyB0aGUgZmlyc3QgcGFyYW1ldGVyLCB3aGljaCBpcyBhIDY0LWJpdCBpbnRlZ2VyLCBieSB0aGUKKy8vLyAgICBudW1iZXIgb2YgYml0cyBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgMzItYml0CisvLy8gICAgaW50ZWdlci4gSGlnaC1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTUkxRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGludGVycHJldGVkIGFzIGEgc2luZ2xlIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsaV9zaTY0KF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3JscWkoKF9fdjFkaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFORCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBiaXR3aXNlIEFORCBvZiBib3RoCisvLy8gICAgcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FuZF9zaTY0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BhbmQoKF9fdjFkaSlfX20xLCAoX192MWRpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBOT1Qgb2YgdGhlIGZpcnN0IDY0LWJpdCBpbnRlZ2VyIHZlY3RvciwgYW5kIHRoZW4KKy8vLyAgICBwZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0IGFuZCB0aGUgc2Vjb25kIDY0LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9yLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBBTkROIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4gVGhlIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgdXNlZAorLy8vICAgIGluIHRoZSBiaXR3aXNlIEFORC4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZSBzZWNvbmQKKy8vLyAgICBwYXJhbWV0ZXIgYW5kIHRoZSBvbmUncyBjb21wbGVtZW50IG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hbmRub3Rfc2k2NChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wYW5kbigoX192MWRpKV9fbTEsIChfX3YxZGkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIE9SIG9mIHR3byA2NC1iaXQgaW50ZWdlciB2ZWN0b3JzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBPUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBiaXR3aXNlIE9SIG9mIGJvdGgKKy8vLyAgICBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fb3Jfc2k2NChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wb3IoKF9fdjFkaSlfX20xLCAoX192MWRpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBleGNsdXNpdmUgT1Igb2YgdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFhPUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBiaXR3aXNlIGV4Y2x1c2l2ZSBPUiBvZiBib3RoCisvLy8gICAgcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3hvcl9zaTY0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3B4b3IoKF9fdjFkaSlfX20xLCAoX192MWRpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHRoZSA4LWJpdCBpbnRlZ2VyIGVsZW1lbnRzIG9mIHR3byA2NC1iaXQgaW50ZWdlciB2ZWN0b3JzIG9mCisvLy8gICAgWzggeCBpOF0gdG8gZGV0ZXJtaW5lIGlmIHRoZSBlbGVtZW50IG9mIHRoZSBmaXJzdCB2ZWN0b3IgaXMgZXF1YWwgdG8gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBzZWNvbmQgdmVjdG9yLiBUaGUgY29tcGFyaXNvbiB5aWVsZHMgMCBmb3IKKy8vLyAgICBmYWxzZSwgMHhGRiBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQ01QRVFCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24KKy8vLyAgICByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wY21wZXFiKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgMTYtYml0IGludGVnZXIgZWxlbWVudHMgb2YgdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMgb2YKKy8vLyAgICBbNCB4IGkxNl0gdG8gZGV0ZXJtaW5lIGlmIHRoZSBlbGVtZW50IG9mIHRoZSBmaXJzdCB2ZWN0b3IgaXMgZXF1YWwgdG8gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBzZWNvbmQgdmVjdG9yLiBUaGUgY29tcGFyaXNvbiB5aWVsZHMgMCBmb3IKKy8vLyAgICBmYWxzZSwgMHhGRkZGIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBDTVBFUVcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbgorLy8vICAgIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wY21wZXF3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgMzItYml0IGludGVnZXIgZWxlbWVudHMgb2YgdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMgb2YKKy8vLyAgICBbMiB4IGkzMl0gdG8gZGV0ZXJtaW5lIGlmIHRoZSBlbGVtZW50IG9mIHRoZSBmaXJzdCB2ZWN0b3IgaXMgZXF1YWwgdG8gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBzZWNvbmQgdmVjdG9yLiBUaGUgY29tcGFyaXNvbiB5aWVsZHMgMCBmb3IKKy8vLyAgICBmYWxzZSwgMHhGRkZGRkZGRiBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQ01QRVFEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24KKy8vLyAgICByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGNtcGVxZCgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdGhlIDgtYml0IGludGVnZXIgZWxlbWVudHMgb2YgdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMgb2YKKy8vLyAgICBbOCB4IGk4XSB0byBkZXRlcm1pbmUgaWYgdGhlIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHZlY3RvciBpcyBncmVhdGVyIHRoYW4KKy8vLyAgICB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBzZWNvbmQgdmVjdG9yLiBUaGUgY29tcGFyaXNvbiB5aWVsZHMgMAorLy8vICAgIGZvciBmYWxzZSwgMHhGRiBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQ01QR1RCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24KKy8vLyAgICByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wY21wZ3RiKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgMTYtYml0IGludGVnZXIgZWxlbWVudHMgb2YgdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMgb2YKKy8vLyAgICBbNCB4IGkxNl0gdG8gZGV0ZXJtaW5lIGlmIHRoZSBlbGVtZW50IG9mIHRoZSBmaXJzdCB2ZWN0b3IgaXMgZ3JlYXRlciB0aGFuCisvLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgc2Vjb25kIHZlY3Rvci4gVGhlIGNvbXBhcmlzb24geWllbGRzIDAKKy8vLyAgICBmb3IgZmFsc2UsIDB4RkZGRiBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQ01QR1RXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24KKy8vLyAgICByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGNtcGd0dygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdGhlIDMyLWJpdCBpbnRlZ2VyIGVsZW1lbnRzIG9mIHR3byA2NC1iaXQgaW50ZWdlciB2ZWN0b3JzIG9mCisvLy8gICAgWzIgeCBpMzJdIHRvIGRldGVybWluZSBpZiB0aGUgZWxlbWVudCBvZiB0aGUgZmlyc3QgdmVjdG9yIGlzIGdyZWF0ZXIgdGhhbgorLy8vICAgIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHNlY29uZCB2ZWN0b3IuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwCisvLy8gICAgZm9yIGZhbHNlLCAweEZGRkZGRkZGIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBDTVBHVEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbgorLy8vICAgIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wY21wZ3RkKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIGluaXRpYWxpemVkIHRvIHplcm8uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgdGhlIFxjIFZYT1JQUyAvIFhPUlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgdmVjdG9yIHdpdGggYWxsIGVsZW1lbnRzIHNldCB0byB6ZXJvLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0emVyb19zaTY0KHZvaWQpCit7CisgICAgcmV0dXJuIChfX202NCl7IDBMTCB9OworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisvLy8gICAgMzItYml0IGludGVnZXIgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2kxCisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHVwcGVyIDMyIGJpdHMgb2YgdGhlCisvLy8gICAgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2kwCisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlCisvLy8gICAgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9waTMyKGludCBfX2kxLCBpbnQgX19pMCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3ZlY19pbml0X3Yyc2koX19pMCwgX19pMSk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBpbml0aWFsaXplZCB3aXRoIHRoZSBzcGVjaWZpZWQKKy8vLyAgICAxNi1iaXQgaW50ZWdlciB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fczMKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs2Mzo0OF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19zMgorLy8vICAgIEEgMTYtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzQ3OjMyXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX3MxCisvLy8gICAgQSAxNi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMzE6MTZdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fczAKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFsxNTowXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9waTE2KHNob3J0IF9fczMsIHNob3J0IF9fczIsIHNob3J0IF9fczEsIHNob3J0IF9fczApCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl92ZWNfaW5pdF92NGhpKF9fczAsIF9fczEsIF9fczIsIF9fczMpOworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisvLy8gICAgOC1iaXQgaW50ZWdlciB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYjcKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs2Mzo1Nl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iNgorLy8vICAgIEFuIDgtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzU1OjQ4XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2I1CisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNDc6NDBdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYjQKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFszOTozMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iMworLy8vICAgIEFuIDgtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzMxOjI0XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IyCisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMjM6MTZdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYjEKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFsxNTo4XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IwCisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNzowXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9waTgoY2hhciBfX2I3LCBjaGFyIF9fYjYsIGNoYXIgX19iNSwgY2hhciBfX2I0LCBjaGFyIF9fYjMsIGNoYXIgX19iMiwKKyAgICAgICAgICAgIGNoYXIgX19iMSwgY2hhciBfX2IwKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfdmVjX2luaXRfdjhxaShfX2IwLCBfX2IxLCBfX2IyLCBfX2IzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2I0LCBfX2I1LCBfX2I2LCBfX2I3KTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSwgd2l0aCBlYWNoIG9mIHRoZQorLy8vICAgIDMyLWJpdCBpbnRlZ2VyIHZlY3RvciBlbGVtZW50cyBzZXQgdG8gdGhlIHNwZWNpZmllZCAzMi1iaXQgaW50ZWdlcgorLy8vICAgIHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU0hVRkQgLyBQU0hVRkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19pCisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgZWFjaCB2ZWN0b3IgZWxlbWVudCBvZiB0aGUKKy8vLyAgICByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldDFfcGkzMihpbnQgX19pKQoreworICAgIHJldHVybiBfbW1fc2V0X3BpMzIoX19pLCBfX2kpOworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLCB3aXRoIGVhY2ggb2YgdGhlCisvLy8gICAgMTYtYml0IGludGVnZXIgdmVjdG9yIGVsZW1lbnRzIHNldCB0byB0aGUgc3BlY2lmaWVkIDE2LWJpdCBpbnRlZ2VyCisvLy8gICAgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTSFVGTFcgLyBQU0hVRkxXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fdworLy8vICAgIEEgMTYtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGVhY2ggdmVjdG9yIGVsZW1lbnQgb2YgdGhlCisvLy8gICAgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXQxX3BpMTYoc2hvcnQgX193KQoreworICAgIHJldHVybiBfbW1fc2V0X3BpMTYoX193LCBfX3csIF9fdywgX193KTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLCB3aXRoIGVhY2ggb2YgdGhlCisvLy8gICAgOC1iaXQgaW50ZWdlciB2ZWN0b3IgZWxlbWVudHMgc2V0IHRvIHRoZSBzcGVjaWZpZWQgOC1iaXQgaW50ZWdlciB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFVOUENLTEJXICsgVlBTSFVGTFcgLyBcYyBQVU5QQ0tMQlcgKworLy8vICAgIFBTSFVGTFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgZWFjaCB2ZWN0b3IgZWxlbWVudCBvZiB0aGUKKy8vLyAgICByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0MV9waTgoY2hhciBfX2IpCit7CisgICAgcmV0dXJuIF9tbV9zZXRfcGk4KF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iKTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yLCBpbml0aWFsaXplZCBpbiByZXZlcnNlIG9yZGVyIHdpdGgKKy8vLyAgICB0aGUgc3BlY2lmaWVkIDMyLWJpdCBpbnRlZ2VyIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19pMAorLy8vICAgIEEgMzItYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZQorLy8vICAgIHJlc3VsdC4KKy8vLyBccGFyYW0gX19pMQorLy8vICAgIEEgMzItYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZQorLy8vICAgIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCA2NC1iaXQgaW50ZWdlciB2ZWN0b3IuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRyX3BpMzIoaW50IF9faTAsIGludCBfX2kxKQoreworICAgIHJldHVybiBfbW1fc2V0X3BpMzIoX19pMSwgX19pMCk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciwgaW5pdGlhbGl6ZWQgaW4gcmV2ZXJzZSBvcmRlciB3aXRoCisvLy8gICAgdGhlIHNwZWNpZmllZCAxNi1iaXQgaW50ZWdlciB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fdzAKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFsxNTowXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX3cxCisvLy8gICAgQSAxNi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMzE6MTZdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fdzIKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs0NzozMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX193MworLy8vICAgIEEgMTYtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzYzOjQ4XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHJfcGkxNihzaG9ydCBfX3cwLCBzaG9ydCBfX3cxLCBzaG9ydCBfX3cyLCBzaG9ydCBfX3czKQoreworICAgIHJldHVybiBfbW1fc2V0X3BpMTYoX193MywgX193MiwgX193MSwgX193MCk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciwgaW5pdGlhbGl6ZWQgaW4gcmV2ZXJzZSBvcmRlciB3aXRoCisvLy8gICAgdGhlIHNwZWNpZmllZCA4LWJpdCBpbnRlZ2VyIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19iMAorLy8vICAgIEFuIDgtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzc6MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iMQorLy8vICAgIEFuIDgtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzE1OjhdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYjIKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFsyMzoxNl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iMworLy8vICAgIEFuIDgtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzMxOjI0XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2I0CisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMzk6MzJdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYjUKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs0Nzo0MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iNgorLy8vICAgIEFuIDgtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzU1OjQ4XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2I3CisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNjM6NTZdIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgdmVjdG9yLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0cl9waTgoY2hhciBfX2IwLCBjaGFyIF9fYjEsIGNoYXIgX19iMiwgY2hhciBfX2IzLCBjaGFyIF9fYjQsIGNoYXIgX19iNSwKKyAgICAgICAgICAgICBjaGFyIF9fYjYsIGNoYXIgX19iNykKK3sKKyAgICByZXR1cm4gX21tX3NldF9waTgoX19iNywgX19iNiwgX19iNSwgX19iNCwgX19iMywgX19iMiwgX19iMSwgX19iMCk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworLyogQWxpYXNlcyBmb3IgY29tcGF0aWJpbGl0eS4gKi8KKyNkZWZpbmUgX21fZW1wdHkgX21tX2VtcHR5CisjZGVmaW5lIF9tX2Zyb21faW50IF9tbV9jdnRzaTMyX3NpNjQKKyNkZWZpbmUgX21fZnJvbV9pbnQ2NCBfbW1fY3Z0c2k2NF9tNjQKKyNkZWZpbmUgX21fdG9faW50IF9tbV9jdnRzaTY0X3NpMzIKKyNkZWZpbmUgX21fdG9faW50NjQgX21tX2N2dG02NF9zaTY0CisjZGVmaW5lIF9tX3BhY2tzc3diIF9tbV9wYWNrc19waTE2CisjZGVmaW5lIF9tX3BhY2tzc2R3IF9tbV9wYWNrc19waTMyCisjZGVmaW5lIF9tX3BhY2t1c3diIF9tbV9wYWNrc19wdTE2CisjZGVmaW5lIF9tX3B1bnBja2hidyBfbW1fdW5wYWNraGlfcGk4CisjZGVmaW5lIF9tX3B1bnBja2h3ZCBfbW1fdW5wYWNraGlfcGkxNgorI2RlZmluZSBfbV9wdW5wY2toZHEgX21tX3VucGFja2hpX3BpMzIKKyNkZWZpbmUgX21fcHVucGNrbGJ3IF9tbV91bnBhY2tsb19waTgKKyNkZWZpbmUgX21fcHVucGNrbHdkIF9tbV91bnBhY2tsb19waTE2CisjZGVmaW5lIF9tX3B1bnBja2xkcSBfbW1fdW5wYWNrbG9fcGkzMgorI2RlZmluZSBfbV9wYWRkYiBfbW1fYWRkX3BpOAorI2RlZmluZSBfbV9wYWRkdyBfbW1fYWRkX3BpMTYKKyNkZWZpbmUgX21fcGFkZGQgX21tX2FkZF9waTMyCisjZGVmaW5lIF9tX3BhZGRzYiBfbW1fYWRkc19waTgKKyNkZWZpbmUgX21fcGFkZHN3IF9tbV9hZGRzX3BpMTYKKyNkZWZpbmUgX21fcGFkZHVzYiBfbW1fYWRkc19wdTgKKyNkZWZpbmUgX21fcGFkZHVzdyBfbW1fYWRkc19wdTE2CisjZGVmaW5lIF9tX3BzdWJiIF9tbV9zdWJfcGk4CisjZGVmaW5lIF9tX3BzdWJ3IF9tbV9zdWJfcGkxNgorI2RlZmluZSBfbV9wc3ViZCBfbW1fc3ViX3BpMzIKKyNkZWZpbmUgX21fcHN1YnNiIF9tbV9zdWJzX3BpOAorI2RlZmluZSBfbV9wc3Vic3cgX21tX3N1YnNfcGkxNgorI2RlZmluZSBfbV9wc3VidXNiIF9tbV9zdWJzX3B1OAorI2RlZmluZSBfbV9wc3VidXN3IF9tbV9zdWJzX3B1MTYKKyNkZWZpbmUgX21fcG1hZGR3ZCBfbW1fbWFkZF9waTE2CisjZGVmaW5lIF9tX3BtdWxodyBfbW1fbXVsaGlfcGkxNgorI2RlZmluZSBfbV9wbXVsbHcgX21tX211bGxvX3BpMTYKKyNkZWZpbmUgX21fcHNsbHcgX21tX3NsbF9waTE2CisjZGVmaW5lIF9tX3BzbGx3aSBfbW1fc2xsaV9waTE2CisjZGVmaW5lIF9tX3BzbGxkIF9tbV9zbGxfcGkzMgorI2RlZmluZSBfbV9wc2xsZGkgX21tX3NsbGlfcGkzMgorI2RlZmluZSBfbV9wc2xscSBfbW1fc2xsX3NpNjQKKyNkZWZpbmUgX21fcHNsbHFpIF9tbV9zbGxpX3NpNjQKKyNkZWZpbmUgX21fcHNyYXcgX21tX3NyYV9waTE2CisjZGVmaW5lIF9tX3BzcmF3aSBfbW1fc3JhaV9waTE2CisjZGVmaW5lIF9tX3BzcmFkIF9tbV9zcmFfcGkzMgorI2RlZmluZSBfbV9wc3JhZGkgX21tX3NyYWlfcGkzMgorI2RlZmluZSBfbV9wc3JsdyBfbW1fc3JsX3BpMTYKKyNkZWZpbmUgX21fcHNybHdpIF9tbV9zcmxpX3BpMTYKKyNkZWZpbmUgX21fcHNybGQgX21tX3NybF9waTMyCisjZGVmaW5lIF9tX3BzcmxkaSBfbW1fc3JsaV9waTMyCisjZGVmaW5lIF9tX3BzcmxxIF9tbV9zcmxfc2k2NAorI2RlZmluZSBfbV9wc3JscWkgX21tX3NybGlfc2k2NAorI2RlZmluZSBfbV9wYW5kIF9tbV9hbmRfc2k2NAorI2RlZmluZSBfbV9wYW5kbiBfbW1fYW5kbm90X3NpNjQKKyNkZWZpbmUgX21fcG9yIF9tbV9vcl9zaTY0CisjZGVmaW5lIF9tX3B4b3IgX21tX3hvcl9zaTY0CisjZGVmaW5lIF9tX3BjbXBlcWIgX21tX2NtcGVxX3BpOAorI2RlZmluZSBfbV9wY21wZXF3IF9tbV9jbXBlcV9waTE2CisjZGVmaW5lIF9tX3BjbXBlcWQgX21tX2NtcGVxX3BpMzIKKyNkZWZpbmUgX21fcGNtcGd0YiBfbW1fY21wZ3RfcGk4CisjZGVmaW5lIF9tX3BjbXBndHcgX21tX2NtcGd0X3BpMTYKKyNkZWZpbmUgX21fcGNtcGd0ZCBfbW1fY21wZ3RfcGkzMgorCisjZW5kaWYgLyogX19NTUlOVFJJTl9IICovCisKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW9kdWxlLm1vZHVsZW1hcCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW9kdWxlLm1vZHVsZW1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQwZDJjCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9tb2R1bGUubW9kdWxlbWFwCkBAIC0wLDAgKzEsMTY0IEBACisvKj09PS0tLS0gbW9kdWxlLm1vZHVsZW1hcCAtIGludHJpbnNpY3MgbW9kdWxlIG1hcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCittb2R1bGUgX0J1aWx0aW5faW50cmluc2ljcyBbc3lzdGVtXSBbZXh0ZXJuX2NdIHsKKyAgZXhwbGljaXQgbW9kdWxlIGFsdGl2ZWMgeworICAgIHJlcXVpcmVzIGFsdGl2ZWMKKyAgICBoZWFkZXIgImFsdGl2ZWMuaCIKKyAgfQorCisgIGV4cGxpY2l0IG1vZHVsZSBhcm0geworICAgIHJlcXVpcmVzIGFybQorCisgICAgZXhwbGljaXQgbW9kdWxlIGFjbGUgeworICAgICAgaGVhZGVyICJhcm1fYWNsZS5oIgorICAgICAgZXhwb3J0ICoKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgbmVvbiB7CisgICAgICByZXF1aXJlcyBuZW9uCisgICAgICBoZWFkZXIgImFybV9uZW9uLmgiCisgICAgICBleHBvcnQgKgorICAgIH0KKyAgfQorCisgIGV4cGxpY2l0IG1vZHVsZSBpbnRlbCB7CisgICAgcmVxdWlyZXMgeDg2CisgICAgZXhwb3J0ICoKKworICAgIGhlYWRlciAiaW1taW50cmluLmgiCisgICAgdGV4dHVhbCBoZWFkZXIgImYxNmNpbnRyaW4uaCIKKyAgICB0ZXh0dWFsIGhlYWRlciAiYXZ4aW50cmluLmgiCisgICAgdGV4dHVhbCBoZWFkZXIgImF2eDJpbnRyaW4uaCIKKyAgICB0ZXh0dWFsIGhlYWRlciAiYXZ4NTEyZmludHJpbi5oIgorICAgIHRleHR1YWwgaGVhZGVyICJhdng1MTJlcmludHJpbi5oIgorICAgIHRleHR1YWwgaGVhZGVyICJmbWFpbnRyaW4uaCIKKworICAgIGhlYWRlciAieDg2aW50cmluLmgiCisgICAgdGV4dHVhbCBoZWFkZXIgImJtaWludHJpbi5oIgorICAgIHRleHR1YWwgaGVhZGVyICJibWkyaW50cmluLmgiCisgICAgdGV4dHVhbCBoZWFkZXIgImx6Y250aW50cmluLmgiCisgICAgdGV4dHVhbCBoZWFkZXIgInhvcGludHJpbi5oIgorICAgIHRleHR1YWwgaGVhZGVyICJmbWE0aW50cmluLmgiCisgICAgdGV4dHVhbCBoZWFkZXIgIm13YWl0eGludHJpbi5oIgorCisgICAgZXhwbGljaXQgbW9kdWxlIG1tX21hbGxvYyB7CisgICAgICBoZWFkZXIgIm1tX21hbGxvYy5oIgorICAgICAgZXhwb3J0ICogLy8gbm90ZTogZm9yIDxzdGRsaWIuaD4gZGVwZW5kZW5jeQorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBjcHVpZCB7CisgICAgICBoZWFkZXIgImNwdWlkLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIG1teCB7CisgICAgICBoZWFkZXIgIm1taW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIHNzZSB7CisgICAgICBleHBvcnQgbW1fbWFsbG9jCisgICAgICBleHBvcnQgbW14CisgICAgICBleHBvcnQgc3NlMiAvLyBub3RlOiBmb3IgaGFja2lzaCA8ZW1taW50cmluLmg+IGRlcGVuZGVuY3kKKyAgICAgIGhlYWRlciAieG1taW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIHNzZTIgeworICAgICAgZXhwb3J0IHNzZQorICAgICAgaGVhZGVyICJlbW1pbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgc3NlMyB7CisgICAgICBleHBvcnQgc3NlMgorICAgICAgaGVhZGVyICJwbW1pbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgc3NzZTMgeworICAgICAgZXhwb3J0IHNzZTMKKyAgICAgIGhlYWRlciAidG1taW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIHNzZTRfMSB7CisgICAgICBleHBvcnQgc3NzZTMKKyAgICAgIGhlYWRlciAic21taW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIHNzZTRfMiB7CisgICAgICBleHBvcnQgc3NlNF8xCisgICAgICBoZWFkZXIgIm5tbWludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBzc2U0YSB7CisgICAgICBleHBvcnQgc3NlMworICAgICAgaGVhZGVyICJhbW1pbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgcG9wY250IHsKKyAgICAgIGhlYWRlciAicG9wY250aW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIG1tM2Rub3cgeworICAgICAgaGVhZGVyICJtbTNkbm93LmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIGFlc19wY2xtdWwgeworICAgICAgaGVhZGVyICJ3bW1pbnRyaW4uaCIKKyAgICAgIGV4cG9ydCBhZXMKKyAgICAgIGV4cG9ydCBwY2xtdWwKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgYWVzIHsKKyAgICAgIGhlYWRlciAiX193bW1pbnRyaW5fYWVzLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIHBjbG11bCB7CisgICAgICBoZWFkZXIgIl9fd21taW50cmluX3BjbG11bC5oIgorICAgIH0KKyAgfQorCisgIGV4cGxpY2l0IG1vZHVsZSBzeXN0ZW16IHsKKyAgICByZXF1aXJlcyBzeXN0ZW16CisgICAgZXhwb3J0ICoKKworICAgIGhlYWRlciAiczM5MGludHJpbi5oIgorCisgICAgZXhwbGljaXQgbW9kdWxlIGh0bSB7CisgICAgICByZXF1aXJlcyBodG0KKyAgICAgIGhlYWRlciAiaHRtaW50cmluLmgiCisgICAgICBoZWFkZXIgImh0bXhsaW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIHp2ZWN0b3IgeworICAgICAgcmVxdWlyZXMgenZlY3RvciwgdngKKyAgICAgIGhlYWRlciAidmVjaW50cmluLmgiCisgICAgfQorICB9Cit9CisKK21vZHVsZSBfQnVpbHRpbl9zdGRkZWZfbWF4X2FsaWduX3QgW3N5c3RlbV0gW2V4dGVybl9jXSB7CisgIGhlYWRlciAiX19zdGRkZWZfbWF4X2FsaWduX3QuaCIKK30KKworbW9kdWxlIG9wZW5jbF9jIHsKKyAgcmVxdWlyZXMgb3BlbmNsCisgIGhlYWRlciAib3BlbmNsLWMuaCIKK30KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbXdhaXR4aW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL213YWl0eGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNWYyYWMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL213YWl0eGludHJpbi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qPT09LS0tLSBtd2FpdHhpbnRyaW4uaCAtIE1PTklUT1JYL01XQUlUWCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YODZJTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPG13YWl0eGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX01XQUlUWElOVFJJTl9ICisjZGVmaW5lIF9NV0FJVFhJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sICBfX3RhcmdldF9fKCJtd2FpdHgiKSkpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vbml0b3J4KHZvaWQgY29uc3QgKiBfX3AsIHVuc2lnbmVkIF9fZXh0ZW5zaW9ucywgdW5zaWduZWQgX19oaW50cykKK3sKKyAgX19idWlsdGluX2lhMzJfbW9uaXRvcngoKHZvaWQgKilfX3AsIF9fZXh0ZW5zaW9ucywgX19oaW50cyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXdhaXR4KHVuc2lnbmVkIF9fZXh0ZW5zaW9ucywgdW5zaWduZWQgX19oaW50cywgdW5zaWduZWQgX19jbG9jaykKK3sKKyAgX19idWlsdGluX2lhMzJfbXdhaXR4KF9fZXh0ZW5zaW9ucywgX19oaW50cywgX19jbG9jayk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9NV0FJVFhJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ubW1pbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbm1taW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmZWMxNQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbm1taW50cmluLmgKQEAgLTAsMCArMSwzMCBAQAorLyo9PT0tLS0tIG5tbWludHJpbi5oIC0gU1NFNCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfTk1NSU5UUklOX0gKKyNkZWZpbmUgX05NTUlOVFJJTl9ICisKKy8qIFRvIG1hdGNoIGV4cGVjdGF0aW9ucyBvZiBnY2Mgd2UgcHV0IHRoZSBzc2U0LjIgZGVmaW5pdGlvbnMgaW50byBzbW1pbnRyaW4uaCwKKyAgIGp1c3QgaW5jbHVkZSBpdCBub3cgdGhlbi4gICovCisjaW5jbHVkZSA8c21taW50cmluLmg+CisjZW5kaWYgLyogX05NTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL29wZW5jbC1jLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL29wZW5jbC1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyOTI3NAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvb3BlbmNsLWMuaApAQCAtMCwwICsxLDE2OTYyIEBACisvLz09PS0tLSBvcGVuY2wtYy5oIC0gT3BlbkNMIEMgbGFuZ3VhZ2UgYnVpbHRpbiBmdW5jdGlvbiBoZWFkZXIgLS0tLS0tLS0tLS09PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisjaWZuZGVmIF9PUEVOQ0xfSF8KKyNkZWZpbmUgX09QRU5DTF9IXworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKyNpZm5kZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworI2RlZmluZSBjbF9raHJfZGVwdGhfaW1hZ2VzCisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisjZGVmaW5lIF9fb3ZsZCBfX2F0dHJpYnV0ZV9fKChvdmVybG9hZGFibGUpKQorCisvLyBPcHRpbWl6YXRpb25zCisjZGVmaW5lIF9fcHVyZWZuIF9fYXR0cmlidXRlX18oKHB1cmUpKQorI2RlZmluZSBfX2NuZm4gX19hdHRyaWJ1dGVfXygoY29uc3QpKQorCisvLyBidWlsdC1pbiBzY2FsYXIgZGF0YSB0eXBlczoKKworLyoqCisgKiBBbiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWNoYXI7CisKKy8qKgorICogQW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0OworCisvKioKKyAqIEFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OworCisvKioKKyAqIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxvbmc7CisKKy8qKgorICogVGhlIHVuc2lnbmVkIGludGVnZXIgdHlwZSBvZiB0aGUgcmVzdWx0IG9mIHRoZSBzaXplb2Ygb3BlcmF0b3IuIFRoaXMKKyAqIGlzIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgaWYgQ0xfREVWSUNFX0FERFJFU1NfQklUUworICogZGVmaW5lZCBpbiB0YWJsZSA0LjMgaXMgMzItYml0cyBhbmQgaXMgYSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBpZgorICogQ0xfREVWSUNFX0FERFJFU1NfQklUUyBpcyA2NC1iaXRzLgorICovCit0eXBlZGVmIF9fU0laRV9UWVBFX18gc2l6ZV90OworCisvKioKKyAqIEEgc2lnbmVkIGludGVnZXIgdHlwZSB0aGF0IGlzIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgdHdvIHBvaW50ZXJzLgorICogVGhpcyBpcyBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpZiBDTF9ERVZJQ0VfQUREUkVTU19CSVRTCisgKiBkZWZpbmVkIGluIHRhYmxlIDQuMyBpcyAzMi1iaXRzIGFuZCBpcyBhIDY0LWJpdCBzaWduZWQgaW50ZWdlciBpZgorICogQ0xfREVWSUNFX0FERFJFU1NfQklUUyBpcyA2NC1iaXRzLgorICovCit0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gcHRyZGlmZl90OworCisvKioKKyogQSBzaWduZWQgaW50ZWdlciB0eXBlIHdpdGggdGhlIHByb3BlcnR5IHRoYXQgYW55IHZhbGlkIHBvaW50ZXIgdG8KKyogdm9pZCBjYW4gYmUgY29udmVydGVkIHRvIHRoaXMgdHlwZSwgdGhlbiBjb252ZXJ0ZWQgYmFjayB0byBwb2ludGVyCisqIHRvIHZvaWQsIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29tcGFyZSBlcXVhbCB0byB0aGUgb3JpZ2luYWwgcG9pbnRlci4KKyovCit0eXBlZGVmIF9fSU5UUFRSX1RZUEVfXyBpbnRwdHJfdDsKKworLyoqCisqIEFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSB3aXRoIHRoZSBwcm9wZXJ0eSB0aGF0IGFueSB2YWxpZCBwb2ludGVyIHRvCisqIHZvaWQgY2FuIGJlIGNvbnZlcnRlZCB0byB0aGlzIHR5cGUsIHRoZW4gY29udmVydGVkIGJhY2sgdG8gcG9pbnRlcgorKiB0byB2b2lkLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbXBhcmUgZXF1YWwgdG8gdGhlIG9yaWdpbmFsIHBvaW50ZXIuCisqLwordHlwZWRlZiBfX1VJTlRQVFJfVFlQRV9fIHVpbnRwdHJfdDsKKworLy8gYnVpbHQtaW4gdmVjdG9yIGRhdGEgdHlwZXM6Cit0eXBlZGVmIGNoYXIgY2hhcjIgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7Cit0eXBlZGVmIGNoYXIgY2hhcjMgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDMpKSk7Cit0eXBlZGVmIGNoYXIgY2hhcjQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7Cit0eXBlZGVmIGNoYXIgY2hhcjggX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDgpKSk7Cit0eXBlZGVmIGNoYXIgY2hhcjE2IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgxNikpKTsKK3R5cGVkZWYgdWNoYXIgdWNoYXIyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOwordHlwZWRlZiB1Y2hhciB1Y2hhcjMgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDMpKSk7Cit0eXBlZGVmIHVjaGFyIHVjaGFyNCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsKK3R5cGVkZWYgdWNoYXIgdWNoYXI4IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg4KSkpOwordHlwZWRlZiB1Y2hhciB1Y2hhcjE2IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgxNikpKTsKK3R5cGVkZWYgc2hvcnQgc2hvcnQyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOwordHlwZWRlZiBzaG9ydCBzaG9ydDMgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDMpKSk7Cit0eXBlZGVmIHNob3J0IHNob3J0NCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsKK3R5cGVkZWYgc2hvcnQgc2hvcnQ4IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg4KSkpOwordHlwZWRlZiBzaG9ydCBzaG9ydDE2IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgxNikpKTsKK3R5cGVkZWYgdXNob3J0IHVzaG9ydDIgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7Cit0eXBlZGVmIHVzaG9ydCB1c2hvcnQzIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgzKSkpOwordHlwZWRlZiB1c2hvcnQgdXNob3J0NCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsKK3R5cGVkZWYgdXNob3J0IHVzaG9ydDggX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDgpKSk7Cit0eXBlZGVmIHVzaG9ydCB1c2hvcnQxNiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMTYpKSk7Cit0eXBlZGVmIGludCBpbnQyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOwordHlwZWRlZiBpbnQgaW50MyBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMykpKTsKK3R5cGVkZWYgaW50IGludDQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7Cit0eXBlZGVmIGludCBpbnQ4IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg4KSkpOwordHlwZWRlZiBpbnQgaW50MTYgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDE2KSkpOwordHlwZWRlZiB1aW50IHVpbnQyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOwordHlwZWRlZiB1aW50IHVpbnQzIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgzKSkpOwordHlwZWRlZiB1aW50IHVpbnQ0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOwordHlwZWRlZiB1aW50IHVpbnQ4IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg4KSkpOwordHlwZWRlZiB1aW50IHVpbnQxNiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMTYpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZzIgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZzMgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDMpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZzQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZzggX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDgpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZzE2IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgxNikpKTsKK3R5cGVkZWYgdWxvbmcgdWxvbmcyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOwordHlwZWRlZiB1bG9uZyB1bG9uZzMgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDMpKSk7Cit0eXBlZGVmIHVsb25nIHVsb25nNCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsKK3R5cGVkZWYgdWxvbmcgdWxvbmc4IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg4KSkpOwordHlwZWRlZiB1bG9uZyB1bG9uZzE2IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgxNikpKTsKK3R5cGVkZWYgZmxvYXQgZmxvYXQyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOwordHlwZWRlZiBmbG9hdCBmbG9hdDMgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDMpKSk7Cit0eXBlZGVmIGZsb2F0IGZsb2F0NCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsKK3R5cGVkZWYgZmxvYXQgZmxvYXQ4IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg4KSkpOwordHlwZWRlZiBmbG9hdCBmbG9hdDE2IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgxNikpKTsKKyNpZmRlZiBjbF9raHJfZnAxNgorI3ByYWdtYSBPUEVOQ0wgRVhURU5TSU9OIGNsX2tocl9mcDE2IDogZW5hYmxlCit0eXBlZGVmIGhhbGYgaGFsZjIgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7Cit0eXBlZGVmIGhhbGYgaGFsZjMgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDMpKSk7Cit0eXBlZGVmIGhhbGYgaGFsZjQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7Cit0eXBlZGVmIGhhbGYgaGFsZjggX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDgpKSk7Cit0eXBlZGVmIGhhbGYgaGFsZjE2IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgxNikpKTsKKyNlbmRpZgorI2lmZGVmIGNsX2tocl9mcDY0CisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPCBDTF9WRVJTSU9OXzFfMgorI3ByYWdtYSBPUEVOQ0wgRVhURU5TSU9OIGNsX2tocl9mcDY0IDogZW5hYmxlCisjZW5kaWYKK3R5cGVkZWYgZG91YmxlIGRvdWJsZTIgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7Cit0eXBlZGVmIGRvdWJsZSBkb3VibGUzIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgzKSkpOwordHlwZWRlZiBkb3VibGUgZG91YmxlNCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsKK3R5cGVkZWYgZG91YmxlIGRvdWJsZTggX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDgpKSk7Cit0eXBlZGVmIGRvdWJsZSBkb3VibGUxNiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMTYpKSk7CisjZW5kaWYKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisjZGVmaW5lIE5VTEwgKCh2b2lkKikwKQorI2VuZGlmCisKKy8qKgorICogVmFsdWUgb2YgbWF4aW11bSBub24taW5maW5pdGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludAorICogbnVtYmVyLgorICovCisjZGVmaW5lIE1BWEZMT0FUIDB4MS5mZmZmZmVwMTI3ZgorCisvKioKKyAqIEEgcG9zaXRpdmUgZmxvYXQgY29uc3RhbnQgZXhwcmVzc2lvbi4gSFVHRV9WQUxGIGV2YWx1YXRlcworICogdG8gK2luZmluaXR5LiBVc2VkIGFzIGFuIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBidWlsdC1pbgorICogbWF0aCBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgSFVHRV9WQUxGIChfX2J1aWx0aW5faHVnZV92YWxmKCkpCisKKy8qKgorICogQSBwb3NpdGl2ZSBkb3VibGUgY29uc3RhbnQgZXhwcmVzc2lvbi4gSFVHRV9WQUwgZXZhbHVhdGVzCisgKiB0byAraW5maW5pdHkuIFVzZWQgYXMgYW4gZXJyb3IgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGJ1aWx0LWluCisgKiBtYXRoIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBIVUdFX1ZBTCAoX19idWlsdGluX2h1Z2VfdmFsKCkpCisKKy8qKgorICogQSBjb25zdGFudCBleHByZXNzaW9uIG9mIHR5cGUgZmxvYXQgcmVwcmVzZW50aW5nIHBvc2l0aXZlIG9yCisgKiB1bnNpZ25lZCBpbmZpbml0eS4KKyAqLworI2RlZmluZSBJTkZJTklUWSAoX19idWlsdGluX2luZmYoKSkKKworLyoqCisgKiBBIGNvbnN0YW50IGV4cHJlc3Npb24gb2YgdHlwZSBmbG9hdCByZXByZXNlbnRpbmcgYSBxdWlldCBOYU4uCisgKi8KKyNkZWZpbmUgTkFOIGFzX2Zsb2F0KElOVF9NQVgpCisKKyNkZWZpbmUgRlBfSUxPR0IwICAgIElOVF9NSU4KKyNkZWZpbmUgRlBfSUxPR0JOQU4gICAgSU5UX01BWAorCisjZGVmaW5lIEZMVF9ESUcgNgorI2RlZmluZSBGTFRfTUFOVF9ESUcgMjQKKyNkZWZpbmUgRkxUX01BWF8xMF9FWFAgKzM4CisjZGVmaW5lIEZMVF9NQVhfRVhQICsxMjgKKyNkZWZpbmUgRkxUX01JTl8xMF9FWFAgLTM3CisjZGVmaW5lIEZMVF9NSU5fRVhQIC0xMjUKKyNkZWZpbmUgRkxUX1JBRElYIDIKKyNkZWZpbmUgRkxUX01BWCAweDEuZmZmZmZlcDEyN2YKKyNkZWZpbmUgRkxUX01JTiAweDEuMHAtMTI2ZgorI2RlZmluZSBGTFRfRVBTSUxPTiAweDEuMHAtMjNmCisKKyNkZWZpbmUgTV9FX0YgICAgICAgICAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MjUwZgorI2RlZmluZSBNX0xPRzJFX0YgICAgIDEuNDQyNjk1MDQwODg4OTYzNDA3MzU5OTI0NjgxMDAxODkyMTRmCisjZGVmaW5lIE1fTE9HMTBFX0YgICAgMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUwODJmCisjZGVmaW5lIE1fTE4yX0YgICAgICAgMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjhmCisjZGVmaW5lIE1fTE4xMF9GICAgICAgMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMWYKKyNkZWZpbmUgTV9QSV9GICAgICAgICAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjg4ZgorI2RlZmluZSBNX1BJXzJfRiAgICAgIDEuNTcwNzk2MzI2Nzk0ODk2NjE5MjMxMzIxNjkxNjM5NzUxNDRmCisjZGVmaW5lIE1fUElfNF9GICAgICAgMC43ODUzOTgxNjMzOTc0NDgzMDk2MTU2NjA4NDU4MTk4NzU3MjFmCisjZGVmaW5lIE1fMV9QSV9GICAgICAgMC4zMTgzMDk4ODYxODM3OTA2NzE1Mzc3Njc1MjY3NDUwMjg3MjRmCisjZGVmaW5lIE1fMl9QSV9GICAgICAgMC42MzY2MTk3NzIzNjc1ODEzNDMwNzU1MzUwNTM0OTAwNTc0NDhmCisjZGVmaW5lIE1fMl9TUVJUUElfRiAgMS4xMjgzNzkxNjcwOTU1MTI1NzM4OTYxNTg5MDMxMjE1NDUxN2YKKyNkZWZpbmUgTV9TUVJUMl9GICAgICAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4ODcyNDIwOTY5ODA4ZgorI2RlZmluZSBNX1NRUlQxXzJfRiAgIDAuNzA3MTA2NzgxMTg2NTQ3NTI0NDAwODQ0MzYyMTA0ODQ5MDM5ZgorCisjZGVmaW5lIERCTF9ESUcgMTUKKyNkZWZpbmUgREJMX01BTlRfRElHIDUzCisjZGVmaW5lIERCTF9NQVhfMTBfRVhQICszMDgKKyNkZWZpbmUgREJMX01BWF9FWFAgKzEwMjQKKyNkZWZpbmUgREJMX01JTl8xMF9FWFAgLTMwNworI2RlZmluZSBEQkxfTUlOX0VYUCAtMTAyMQorI2RlZmluZSBEQkxfUkFESVggMgorI2RlZmluZSBEQkxfTUFYIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyNkZWZpbmUgREJMX01JTiAweDEuMHAtMTAyMgorI2RlZmluZSBEQkxfRVBTSUxPTiAweDEuMHAtNTIKKworI2RlZmluZSBNX0UgICAgICAgICAgIDB4MS41YmYwYThiMTQ1NzY5cCsxCisjZGVmaW5lIE1fTE9HMkUgICAgICAgMHgxLjcxNTQ3NjUyYjgyZmVwKzAKKyNkZWZpbmUgTV9MT0cxMEUgICAgICAweDEuYmNiN2IxNTI2ZTUwZXAtMgorI2RlZmluZSBNX0xOMiAgICAgICAgIDB4MS42MmU0MmZlZmEzOWVmcC0xCisjZGVmaW5lIE1fTE4xMCAgICAgICAgMHgxLjI2YmIxYmJiNTU1MTZwKzEKKyNkZWZpbmUgTV9QSSAgICAgICAgICAweDEuOTIxZmI1NDQ0MmQxOHArMQorI2RlZmluZSBNX1BJXzIgICAgICAgIDB4MS45MjFmYjU0NDQyZDE4cCswCisjZGVmaW5lIE1fUElfNCAgICAgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTEKKyNkZWZpbmUgTV8xX1BJICAgICAgICAweDEuNDVmMzA2ZGM5Yzg4M3AtMgorI2RlZmluZSBNXzJfUEkgICAgICAgIDB4MS40NWYzMDZkYzljODgzcC0xCisjZGVmaW5lIE1fMl9TUVJUUEkgICAgMHgxLjIwZGQ3NTA0MjliNmRwKzAKKyNkZWZpbmUgTV9TUVJUMiAgICAgICAweDEuNmEwOWU2NjdmM2JjZHArMAorI2RlZmluZSBNX1NRUlQxXzIgICAgIDB4MS42YTA5ZTY2N2YzYmNkcC0xCisKKyNpZmRlZiBjbF9raHJfZnAxNgorCisjZGVmaW5lIEhBTEZfRElHIDMKKyNkZWZpbmUgSEFMRl9NQU5UX0RJRyAxMQorI2RlZmluZSBIQUxGX01BWF8xMF9FWFAgKzQKKyNkZWZpbmUgSEFMRl9NQVhfRVhQICsxNgorI2RlZmluZSBIQUxGX01JTl8xMF9FWFAgLTQKKyNkZWZpbmUgSEFMRl9NSU5fRVhQIC0xMworI2RlZmluZSBIQUxGX1JBRElYIDIKKyNkZWZpbmUgSEFMRl9NQVggKCgweDEuZmZjcDE1aCkpCisjZGVmaW5lIEhBTEZfTUlOICgoMHgxLjBwLTE0aCkpCisjZGVmaW5lIEhBTEZfRVBTSUxPTiAoKDB4MS4wcC0xMGgpKQorCisjZGVmaW5lIE1fRV9IICAgICAgICAgMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjI1MGgKKyNkZWZpbmUgTV9MT0cyRV9IICAgICAxLjQ0MjY5NTA0MDg4ODk2MzQwNzM1OTkyNDY4MTAwMTg5MjE0aAorI2RlZmluZSBNX0xPRzEwRV9IICAgIDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MDgyaAorI2RlZmluZSBNX0xOMl9IICAgICAgIDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4aAorI2RlZmluZSBNX0xOMTBfSCAgICAgIDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjFoCisjZGVmaW5lIE1fUElfSCAgICAgICAgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI4OGgKKyNkZWZpbmUgTV9QSV8yX0ggICAgICAxLjU3MDc5NjMyNjc5NDg5NjYxOTIzMTMyMTY5MTYzOTc1MTQ0aAorI2RlZmluZSBNX1BJXzRfSCAgICAgIDAuNzg1Mzk4MTYzMzk3NDQ4MzA5NjE1NjYwODQ1ODE5ODc1NzIxaAorI2RlZmluZSBNXzFfUElfSCAgICAgIDAuMzE4MzA5ODg2MTgzNzkwNjcxNTM3NzY3NTI2NzQ1MDI4NzI0aAorI2RlZmluZSBNXzJfUElfSCAgICAgIDAuNjM2NjE5NzcyMzY3NTgxMzQzMDc1NTM1MDUzNDkwMDU3NDQ4aAorI2RlZmluZSBNXzJfU1FSVFBJX0ggIDEuMTI4Mzc5MTY3MDk1NTEyNTczODk2MTU4OTAzMTIxNTQ1MTdoCisjZGVmaW5lIE1fU1FSVDJfSCAgICAgMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODg3MjQyMDk2OTgwOGgKKyNkZWZpbmUgTV9TUVJUMV8yX0ggICAwLjcwNzEwNjc4MTE4NjU0NzUyNDQwMDg0NDM2MjEwNDg0OTAzOWgKKworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworI2RlZmluZSBDSEFSX0JJVCAgICA4CisjZGVmaW5lIFNDSEFSX01BWCAgMTI3CisjZGVmaW5lIFNDSEFSX01JTiAgKC0xMjgpCisjZGVmaW5lIFVDSEFSX01BWCAgMjU1CisjZGVmaW5lIENIQVJfTUFYICBTQ0hBUl9NQVgKKyNkZWZpbmUgQ0hBUl9NSU4gIFNDSEFSX01JTgorI2RlZmluZSBVU0hSVF9NQVggIDY1NTM1CisjZGVmaW5lIFNIUlRfTUFYICAzMjc2NworI2RlZmluZSBTSFJUX01JTiAgKC0zMjc2OCkKKyNkZWZpbmUgVUlOVF9NQVggIDB4ZmZmZmZmZmYKKyNkZWZpbmUgSU5UX01BWCAgICAyMTQ3NDgzNjQ3CisjZGVmaW5lIElOVF9NSU4gICAgKC0yMTQ3NDgzNjQ3LTEpCisjZGVmaW5lIFVMT05HX01BWCAgMHhmZmZmZmZmZmZmZmZmZmZmVUwKKyNkZWZpbmUgTE9OR19NQVggIDB4N2ZmZmZmZmZmZmZmZmZmZkwKKyNkZWZpbmUgTE9OR19NSU4gICgtMHg3ZmZmZmZmZmZmZmZmZmZmTC0xKQorCisvLyBPcGVuQ0wgdjEuMS8xLjIvMi4wIHM2LjIuMyAtIEV4cGxpY2l0IGNvbnZlcnNpb25zCisKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRlKGNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRlKGNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHooY2hhcik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHooY2hhcik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0cChjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0cChjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRuKGNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRuKGNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcihjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0KGNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydGUodWNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRlKHVjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnR6KHVjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0eih1Y2hhcik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0cCh1Y2hhcik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHAodWNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydG4odWNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRuKHVjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIodWNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXQodWNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydGUoc2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRlKHNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnR6KHNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0eihzaG9ydCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0cChzaG9ydCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHAoc2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydG4oc2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRuKHNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIoc2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXQoc2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydGUodXNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0ZSh1c2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHoodXNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0eih1c2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHAodXNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0cCh1c2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydG4odXNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0bih1c2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcih1c2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXQodXNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRlKGludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydGUoaW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnR6KGludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHooaW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRwKGludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHAoaW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRuKGludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydG4oaW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIoaW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0KGludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0ZSh1aW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0ZSh1aW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnR6KHVpbnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnR6KHVpbnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHAodWludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHAodWludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0bih1aW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0bih1aW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIodWludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdCh1aW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRlKGxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRlKGxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHoobG9uZyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHoobG9uZyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0cChsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0cChsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRuKGxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRuKGxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcihsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0KGxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydGUodWxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRlKHVsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnR6KHVsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0eih1bG9uZyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0cCh1bG9uZyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHAodWxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydG4odWxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRuKHVsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIodWxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXQodWxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydGUoZmxvYXQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRlKGZsb2F0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnR6KGZsb2F0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0eihmbG9hdCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0cChmbG9hdCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHAoZmxvYXQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydG4oZmxvYXQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRuKGZsb2F0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIoZmxvYXQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXQoZmxvYXQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0ZShjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRlKGNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0eihjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnR6KGNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0cChjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRwKGNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0bihjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRuKGNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyKGNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdChjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydGUodWNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydGUodWNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0eih1Y2hhcik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0eih1Y2hhcik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRwKHVjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRwKHVjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydG4odWNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydG4odWNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyKHVjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXQodWNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0ZShzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0ZShzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnR6KHNob3J0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnR6KHNob3J0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHAoc2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydHAoc2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0bihzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0bihzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIoc2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdChzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRlKHVzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0ZSh1c2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0eih1c2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydHoodXNob3J0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHAodXNob3J0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRwKHVzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRuKHVzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0bih1c2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyKHVzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0KHVzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRlKGludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0ZShpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0eihpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydHooaW50KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHAoaW50KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRwKGludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRuKGludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0bihpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyKGludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0KGludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRlKHVpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydGUodWludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnR6KHVpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydHoodWludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRwKHVpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydHAodWludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRuKHVpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydG4odWludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIodWludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0KHVpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0ZShsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRlKGxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0eihsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnR6KGxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0cChsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRwKGxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0bihsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRuKGxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyKGxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdChsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydGUodWxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydGUodWxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0eih1bG9uZyk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0eih1bG9uZyk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRwKHVsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRwKHVsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydG4odWxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydG4odWxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyKHVsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXQodWxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0ZShmbG9hdCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0ZShmbG9hdCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnR6KGZsb2F0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnR6KGZsb2F0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHAoZmxvYXQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydHAoZmxvYXQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0bihmbG9hdCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0bihmbG9hdCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIoZmxvYXQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdChmbG9hdCk7CisKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydGUoY2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0ZShjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHooY2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0eihjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHAoY2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0cChjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydG4oY2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0bihjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydChjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXQoY2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRlKHVjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRlKHVjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHoodWNoYXIpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHoodWNoYXIpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0cCh1Y2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0cCh1Y2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRuKHVjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRuKHVjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydCh1Y2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0KHVjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydGUoc2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydGUoc2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0eihzaG9ydCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0eihzaG9ydCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRwKHNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRwKHNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydG4oc2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydG4oc2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0KHNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXQoc2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0ZSh1c2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydGUodXNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHoodXNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnR6KHVzaG9ydCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRwKHVzaG9ydCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0cCh1c2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0bih1c2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydG4odXNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydCh1c2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdCh1c2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0ZShpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydGUoaW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHooaW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnR6KGludCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRwKGludCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0cChpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0bihpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydG4oaW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydChpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdChpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0ZSh1aW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRlKHVpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0eih1aW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnR6KHVpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0cCh1aW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRwKHVpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0bih1aW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRuKHVpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0KHVpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdCh1aW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydGUobG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0ZShsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHoobG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0eihsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHAobG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0cChsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydG4obG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0bihsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydChsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXQobG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRlKHVsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRlKHVsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHoodWxvbmcpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHoodWxvbmcpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0cCh1bG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0cCh1bG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRuKHVsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRuKHVsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydCh1bG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0KHVsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydGUoZmxvYXQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydGUoZmxvYXQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0eihmbG9hdCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0eihmbG9hdCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRwKGZsb2F0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRwKGZsb2F0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydG4oZmxvYXQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydG4oZmxvYXQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0KGZsb2F0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXQoZmxvYXQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRlKGNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0ZShjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0eihjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydHooY2hhcik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHAoY2hhcik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRwKGNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRuKGNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0bihjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0KGNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0KGNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRlKHVjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydGUodWNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnR6KHVjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydHoodWNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRwKHVjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydHAodWNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRuKHVjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydG4odWNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQodWNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0KHVjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0ZShzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRlKHNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0eihzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnR6KHNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0cChzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRwKHNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0bihzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRuKHNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0KHNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdChzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydGUodXNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydGUodXNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0eih1c2hvcnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0eih1c2hvcnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRwKHVzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRwKHVzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydG4odXNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydG4odXNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0KHVzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXQodXNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0ZShpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0ZShpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnR6KGludCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnR6KGludCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHAoaW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydHAoaW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0bihpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0bihpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQoaW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdChpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRlKHVpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0ZSh1aW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0eih1aW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydHoodWludCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHAodWludCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRwKHVpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRuKHVpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0bih1aW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0KHVpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0KHVpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRlKGxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0ZShsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0eihsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydHoobG9uZyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHAobG9uZyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRwKGxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRuKGxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0bihsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0KGxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0KGxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRlKHVsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydGUodWxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnR6KHVsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydHoodWxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRwKHVsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydHAodWxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRuKHVsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydG4odWxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQodWxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0KHVsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0ZShmbG9hdCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRlKGZsb2F0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0eihmbG9hdCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnR6KGZsb2F0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0cChmbG9hdCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRwKGZsb2F0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0bihmbG9hdCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRuKGZsb2F0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0KGZsb2F0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdChmbG9hdCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydGUoY2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRlKGNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnR6KGNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0eihjaGFyKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0cChjaGFyKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHAoY2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydG4oY2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRuKGNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQoY2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXQoY2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydGUodWNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0ZSh1Y2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydHoodWNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0eih1Y2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydHAodWNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0cCh1Y2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydG4odWNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0bih1Y2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludCh1Y2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXQodWNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRlKHNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydGUoc2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnR6KHNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHooc2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRwKHNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHAoc2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRuKHNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydG4oc2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQoc2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0KHNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0ZSh1c2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0ZSh1c2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnR6KHVzaG9ydCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnR6KHVzaG9ydCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydHAodXNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHAodXNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0bih1c2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0bih1c2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQodXNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdCh1c2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRlKGludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRlKGludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydHooaW50KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHooaW50KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0cChpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0cChpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRuKGludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRuKGludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludChpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0KGludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydGUodWludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRlKHVpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnR6KHVpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0eih1aW50KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0cCh1aW50KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHAodWludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydG4odWludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRuKHVpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQodWludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXQodWludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydGUobG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRlKGxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnR6KGxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0eihsb25nKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0cChsb25nKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHAobG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydG4obG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRuKGxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQobG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXQobG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydGUodWxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0ZSh1bG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydHoodWxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0eih1bG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydHAodWxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0cCh1bG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydG4odWxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0bih1bG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludCh1bG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXQodWxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRlKGZsb2F0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydGUoZmxvYXQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnR6KGZsb2F0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHooZmxvYXQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRwKGZsb2F0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHAoZmxvYXQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRuKGZsb2F0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydG4oZmxvYXQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQoZmxvYXQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0KGZsb2F0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRlKGNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRlKGNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHooY2hhcik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHooY2hhcik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0cChjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0cChjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRuKGNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRuKGNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludChjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0KGNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydGUodWNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRlKHVjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnR6KHVjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0eih1Y2hhcik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0cCh1Y2hhcik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHAodWNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydG4odWNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRuKHVjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQodWNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXQodWNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydGUoc2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRlKHNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnR6KHNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0eihzaG9ydCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0cChzaG9ydCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHAoc2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydG4oc2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRuKHNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQoc2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXQoc2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydGUodXNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0ZSh1c2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHoodXNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0eih1c2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHAodXNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0cCh1c2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydG4odXNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0bih1c2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludCh1c2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXQodXNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRlKGludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydGUoaW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnR6KGludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHooaW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRwKGludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHAoaW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRuKGludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydG4oaW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQoaW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0KGludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0ZSh1aW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0ZSh1aW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnR6KHVpbnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnR6KHVpbnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHAodWludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHAodWludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0bih1aW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0bih1aW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQodWludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdCh1aW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRlKGxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRlKGxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHoobG9uZyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHoobG9uZyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0cChsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0cChsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRuKGxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRuKGxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludChsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0KGxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydGUodWxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRlKHVsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnR6KHVsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0eih1bG9uZyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0cCh1bG9uZyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHAodWxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydG4odWxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRuKHVsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQodWxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXQodWxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydGUoZmxvYXQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRlKGZsb2F0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnR6KGZsb2F0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0eihmbG9hdCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0cChmbG9hdCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHAoZmxvYXQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydG4oZmxvYXQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRuKGZsb2F0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQoZmxvYXQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXQoZmxvYXQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydGUoY2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydGUoY2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0eihjaGFyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0eihjaGFyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRwKGNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRwKGNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydG4oY2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydG4oY2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nKGNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXQoY2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0ZSh1Y2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydGUodWNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHoodWNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnR6KHVjaGFyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRwKHVjaGFyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0cCh1Y2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0bih1Y2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydG4odWNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZyh1Y2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdCh1Y2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0ZShzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydGUoc2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHooc2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnR6KHNob3J0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRwKHNob3J0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0cChzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0bihzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydG4oc2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZyhzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdChzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0ZSh1c2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRlKHVzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0eih1c2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnR6KHVzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0cCh1c2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRwKHVzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0bih1c2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRuKHVzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nKHVzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdCh1c2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydGUoaW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0ZShpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHooaW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0eihpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHAoaW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0cChpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydG4oaW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0bihpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZyhpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXQoaW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRlKHVpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRlKHVpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHoodWludCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydHoodWludCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0cCh1aW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0cCh1aW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRuKHVpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRuKHVpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZyh1aW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0KHVpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydGUobG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydGUobG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0eihsb25nKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0eihsb25nKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRwKGxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRwKGxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydG4obG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydG4obG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nKGxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXQobG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0ZSh1bG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydGUodWxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHoodWxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnR6KHVsb25nKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRwKHVsb25nKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0cCh1bG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0bih1bG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydG4odWxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZyh1bG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdCh1bG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0ZShmbG9hdCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydGUoZmxvYXQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHooZmxvYXQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnR6KGZsb2F0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRwKGZsb2F0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0cChmbG9hdCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0bihmbG9hdCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydG4oZmxvYXQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZyhmbG9hdCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdChmbG9hdCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRlKGNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydGUoY2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnR6KGNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHooY2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRwKGNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHAoY2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRuKGNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydG4oY2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcoY2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0KGNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0ZSh1Y2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0ZSh1Y2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnR6KHVjaGFyKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnR6KHVjaGFyKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHAodWNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHAodWNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0bih1Y2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0bih1Y2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcodWNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdCh1Y2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRlKHNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRlKHNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHooc2hvcnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHooc2hvcnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0cChzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0cChzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRuKHNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRuKHNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZyhzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0KHNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydGUodXNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRlKHVzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnR6KHVzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0eih1c2hvcnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0cCh1c2hvcnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHAodXNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydG4odXNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRuKHVzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcodXNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXQodXNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydGUoaW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRlKGludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnR6KGludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0eihpbnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0cChpbnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHAoaW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydG4oaW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRuKGludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcoaW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXQoaW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydGUodWludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0ZSh1aW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHoodWludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0eih1aW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHAodWludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0cCh1aW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydG4odWludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0bih1aW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZyh1aW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXQodWludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRlKGxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydGUobG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnR6KGxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHoobG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRwKGxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHAobG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRuKGxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydG4obG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcobG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0KGxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0ZSh1bG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0ZSh1bG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnR6KHVsb25nKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnR6KHVsb25nKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHAodWxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHAodWxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0bih1bG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0bih1bG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcodWxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdCh1bG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRlKGZsb2F0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRlKGZsb2F0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHooZmxvYXQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHooZmxvYXQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0cChmbG9hdCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0cChmbG9hdCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRuKGZsb2F0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRuKGZsb2F0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZyhmbG9hdCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0KGZsb2F0KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydGUoY2hhcik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnR6KGNoYXIpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0cChjaGFyKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydG4oY2hhcik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQoY2hhcik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRlKHVjaGFyKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHoodWNoYXIpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0cCh1Y2hhcik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRuKHVjaGFyKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdCh1Y2hhcik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRlKHNob3J0KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHooc2hvcnQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0cChzaG9ydCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRuKHNob3J0KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdChzaG9ydCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRlKHVzaG9ydCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnR6KHVzaG9ydCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRwKHVzaG9ydCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRuKHVzaG9ydCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQodXNob3J0KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydGUoaW50KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHooaW50KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHAoaW50KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydG4oaW50KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdChpbnQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0ZSh1aW50KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHoodWludCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRwKHVpbnQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0bih1aW50KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdCh1aW50KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydGUobG9uZyk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnR6KGxvbmcpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0cChsb25nKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydG4obG9uZyk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQobG9uZyk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRlKHVsb25nKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHoodWxvbmcpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0cCh1bG9uZyk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRuKHVsb25nKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdCh1bG9uZyk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRlKGZsb2F0KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHooZmxvYXQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0cChmbG9hdCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRuKGZsb2F0KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdChmbG9hdCk7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRlKGNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRlKGNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHooY2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHooY2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0cChjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0cChjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRuKGNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRuKGNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMihjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0KGNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydGUodWNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRlKHVjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnR6KHVjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0eih1Y2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0cCh1Y2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHAodWNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydG4odWNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRuKHVjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjIodWNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXQodWNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydGUoc2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRlKHNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnR6KHNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0eihzaG9ydDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0cChzaG9ydDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHAoc2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydG4oc2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRuKHNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjIoc2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXQoc2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydGUodXNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0ZSh1c2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHoodXNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0eih1c2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHAodXNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0cCh1c2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydG4odXNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0bih1c2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMih1c2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXQodXNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRlKGludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydGUoaW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnR6KGludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHooaW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRwKGludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHAoaW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRuKGludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydG4oaW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjIoaW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0KGludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0ZSh1aW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0ZSh1aW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnR6KHVpbnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnR6KHVpbnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHAodWludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHAodWludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0bih1aW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0bih1aW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjIodWludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdCh1aW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRlKGxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRlKGxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHoobG9uZzIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHoobG9uZzIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0cChsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0cChsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRuKGxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRuKGxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMihsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0KGxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydGUodWxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRlKHVsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnR6KHVsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0eih1bG9uZzIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0cCh1bG9uZzIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHAodWxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydG4odWxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRuKHVsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjIodWxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXQodWxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydGUoZmxvYXQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRlKGZsb2F0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnR6KGZsb2F0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0eihmbG9hdDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0cChmbG9hdDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHAoZmxvYXQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydG4oZmxvYXQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRuKGZsb2F0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjIoZmxvYXQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXQoZmxvYXQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0ZShjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRlKGNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0eihjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnR6KGNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0cChjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRwKGNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0bihjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRuKGNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyKGNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdChjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydGUodWNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydGUodWNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0eih1Y2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0eih1Y2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRwKHVjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRwKHVjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydG4odWNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydG4odWNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyKHVjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXQodWNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0ZShzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0ZShzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnR6KHNob3J0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnR6KHNob3J0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHAoc2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHAoc2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0bihzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0bihzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjIoc2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdChzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRlKHVzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0ZSh1c2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0eih1c2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHoodXNob3J0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHAodXNob3J0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRwKHVzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRuKHVzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0bih1c2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyKHVzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0KHVzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRlKGludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0ZShpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0eihpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHooaW50Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHAoaW50Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRwKGludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRuKGludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0bihpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyKGludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0KGludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRlKHVpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydGUodWludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnR6KHVpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHoodWludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRwKHVpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHAodWludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRuKHVpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydG4odWludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjIodWludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0KHVpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0ZShsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRlKGxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0eihsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnR6KGxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0cChsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRwKGxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0bihsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRuKGxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyKGxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdChsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydGUodWxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydGUodWxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0eih1bG9uZzIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0eih1bG9uZzIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRwKHVsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRwKHVsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydG4odWxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydG4odWxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyKHVsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXQodWxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0ZShmbG9hdDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0ZShmbG9hdDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnR6KGZsb2F0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnR6KGZsb2F0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHAoZmxvYXQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHAoZmxvYXQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0bihmbG9hdDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0bihmbG9hdDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjIoZmxvYXQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdChmbG9hdDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRlKGNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydGUoY2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnR6KGNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHooY2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRwKGNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHAoY2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRuKGNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydG4oY2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDIoY2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0KGNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0ZSh1Y2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0ZSh1Y2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnR6KHVjaGFyMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnR6KHVjaGFyMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydHAodWNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHAodWNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0bih1Y2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0bih1Y2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDIodWNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdCh1Y2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRlKHNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRlKHNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydHooc2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHooc2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0cChzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0cChzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRuKHNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRuKHNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MihzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0KHNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydGUodXNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRlKHVzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnR6KHVzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0eih1c2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0cCh1c2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHAodXNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydG4odXNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRuKHVzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDIodXNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXQodXNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydGUoaW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRlKGludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnR6KGludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0eihpbnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0cChpbnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHAoaW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydG4oaW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRuKGludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDIoaW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXQoaW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydGUodWludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0ZSh1aW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydHoodWludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0eih1aW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydHAodWludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0cCh1aW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydG4odWludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0bih1aW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Mih1aW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXQodWludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRlKGxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydGUobG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnR6KGxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHoobG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRwKGxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHAobG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRuKGxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydG4obG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDIobG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0KGxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0ZSh1bG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0ZSh1bG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnR6KHVsb25nMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnR6KHVsb25nMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydHAodWxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHAodWxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0bih1bG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0bih1bG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDIodWxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdCh1bG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRlKGZsb2F0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRlKGZsb2F0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydHooZmxvYXQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHooZmxvYXQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0cChmbG9hdDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0cChmbG9hdDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRuKGZsb2F0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRuKGZsb2F0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MihmbG9hdDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0KGZsb2F0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0ZShjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydGUoY2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHooY2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnR6KGNoYXIyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRwKGNoYXIyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0cChjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0bihjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydG4oY2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MihjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdChjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0ZSh1Y2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRlKHVjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0eih1Y2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnR6KHVjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0cCh1Y2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRwKHVjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0bih1Y2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRuKHVjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyKHVjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdCh1Y2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydGUoc2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0ZShzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHooc2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0eihzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHAoc2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0cChzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydG4oc2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0bihzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MihzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXQoc2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRlKHVzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRlKHVzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHoodXNob3J0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHoodXNob3J0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0cCh1c2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0cCh1c2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRuKHVzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRuKHVzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Mih1c2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0KHVzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydGUoaW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydGUoaW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0eihpbnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0eihpbnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRwKGludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRwKGludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydG4oaW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydG4oaW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyKGludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXQoaW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0ZSh1aW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydGUodWludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHoodWludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnR6KHVpbnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRwKHVpbnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0cCh1aW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0bih1aW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydG4odWludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Mih1aW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdCh1aW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0ZShsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydGUobG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHoobG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnR6KGxvbmcyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRwKGxvbmcyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0cChsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0bihsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydG4obG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Mihsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdChsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0ZSh1bG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRlKHVsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0eih1bG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnR6KHVsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0cCh1bG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRwKHVsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0bih1bG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRuKHVsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyKHVsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdCh1bG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydGUoZmxvYXQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0ZShmbG9hdDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHooZmxvYXQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0eihmbG9hdDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHAoZmxvYXQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0cChmbG9hdDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydG4oZmxvYXQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0bihmbG9hdDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MihmbG9hdDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXQoZmxvYXQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRlKGNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0ZShjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0eihjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydHooY2hhcjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHAoY2hhcjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRwKGNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRuKGNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0bihjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyKGNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0KGNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRlKHVjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydGUodWNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnR6KHVjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydHoodWNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRwKHVjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydHAodWNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRuKHVjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydG4odWNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDIodWNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0KHVjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0ZShzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRlKHNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0eihzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnR6KHNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0cChzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRwKHNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0bihzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRuKHNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyKHNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdChzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydGUodXNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydGUodXNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0eih1c2hvcnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0eih1c2hvcnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRwKHVzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRwKHVzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydG4odXNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydG4odXNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyKHVzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXQodXNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0ZShpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0ZShpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnR6KGludDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnR6KGludDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHAoaW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydHAoaW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0bihpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0bihpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDIoaW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdChpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRlKHVpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0ZSh1aW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0eih1aW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydHoodWludDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHAodWludDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRwKHVpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRuKHVpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0bih1aW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyKHVpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0KHVpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRlKGxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0ZShsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0eihsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydHoobG9uZzIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHAobG9uZzIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRwKGxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRuKGxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0bihsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyKGxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0KGxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRlKHVsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydGUodWxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnR6KHVsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydHoodWxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRwKHVsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydHAodWxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRuKHVsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydG4odWxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDIodWxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0KHVsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0ZShmbG9hdDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRlKGZsb2F0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0eihmbG9hdDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnR6KGZsb2F0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0cChmbG9hdDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRwKGZsb2F0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0bihmbG9hdDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRuKGZsb2F0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyKGZsb2F0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdChmbG9hdDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0ZShjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0ZShjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnR6KGNoYXIyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnR6KGNoYXIyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHAoY2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHAoY2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0bihjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0bihjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDIoY2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdChjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRlKHVjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0ZSh1Y2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0eih1Y2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHoodWNoYXIyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHAodWNoYXIyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRwKHVjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRuKHVjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0bih1Y2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyKHVjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0KHVjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRlKHNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0ZShzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0eihzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHooc2hvcnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHAoc2hvcnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRwKHNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRuKHNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0bihzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyKHNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0KHNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRlKHVzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydGUodXNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnR6KHVzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHoodXNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRwKHVzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHAodXNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRuKHVzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydG4odXNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDIodXNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0KHVzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0ZShpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRlKGludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0eihpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnR6KGludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0cChpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRwKGludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0bihpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRuKGludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyKGludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdChpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydGUodWludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydGUodWludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0eih1aW50Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0eih1aW50Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRwKHVpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRwKHVpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydG4odWludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydG4odWludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyKHVpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXQodWludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0ZShsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0ZShsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnR6KGxvbmcyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnR6KGxvbmcyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHAobG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHAobG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0bihsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0bihsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDIobG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdChsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRlKHVsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0ZSh1bG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0eih1bG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHoodWxvbmcyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHAodWxvbmcyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRwKHVsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRuKHVsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0bih1bG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyKHVsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0KHVsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRlKGZsb2F0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0ZShmbG9hdDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0eihmbG9hdDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHooZmxvYXQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHAoZmxvYXQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRwKGZsb2F0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRuKGZsb2F0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0bihmbG9hdDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyKGZsb2F0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0KGZsb2F0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRlKGNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRlKGNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHooY2hhcjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHooY2hhcjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0cChjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0cChjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRuKGNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRuKGNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMihjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0KGNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydGUodWNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRlKHVjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnR6KHVjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0eih1Y2hhcjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0cCh1Y2hhcjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHAodWNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydG4odWNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRuKHVjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzIodWNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXQodWNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydGUoc2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRlKHNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnR6KHNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0eihzaG9ydDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0cChzaG9ydDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHAoc2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydG4oc2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRuKHNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzIoc2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXQoc2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydGUodXNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0ZSh1c2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHoodXNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0eih1c2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHAodXNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0cCh1c2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydG4odXNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0bih1c2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMih1c2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXQodXNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRlKGludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydGUoaW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnR6KGludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHooaW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRwKGludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHAoaW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRuKGludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydG4oaW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzIoaW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0KGludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0ZSh1aW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0ZSh1aW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnR6KHVpbnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnR6KHVpbnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHAodWludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHAodWludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0bih1aW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0bih1aW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzIodWludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdCh1aW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRlKGxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRlKGxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHoobG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHoobG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0cChsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0cChsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRuKGxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRuKGxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMihsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0KGxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydGUodWxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRlKHVsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnR6KHVsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0eih1bG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0cCh1bG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHAodWxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydG4odWxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRuKHVsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzIodWxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXQodWxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydGUoZmxvYXQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRlKGZsb2F0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnR6KGZsb2F0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0eihmbG9hdDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0cChmbG9hdDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHAoZmxvYXQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydG4oZmxvYXQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRuKGZsb2F0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzIoZmxvYXQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXQoZmxvYXQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0ZShjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRlKGNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0eihjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnR6KGNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0cChjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRwKGNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0bihjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRuKGNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyKGNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdChjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydGUodWNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydGUodWNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0eih1Y2hhcjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0eih1Y2hhcjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRwKHVjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRwKHVjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydG4odWNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydG4odWNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyKHVjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXQodWNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0ZShzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0ZShzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnR6KHNob3J0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnR6KHNob3J0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHAoc2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHAoc2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0bihzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0bihzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzIoc2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdChzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRlKHVzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0ZSh1c2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0eih1c2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHoodXNob3J0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHAodXNob3J0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRwKHVzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRuKHVzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0bih1c2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyKHVzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0KHVzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRlKGludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0ZShpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0eihpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHooaW50Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHAoaW50Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRwKGludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRuKGludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0bihpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyKGludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0KGludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRlKHVpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydGUodWludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnR6KHVpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHoodWludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRwKHVpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHAodWludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRuKHVpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydG4odWludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzIodWludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0KHVpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0ZShsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRlKGxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0eihsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnR6KGxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0cChsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRwKGxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0bihsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRuKGxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyKGxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdChsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydGUodWxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydGUodWxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0eih1bG9uZzIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0eih1bG9uZzIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRwKHVsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRwKHVsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydG4odWxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydG4odWxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyKHVsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXQodWxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0ZShmbG9hdDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0ZShmbG9hdDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnR6KGZsb2F0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnR6KGZsb2F0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHAoZmxvYXQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHAoZmxvYXQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0bihmbG9hdDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0bihmbG9hdDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzIoZmxvYXQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdChmbG9hdDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRlKGNoYXIyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0eihjaGFyMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHAoY2hhcjIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRuKGNoYXIyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyKGNoYXIyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0ZSh1Y2hhcjIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnR6KHVjaGFyMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHAodWNoYXIyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0bih1Y2hhcjIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDIodWNoYXIyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0ZShzaG9ydDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnR6KHNob3J0Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHAoc2hvcnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0bihzaG9ydDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDIoc2hvcnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0ZSh1c2hvcnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0eih1c2hvcnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0cCh1c2hvcnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0bih1c2hvcnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyKHVzaG9ydDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRlKGludDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnR6KGludDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRwKGludDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRuKGludDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDIoaW50Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydGUodWludDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnR6KHVpbnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0cCh1aW50Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydG4odWludDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDIodWludDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRlKGxvbmcyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0eihsb25nMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHAobG9uZzIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRuKGxvbmcyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyKGxvbmcyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0ZSh1bG9uZzIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnR6KHVsb25nMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHAodWxvbmcyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0bih1bG9uZzIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDIodWxvbmcyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0ZShmbG9hdDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnR6KGZsb2F0Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHAoZmxvYXQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0bihmbG9hdDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDIoZmxvYXQyKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydGUoY2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydGUoY2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0eihjaGFyMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0eihjaGFyMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRwKGNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRwKGNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydG4oY2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydG4oY2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzKGNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXQoY2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0ZSh1Y2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydGUodWNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHoodWNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnR6KHVjaGFyMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRwKHVjaGFyMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0cCh1Y2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0bih1Y2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydG4odWNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMyh1Y2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdCh1Y2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0ZShzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydGUoc2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHooc2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnR6KHNob3J0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRwKHNob3J0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0cChzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0bihzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydG4oc2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMyhzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdChzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0ZSh1c2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRlKHVzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0eih1c2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnR6KHVzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0cCh1c2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRwKHVzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0bih1c2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRuKHVzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzKHVzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdCh1c2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydGUoaW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0ZShpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHooaW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0eihpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHAoaW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0cChpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydG4oaW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0bihpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMyhpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXQoaW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRlKHVpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRlKHVpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHoodWludDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydHoodWludDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0cCh1aW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0cCh1aW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRuKHVpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRuKHVpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMyh1aW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0KHVpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydGUobG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydGUobG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0eihsb25nMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0eihsb25nMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRwKGxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRwKGxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydG4obG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydG4obG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzKGxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXQobG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0ZSh1bG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydGUodWxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHoodWxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnR6KHVsb25nMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRwKHVsb25nMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0cCh1bG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0bih1bG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydG4odWxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMyh1bG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdCh1bG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0ZShmbG9hdDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydGUoZmxvYXQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHooZmxvYXQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnR6KGZsb2F0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRwKGZsb2F0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0cChmbG9hdDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0bihmbG9hdDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydG4oZmxvYXQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMyhmbG9hdDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdChmbG9hdDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRlKGNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydGUoY2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnR6KGNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHooY2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRwKGNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHAoY2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRuKGNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydG4oY2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjMoY2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0KGNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0ZSh1Y2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0ZSh1Y2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnR6KHVjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnR6KHVjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHAodWNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHAodWNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0bih1Y2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0bih1Y2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjModWNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdCh1Y2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRlKHNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRlKHNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHooc2hvcnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHooc2hvcnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0cChzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0cChzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRuKHNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRuKHNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMyhzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0KHNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydGUodXNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRlKHVzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnR6KHVzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0eih1c2hvcnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0cCh1c2hvcnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHAodXNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydG4odXNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRuKHVzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjModXNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXQodXNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydGUoaW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRlKGludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnR6KGludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0eihpbnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0cChpbnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHAoaW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydG4oaW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRuKGludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjMoaW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXQoaW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydGUodWludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0ZSh1aW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHoodWludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0eih1aW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHAodWludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0cCh1aW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydG4odWludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0bih1aW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMyh1aW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXQodWludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRlKGxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydGUobG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnR6KGxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHoobG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRwKGxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHAobG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRuKGxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydG4obG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjMobG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0KGxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0ZSh1bG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0ZSh1bG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnR6KHVsb25nMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnR6KHVsb25nMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHAodWxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHAodWxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0bih1bG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0bih1bG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjModWxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdCh1bG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRlKGZsb2F0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRlKGZsb2F0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHooZmxvYXQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHooZmxvYXQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0cChmbG9hdDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0cChmbG9hdDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRuKGZsb2F0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRuKGZsb2F0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMyhmbG9hdDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0KGZsb2F0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydGUoY2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0ZShjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHooY2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0eihjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHAoY2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0cChjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydG4oY2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0bihjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MyhjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXQoY2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRlKHVjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRlKHVjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHoodWNoYXIzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHoodWNoYXIzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0cCh1Y2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0cCh1Y2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRuKHVjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRuKHVjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Myh1Y2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0KHVjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydGUoc2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydGUoc2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0eihzaG9ydDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0eihzaG9ydDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRwKHNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRwKHNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydG4oc2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydG4oc2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzKHNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXQoc2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0ZSh1c2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydGUodXNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHoodXNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnR6KHVzaG9ydDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRwKHVzaG9ydDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0cCh1c2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0bih1c2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydG4odXNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Myh1c2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdCh1c2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0ZShpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydGUoaW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHooaW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnR6KGludDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRwKGludDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0cChpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0bihpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydG4oaW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MyhpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdChpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0ZSh1aW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRlKHVpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0eih1aW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnR6KHVpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0cCh1aW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRwKHVpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0bih1aW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRuKHVpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzKHVpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdCh1aW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydGUobG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0ZShsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHoobG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0eihsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHAobG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0cChsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydG4obG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0bihsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Myhsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXQobG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRlKHVsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRlKHVsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHoodWxvbmczKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHoodWxvbmczKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0cCh1bG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0cCh1bG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRuKHVsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRuKHVsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Myh1bG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0KHVsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydGUoZmxvYXQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydGUoZmxvYXQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0eihmbG9hdDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0eihmbG9hdDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRwKGZsb2F0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRwKGZsb2F0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydG4oZmxvYXQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydG4oZmxvYXQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzKGZsb2F0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXQoZmxvYXQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRlKGNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0ZShjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0eihjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydHooY2hhcjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHAoY2hhcjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRwKGNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRuKGNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0bihjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzKGNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0KGNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRlKHVjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydGUodWNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnR6KHVjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydHoodWNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRwKHVjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydHAodWNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRuKHVjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydG4odWNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDModWNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0KHVjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0ZShzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRlKHNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0eihzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnR6KHNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0cChzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRwKHNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0bihzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRuKHNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzKHNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdChzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydGUodXNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydGUodXNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0eih1c2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0eih1c2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRwKHVzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRwKHVzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydG4odXNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydG4odXNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzKHVzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXQodXNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0ZShpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0ZShpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnR6KGludDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnR6KGludDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHAoaW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydHAoaW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0bihpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0bihpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDMoaW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdChpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRlKHVpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0ZSh1aW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0eih1aW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydHoodWludDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHAodWludDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRwKHVpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRuKHVpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0bih1aW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzKHVpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0KHVpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRlKGxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0ZShsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0eihsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydHoobG9uZzMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHAobG9uZzMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRwKGxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRuKGxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0bihsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzKGxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0KGxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRlKHVsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydGUodWxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnR6KHVsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydHoodWxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRwKHVsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydHAodWxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRuKHVsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydG4odWxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDModWxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0KHVsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0ZShmbG9hdDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRlKGZsb2F0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0eihmbG9hdDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnR6KGZsb2F0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0cChmbG9hdDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRwKGZsb2F0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0bihmbG9hdDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRuKGZsb2F0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzKGZsb2F0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdChmbG9hdDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydGUoY2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRlKGNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnR6KGNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0eihjaGFyMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0cChjaGFyMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHAoY2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydG4oY2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRuKGNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDMoY2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXQoY2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydGUodWNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0ZSh1Y2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHoodWNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0eih1Y2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHAodWNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0cCh1Y2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydG4odWNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0bih1Y2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Myh1Y2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXQodWNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRlKHNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydGUoc2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnR6KHNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHooc2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRwKHNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHAoc2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRuKHNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydG4oc2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDMoc2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0KHNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0ZSh1c2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0ZSh1c2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnR6KHVzaG9ydDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnR6KHVzaG9ydDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHAodXNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHAodXNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0bih1c2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0bih1c2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDModXNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdCh1c2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRlKGludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRlKGludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHooaW50Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHooaW50Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0cChpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0cChpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRuKGludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRuKGludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MyhpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0KGludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydGUodWludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRlKHVpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnR6KHVpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0eih1aW50Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0cCh1aW50Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHAodWludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydG4odWludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRuKHVpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDModWludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXQodWludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydGUobG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRlKGxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnR6KGxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0eihsb25nMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0cChsb25nMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHAobG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydG4obG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRuKGxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDMobG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXQobG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydGUodWxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0ZSh1bG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHoodWxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0eih1bG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHAodWxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0cCh1bG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydG4odWxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0bih1bG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Myh1bG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXQodWxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRlKGZsb2F0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydGUoZmxvYXQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnR6KGZsb2F0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHooZmxvYXQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRwKGZsb2F0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHAoZmxvYXQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRuKGZsb2F0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydG4oZmxvYXQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDMoZmxvYXQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0KGZsb2F0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRlKGNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRlKGNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHooY2hhcjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHooY2hhcjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0cChjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0cChjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRuKGNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRuKGNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MyhjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0KGNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydGUodWNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRlKHVjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnR6KHVjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0eih1Y2hhcjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0cCh1Y2hhcjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHAodWNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydG4odWNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRuKHVjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDModWNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXQodWNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydGUoc2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRlKHNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnR6KHNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0eihzaG9ydDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0cChzaG9ydDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHAoc2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydG4oc2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRuKHNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDMoc2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXQoc2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydGUodXNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0ZSh1c2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHoodXNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0eih1c2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHAodXNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0cCh1c2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydG4odXNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0bih1c2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Myh1c2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXQodXNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRlKGludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydGUoaW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnR6KGludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHooaW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRwKGludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHAoaW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRuKGludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydG4oaW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDMoaW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0KGludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0ZSh1aW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0ZSh1aW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnR6KHVpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnR6KHVpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHAodWludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHAodWludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0bih1aW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0bih1aW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDModWludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdCh1aW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRlKGxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRlKGxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHoobG9uZzMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHoobG9uZzMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0cChsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0cChsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRuKGxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRuKGxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Myhsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0KGxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydGUodWxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRlKHVsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnR6KHVsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0eih1bG9uZzMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0cCh1bG9uZzMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHAodWxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydG4odWxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRuKHVsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDModWxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXQodWxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydGUoZmxvYXQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRlKGZsb2F0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnR6KGZsb2F0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0eihmbG9hdDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0cChmbG9hdDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHAoZmxvYXQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydG4oZmxvYXQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRuKGZsb2F0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDMoZmxvYXQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXQoZmxvYXQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydGUoY2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydGUoY2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0eihjaGFyMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0eihjaGFyMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRwKGNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRwKGNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydG4oY2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydG4oY2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczKGNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXQoY2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0ZSh1Y2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydGUodWNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHoodWNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnR6KHVjaGFyMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRwKHVjaGFyMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0cCh1Y2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0bih1Y2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydG4odWNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMyh1Y2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdCh1Y2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0ZShzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydGUoc2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHooc2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnR6KHNob3J0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRwKHNob3J0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0cChzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0bihzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydG4oc2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMyhzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdChzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0ZSh1c2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRlKHVzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0eih1c2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnR6KHVzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0cCh1c2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRwKHVzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0bih1c2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRuKHVzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczKHVzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdCh1c2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydGUoaW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0ZShpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHooaW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0eihpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHAoaW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0cChpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydG4oaW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0bihpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMyhpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXQoaW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRlKHVpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRlKHVpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHoodWludDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydHoodWludDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0cCh1aW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0cCh1aW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRuKHVpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRuKHVpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMyh1aW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0KHVpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydGUobG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydGUobG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0eihsb25nMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0eihsb25nMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRwKGxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRwKGxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydG4obG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydG4obG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczKGxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXQobG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0ZSh1bG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydGUodWxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHoodWxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnR6KHVsb25nMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRwKHVsb25nMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0cCh1bG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0bih1bG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydG4odWxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMyh1bG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdCh1bG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0ZShmbG9hdDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydGUoZmxvYXQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHooZmxvYXQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnR6KGZsb2F0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRwKGZsb2F0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0cChmbG9hdDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0bihmbG9hdDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydG4oZmxvYXQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMyhmbG9hdDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdChmbG9hdDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRlKGNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydGUoY2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnR6KGNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHooY2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRwKGNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHAoY2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRuKGNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydG4oY2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzMoY2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0KGNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0ZSh1Y2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0ZSh1Y2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnR6KHVjaGFyMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnR6KHVjaGFyMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHAodWNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHAodWNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0bih1Y2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0bih1Y2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzModWNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdCh1Y2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRlKHNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRlKHNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHooc2hvcnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHooc2hvcnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0cChzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0cChzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRuKHNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRuKHNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMyhzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0KHNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydGUodXNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRlKHVzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnR6KHVzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0eih1c2hvcnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0cCh1c2hvcnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHAodXNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydG4odXNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRuKHVzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzModXNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXQodXNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydGUoaW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRlKGludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnR6KGludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0eihpbnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0cChpbnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHAoaW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydG4oaW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRuKGludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzMoaW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXQoaW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydGUodWludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0ZSh1aW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHoodWludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0eih1aW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHAodWludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0cCh1aW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydG4odWludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0bih1aW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMyh1aW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXQodWludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRlKGxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydGUobG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnR6KGxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHoobG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRwKGxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHAobG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRuKGxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydG4obG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzMobG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0KGxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0ZSh1bG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0ZSh1bG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnR6KHVsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnR6KHVsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHAodWxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHAodWxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0bih1bG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0bih1bG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzModWxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdCh1bG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRlKGZsb2F0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRlKGZsb2F0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHooZmxvYXQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHooZmxvYXQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0cChmbG9hdDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0cChmbG9hdDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRuKGZsb2F0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRuKGZsb2F0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMyhmbG9hdDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0KGZsb2F0Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydGUoY2hhcjMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnR6KGNoYXIzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0cChjaGFyMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydG4oY2hhcjMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDMoY2hhcjMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRlKHVjaGFyMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHoodWNoYXIzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0cCh1Y2hhcjMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRuKHVjaGFyMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Myh1Y2hhcjMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRlKHNob3J0Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHooc2hvcnQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0cChzaG9ydDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRuKHNob3J0Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MyhzaG9ydDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRlKHVzaG9ydDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnR6KHVzaG9ydDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRwKHVzaG9ydDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRuKHVzaG9ydDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDModXNob3J0Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydGUoaW50Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHooaW50Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHAoaW50Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydG4oaW50Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MyhpbnQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0ZSh1aW50Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHoodWludDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRwKHVpbnQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0bih1aW50Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Myh1aW50Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydGUobG9uZzMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnR6KGxvbmczKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0cChsb25nMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydG4obG9uZzMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDMobG9uZzMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRlKHVsb25nMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHoodWxvbmczKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0cCh1bG9uZzMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRuKHVsb25nMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Myh1bG9uZzMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRlKGZsb2F0Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHooZmxvYXQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0cChmbG9hdDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRuKGZsb2F0Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MyhmbG9hdDMpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0ZShjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0ZShjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnR6KGNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnR6KGNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHAoY2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHAoY2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0bihjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0bihjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjQoY2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdChjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRlKHVjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0ZSh1Y2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0eih1Y2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHoodWNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHAodWNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRwKHVjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRuKHVjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0bih1Y2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0KHVjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0KHVjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRlKHNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0ZShzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0eihzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHooc2hvcnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHAoc2hvcnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRwKHNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRuKHNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0bihzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0KHNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0KHNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRlKHVzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydGUodXNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnR6KHVzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHoodXNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRwKHVzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHAodXNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRuKHVzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydG4odXNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjQodXNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0KHVzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0ZShpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRlKGludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0eihpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnR6KGludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0cChpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRwKGludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0bihpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRuKGludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0KGludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdChpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydGUodWludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydGUodWludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0eih1aW50NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0eih1aW50NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRwKHVpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRwKHVpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydG4odWludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydG4odWludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0KHVpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXQodWludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0ZShsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0ZShsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnR6KGxvbmc0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnR6KGxvbmc0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHAobG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHAobG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0bihsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0bihsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjQobG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdChsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRlKHVsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0ZSh1bG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0eih1bG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHoodWxvbmc0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHAodWxvbmc0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRwKHVsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRuKHVsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0bih1bG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0KHVsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0KHVsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRlKGZsb2F0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0ZShmbG9hdDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0eihmbG9hdDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHooZmxvYXQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHAoZmxvYXQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRwKGZsb2F0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRuKGZsb2F0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0bihmbG9hdDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0KGZsb2F0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0KGZsb2F0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydGUoY2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0ZShjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHooY2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0eihjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHAoY2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0cChjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydG4oY2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0bihjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNChjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXQoY2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRlKHVjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRlKHVjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHoodWNoYXI0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHoodWNoYXI0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0cCh1Y2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0cCh1Y2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRuKHVjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRuKHVjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNCh1Y2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0KHVjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydGUoc2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydGUoc2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0eihzaG9ydDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0eihzaG9ydDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRwKHNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRwKHNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydG4oc2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydG4oc2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0KHNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXQoc2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0ZSh1c2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydGUodXNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHoodXNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnR6KHVzaG9ydDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRwKHVzaG9ydDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0cCh1c2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0bih1c2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydG4odXNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNCh1c2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdCh1c2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0ZShpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydGUoaW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHooaW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnR6KGludDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRwKGludDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0cChpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0bihpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydG4oaW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNChpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdChpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0ZSh1aW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRlKHVpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0eih1aW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnR6KHVpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0cCh1aW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRwKHVpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0bih1aW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRuKHVpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0KHVpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdCh1aW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydGUobG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0ZShsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHoobG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0eihsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHAobG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0cChsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydG4obG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0bihsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNChsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXQobG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRlKHVsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRlKHVsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHoodWxvbmc0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHoodWxvbmc0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0cCh1bG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0cCh1bG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRuKHVsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRuKHVsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNCh1bG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0KHVsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydGUoZmxvYXQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydGUoZmxvYXQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0eihmbG9hdDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0eihmbG9hdDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRwKGZsb2F0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRwKGZsb2F0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydG4oZmxvYXQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydG4oZmxvYXQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0KGZsb2F0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXQoZmxvYXQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0ZShjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRlKGNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0eihjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnR6KGNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0cChjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRwKGNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0bihjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRuKGNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0KGNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdChjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydGUodWNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydGUodWNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0eih1Y2hhcjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0eih1Y2hhcjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRwKHVjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRwKHVjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydG4odWNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydG4odWNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0KHVjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXQodWNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0ZShzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0ZShzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnR6KHNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnR6KHNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHAoc2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydHAoc2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0bihzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0bihzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDQoc2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdChzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRlKHVzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0ZSh1c2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0eih1c2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydHoodXNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHAodXNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRwKHVzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRuKHVzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0bih1c2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0KHVzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0KHVzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRlKGludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0ZShpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0eihpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydHooaW50NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHAoaW50NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRwKGludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRuKGludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0bihpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0KGludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0KGludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRlKHVpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydGUodWludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnR6KHVpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydHoodWludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRwKHVpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydHAodWludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRuKHVpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydG4odWludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDQodWludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0KHVpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0ZShsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRlKGxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0eihsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnR6KGxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0cChsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRwKGxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0bihsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRuKGxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0KGxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdChsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydGUodWxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydGUodWxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0eih1bG9uZzQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0eih1bG9uZzQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRwKHVsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRwKHVsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydG4odWxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydG4odWxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0KHVsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXQodWxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0ZShmbG9hdDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0ZShmbG9hdDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnR6KGZsb2F0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnR6KGZsb2F0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHAoZmxvYXQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydHAoZmxvYXQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0bihmbG9hdDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0bihmbG9hdDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDQoZmxvYXQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdChmbG9hdDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydGUoY2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRlKGNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnR6KGNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0eihjaGFyNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0cChjaGFyNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHAoY2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydG4oY2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRuKGNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDQoY2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXQoY2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydGUodWNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0ZSh1Y2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHoodWNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0eih1Y2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHAodWNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0cCh1Y2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydG4odWNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0bih1Y2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NCh1Y2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXQodWNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRlKHNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydGUoc2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnR6KHNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHooc2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRwKHNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHAoc2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRuKHNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydG4oc2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDQoc2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0KHNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0ZSh1c2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0ZSh1c2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnR6KHVzaG9ydDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnR6KHVzaG9ydDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHAodXNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHAodXNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0bih1c2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0bih1c2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDQodXNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdCh1c2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRlKGludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRlKGludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHooaW50NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHooaW50NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0cChpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0cChpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRuKGludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRuKGludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NChpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0KGludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydGUodWludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRlKHVpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnR6KHVpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0eih1aW50NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0cCh1aW50NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHAodWludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydG4odWludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRuKHVpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDQodWludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXQodWludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydGUobG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRlKGxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnR6KGxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0eihsb25nNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0cChsb25nNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHAobG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydG4obG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRuKGxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDQobG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXQobG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydGUodWxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0ZSh1bG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHoodWxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0eih1bG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHAodWxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0cCh1bG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydG4odWxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0bih1bG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NCh1bG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXQodWxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRlKGZsb2F0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydGUoZmxvYXQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnR6KGZsb2F0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHooZmxvYXQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRwKGZsb2F0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHAoZmxvYXQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRuKGZsb2F0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydG4oZmxvYXQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDQoZmxvYXQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0KGZsb2F0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0ZShjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydGUoY2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHooY2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnR6KGNoYXI0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRwKGNoYXI0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0cChjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0bihjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydG4oY2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NChjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdChjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0ZSh1Y2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRlKHVjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0eih1Y2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnR6KHVjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0cCh1Y2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRwKHVjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0bih1Y2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRuKHVjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0KHVjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdCh1Y2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydGUoc2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0ZShzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHooc2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0eihzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHAoc2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0cChzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydG4oc2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0bihzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NChzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXQoc2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRlKHVzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRlKHVzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHoodXNob3J0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHoodXNob3J0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0cCh1c2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0cCh1c2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRuKHVzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRuKHVzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NCh1c2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0KHVzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydGUoaW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydGUoaW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0eihpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0eihpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRwKGludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRwKGludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydG4oaW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydG4oaW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0KGludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXQoaW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0ZSh1aW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydGUodWludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHoodWludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnR6KHVpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRwKHVpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0cCh1aW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0bih1aW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydG4odWludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NCh1aW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdCh1aW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0ZShsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydGUobG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHoobG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnR6KGxvbmc0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRwKGxvbmc0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0cChsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0bihsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydG4obG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NChsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdChsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0ZSh1bG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRlKHVsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0eih1bG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnR6KHVsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0cCh1bG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRwKHVsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0bih1bG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRuKHVsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0KHVsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdCh1bG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydGUoZmxvYXQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0ZShmbG9hdDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHooZmxvYXQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0eihmbG9hdDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHAoZmxvYXQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0cChmbG9hdDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydG4oZmxvYXQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0bihmbG9hdDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NChmbG9hdDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXQoZmxvYXQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydGUoY2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydGUoY2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0eihjaGFyNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0eihjaGFyNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRwKGNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRwKGNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydG4oY2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydG4oY2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0KGNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXQoY2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0ZSh1Y2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydGUodWNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHoodWNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnR6KHVjaGFyNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRwKHVjaGFyNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0cCh1Y2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0bih1Y2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydG4odWNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NCh1Y2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdCh1Y2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0ZShzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydGUoc2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHooc2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnR6KHNob3J0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRwKHNob3J0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0cChzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0bihzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydG4oc2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NChzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdChzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0ZSh1c2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRlKHVzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0eih1c2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnR6KHVzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0cCh1c2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRwKHVzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0bih1c2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRuKHVzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0KHVzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdCh1c2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydGUoaW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0ZShpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHooaW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0eihpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHAoaW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0cChpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydG4oaW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0bihpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NChpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXQoaW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRlKHVpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRlKHVpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHoodWludDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHoodWludDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0cCh1aW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0cCh1aW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRuKHVpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRuKHVpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NCh1aW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0KHVpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydGUobG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydGUobG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0eihsb25nNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0eihsb25nNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRwKGxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRwKGxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydG4obG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydG4obG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0KGxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXQobG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0ZSh1bG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydGUodWxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHoodWxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnR6KHVsb25nNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRwKHVsb25nNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0cCh1bG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0bih1bG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydG4odWxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NCh1bG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdCh1bG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0ZShmbG9hdDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydGUoZmxvYXQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHooZmxvYXQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnR6KGZsb2F0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRwKGZsb2F0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0cChmbG9hdDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0bihmbG9hdDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydG4oZmxvYXQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NChmbG9hdDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdChmbG9hdDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0ZShjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0ZShjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnR6KGNoYXI0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnR6KGNoYXI0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHAoY2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHAoY2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0bihjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0bihjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzQoY2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdChjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRlKHVjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0ZSh1Y2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0eih1Y2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHoodWNoYXI0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHAodWNoYXI0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRwKHVjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRuKHVjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0bih1Y2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0KHVjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0KHVjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRlKHNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0ZShzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0eihzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHooc2hvcnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHAoc2hvcnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRwKHNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRuKHNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0bihzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0KHNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0KHNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRlKHVzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydGUodXNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnR6KHVzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHoodXNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRwKHVzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHAodXNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRuKHVzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydG4odXNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzQodXNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0KHVzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0ZShpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRlKGludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0eihpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnR6KGludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0cChpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRwKGludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0bihpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRuKGludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0KGludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdChpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydGUodWludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydGUodWludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0eih1aW50NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0eih1aW50NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRwKHVpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRwKHVpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydG4odWludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydG4odWludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0KHVpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXQodWludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0ZShsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0ZShsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnR6KGxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnR6KGxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHAobG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHAobG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0bihsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0bihsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzQobG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdChsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRlKHVsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0ZSh1bG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0eih1bG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHoodWxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHAodWxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRwKHVsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRuKHVsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0bih1bG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0KHVsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0KHVsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRlKGZsb2F0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0ZShmbG9hdDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0eihmbG9hdDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHooZmxvYXQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHAoZmxvYXQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRwKGZsb2F0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRuKGZsb2F0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0bihmbG9hdDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0KGZsb2F0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0KGZsb2F0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydGUoY2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0ZShjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHooY2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0eihjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHAoY2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0cChjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydG4oY2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0bihjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNChjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXQoY2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRlKHVjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRlKHVjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHoodWNoYXI0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHoodWNoYXI0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0cCh1Y2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0cCh1Y2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRuKHVjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRuKHVjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNCh1Y2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0KHVjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydGUoc2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydGUoc2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0eihzaG9ydDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0eihzaG9ydDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRwKHNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRwKHNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydG4oc2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydG4oc2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0KHNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXQoc2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0ZSh1c2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydGUodXNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHoodXNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnR6KHVzaG9ydDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRwKHVzaG9ydDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0cCh1c2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0bih1c2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydG4odXNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNCh1c2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdCh1c2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0ZShpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydGUoaW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHooaW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnR6KGludDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRwKGludDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0cChpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0bihpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydG4oaW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNChpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdChpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0ZSh1aW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRlKHVpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0eih1aW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnR6KHVpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0cCh1aW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRwKHVpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0bih1aW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRuKHVpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0KHVpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdCh1aW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydGUobG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0ZShsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHoobG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0eihsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHAobG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0cChsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydG4obG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0bihsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNChsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXQobG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRlKHVsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRlKHVsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHoodWxvbmc0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHoodWxvbmc0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0cCh1bG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0cCh1bG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRuKHVsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRuKHVsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNCh1bG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0KHVsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydGUoZmxvYXQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydGUoZmxvYXQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0eihmbG9hdDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0eihmbG9hdDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRwKGZsb2F0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRwKGZsb2F0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydG4oZmxvYXQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydG4oZmxvYXQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0KGZsb2F0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXQoZmxvYXQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0ZShjaGFyNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHooY2hhcjQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRwKGNoYXI0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0bihjaGFyNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NChjaGFyNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydGUodWNoYXI0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0eih1Y2hhcjQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRwKHVjaGFyNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydG4odWNoYXI0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0KHVjaGFyNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydGUoc2hvcnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0eihzaG9ydDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRwKHNob3J0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydG4oc2hvcnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0KHNob3J0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydGUodXNob3J0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHoodXNob3J0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHAodXNob3J0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydG4odXNob3J0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NCh1c2hvcnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0ZShpbnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0eihpbnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0cChpbnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0bihpbnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0KGludDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRlKHVpbnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0eih1aW50NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHAodWludDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRuKHVpbnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0KHVpbnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0ZShsb25nNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHoobG9uZzQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRwKGxvbmc0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0bihsb25nNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NChsb25nNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydGUodWxvbmc0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0eih1bG9uZzQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRwKHVsb25nNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydG4odWxvbmc0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0KHVsb25nNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydGUoZmxvYXQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0eihmbG9hdDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRwKGZsb2F0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydG4oZmxvYXQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0KGZsb2F0NCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRlKGNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRlKGNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHooY2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHooY2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0cChjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0cChjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRuKGNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRuKGNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOChjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0KGNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydGUodWNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRlKHVjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnR6KHVjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0eih1Y2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0cCh1Y2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHAodWNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydG4odWNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRuKHVjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjgodWNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXQodWNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydGUoc2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRlKHNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnR6KHNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0eihzaG9ydDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0cChzaG9ydDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHAoc2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydG4oc2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRuKHNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjgoc2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXQoc2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydGUodXNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0ZSh1c2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHoodXNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0eih1c2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHAodXNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0cCh1c2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydG4odXNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0bih1c2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOCh1c2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXQodXNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRlKGludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydGUoaW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnR6KGludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHooaW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRwKGludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHAoaW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRuKGludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydG4oaW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjgoaW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0KGludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0ZSh1aW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0ZSh1aW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnR6KHVpbnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnR6KHVpbnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHAodWludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHAodWludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0bih1aW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0bih1aW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjgodWludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdCh1aW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRlKGxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRlKGxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHoobG9uZzgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHoobG9uZzgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0cChsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0cChsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRuKGxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRuKGxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOChsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0KGxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydGUodWxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRlKHVsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnR6KHVsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0eih1bG9uZzgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0cCh1bG9uZzgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHAodWxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydG4odWxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRuKHVsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjgodWxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXQodWxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydGUoZmxvYXQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRlKGZsb2F0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnR6KGZsb2F0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0eihmbG9hdDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0cChmbG9hdDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHAoZmxvYXQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydG4oZmxvYXQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRuKGZsb2F0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjgoZmxvYXQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXQoZmxvYXQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0ZShjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRlKGNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0eihjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnR6KGNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0cChjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRwKGNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0bihjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRuKGNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4KGNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdChjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydGUodWNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydGUodWNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0eih1Y2hhcjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0eih1Y2hhcjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRwKHVjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRwKHVjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydG4odWNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydG4odWNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4KHVjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXQodWNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0ZShzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0ZShzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnR6KHNob3J0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnR6KHNob3J0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHAoc2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHAoc2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0bihzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0bihzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjgoc2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdChzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRlKHVzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0ZSh1c2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0eih1c2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHoodXNob3J0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHAodXNob3J0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRwKHVzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRuKHVzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0bih1c2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4KHVzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0KHVzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRlKGludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0ZShpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0eihpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHooaW50OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHAoaW50OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRwKGludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRuKGludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0bihpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4KGludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0KGludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRlKHVpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydGUodWludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnR6KHVpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHoodWludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRwKHVpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHAodWludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRuKHVpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydG4odWludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjgodWludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0KHVpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0ZShsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRlKGxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0eihsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnR6KGxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0cChsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRwKGxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0bihsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRuKGxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4KGxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdChsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydGUodWxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydGUodWxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0eih1bG9uZzgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0eih1bG9uZzgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRwKHVsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRwKHVsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydG4odWxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydG4odWxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4KHVsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXQodWxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0ZShmbG9hdDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0ZShmbG9hdDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnR6KGZsb2F0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnR6KGZsb2F0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHAoZmxvYXQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHAoZmxvYXQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0bihmbG9hdDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0bihmbG9hdDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjgoZmxvYXQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdChmbG9hdDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRlKGNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydGUoY2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnR6KGNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHooY2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRwKGNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHAoY2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRuKGNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydG4oY2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDgoY2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0KGNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0ZSh1Y2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0ZSh1Y2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnR6KHVjaGFyOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnR6KHVjaGFyOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydHAodWNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHAodWNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0bih1Y2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0bih1Y2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDgodWNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdCh1Y2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRlKHNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRlKHNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydHooc2hvcnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHooc2hvcnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0cChzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0cChzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRuKHNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRuKHNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OChzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0KHNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydGUodXNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRlKHVzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnR6KHVzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0eih1c2hvcnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0cCh1c2hvcnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHAodXNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydG4odXNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRuKHVzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDgodXNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXQodXNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydGUoaW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRlKGludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnR6KGludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0eihpbnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0cChpbnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHAoaW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydG4oaW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRuKGludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDgoaW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXQoaW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydGUodWludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0ZSh1aW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydHoodWludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0eih1aW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydHAodWludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0cCh1aW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydG4odWludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0bih1aW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OCh1aW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXQodWludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRlKGxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydGUobG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnR6KGxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHoobG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRwKGxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHAobG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRuKGxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydG4obG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDgobG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0KGxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0ZSh1bG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0ZSh1bG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnR6KHVsb25nOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnR6KHVsb25nOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydHAodWxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHAodWxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0bih1bG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0bih1bG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDgodWxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdCh1bG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRlKGZsb2F0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRlKGZsb2F0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydHooZmxvYXQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHooZmxvYXQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0cChmbG9hdDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0cChmbG9hdDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRuKGZsb2F0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRuKGZsb2F0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OChmbG9hdDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0KGZsb2F0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0ZShjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydGUoY2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHooY2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnR6KGNoYXI4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRwKGNoYXI4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0cChjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0bihjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydG4oY2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OChjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdChjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0ZSh1Y2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRlKHVjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0eih1Y2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnR6KHVjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0cCh1Y2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRwKHVjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0bih1Y2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRuKHVjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4KHVjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdCh1Y2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydGUoc2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0ZShzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHooc2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0eihzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHAoc2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0cChzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydG4oc2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0bihzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OChzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXQoc2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRlKHVzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRlKHVzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHoodXNob3J0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHoodXNob3J0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0cCh1c2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0cCh1c2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRuKHVzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRuKHVzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OCh1c2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0KHVzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydGUoaW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydGUoaW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0eihpbnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0eihpbnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRwKGludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRwKGludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydG4oaW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydG4oaW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4KGludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXQoaW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0ZSh1aW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydGUodWludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHoodWludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnR6KHVpbnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRwKHVpbnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0cCh1aW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0bih1aW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydG4odWludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OCh1aW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdCh1aW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0ZShsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydGUobG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHoobG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnR6KGxvbmc4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRwKGxvbmc4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0cChsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0bihsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydG4obG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OChsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdChsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0ZSh1bG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRlKHVsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0eih1bG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnR6KHVsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0cCh1bG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRwKHVsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0bih1bG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRuKHVsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4KHVsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdCh1bG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydGUoZmxvYXQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0ZShmbG9hdDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHooZmxvYXQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0eihmbG9hdDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHAoZmxvYXQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0cChmbG9hdDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydG4oZmxvYXQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0bihmbG9hdDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OChmbG9hdDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXQoZmxvYXQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRlKGNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0ZShjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0eihjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydHooY2hhcjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHAoY2hhcjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRwKGNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRuKGNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0bihjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4KGNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0KGNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRlKHVjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydGUodWNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnR6KHVjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydHoodWNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRwKHVjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydHAodWNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRuKHVjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydG4odWNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDgodWNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0KHVjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0ZShzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRlKHNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0eihzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnR6KHNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0cChzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRwKHNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0bihzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRuKHNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4KHNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdChzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydGUodXNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydGUodXNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0eih1c2hvcnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0eih1c2hvcnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRwKHVzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRwKHVzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydG4odXNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydG4odXNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4KHVzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXQodXNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0ZShpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0ZShpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnR6KGludDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnR6KGludDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHAoaW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydHAoaW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0bihpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0bihpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDgoaW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdChpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRlKHVpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0ZSh1aW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0eih1aW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydHoodWludDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHAodWludDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRwKHVpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRuKHVpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0bih1aW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4KHVpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0KHVpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRlKGxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0ZShsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0eihsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydHoobG9uZzgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHAobG9uZzgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRwKGxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRuKGxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0bihsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4KGxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0KGxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRlKHVsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydGUodWxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnR6KHVsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydHoodWxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRwKHVsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydHAodWxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRuKHVsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydG4odWxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDgodWxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0KHVsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0ZShmbG9hdDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRlKGZsb2F0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0eihmbG9hdDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnR6KGZsb2F0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0cChmbG9hdDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRwKGZsb2F0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0bihmbG9hdDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRuKGZsb2F0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4KGZsb2F0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdChmbG9hdDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0ZShjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0ZShjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnR6KGNoYXI4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnR6KGNoYXI4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHAoY2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHAoY2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0bihjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0bihjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDgoY2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdChjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRlKHVjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0ZSh1Y2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0eih1Y2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHoodWNoYXI4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHAodWNoYXI4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRwKHVjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRuKHVjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0bih1Y2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4KHVjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0KHVjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRlKHNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0ZShzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0eihzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHooc2hvcnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHAoc2hvcnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRwKHNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRuKHNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0bihzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4KHNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0KHNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRlKHVzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydGUodXNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnR6KHVzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHoodXNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRwKHVzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHAodXNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRuKHVzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydG4odXNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDgodXNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0KHVzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0ZShpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRlKGludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0eihpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnR6KGludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0cChpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRwKGludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0bihpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRuKGludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4KGludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdChpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydGUodWludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydGUodWludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0eih1aW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0eih1aW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRwKHVpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRwKHVpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydG4odWludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydG4odWludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4KHVpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXQodWludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0ZShsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0ZShsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnR6KGxvbmc4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnR6KGxvbmc4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHAobG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHAobG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0bihsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0bihsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDgobG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdChsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRlKHVsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0ZSh1bG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0eih1bG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHoodWxvbmc4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHAodWxvbmc4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRwKHVsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRuKHVsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0bih1bG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4KHVsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0KHVsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRlKGZsb2F0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0ZShmbG9hdDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0eihmbG9hdDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHooZmxvYXQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHAoZmxvYXQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRwKGZsb2F0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRuKGZsb2F0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0bihmbG9hdDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4KGZsb2F0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0KGZsb2F0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRlKGNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRlKGNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHooY2hhcjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHooY2hhcjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0cChjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0cChjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRuKGNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRuKGNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOChjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0KGNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydGUodWNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRlKHVjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnR6KHVjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0eih1Y2hhcjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0cCh1Y2hhcjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHAodWNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydG4odWNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRuKHVjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzgodWNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXQodWNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydGUoc2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRlKHNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnR6KHNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0eihzaG9ydDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0cChzaG9ydDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHAoc2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydG4oc2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRuKHNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzgoc2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXQoc2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydGUodXNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0ZSh1c2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHoodXNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0eih1c2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHAodXNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0cCh1c2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydG4odXNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0bih1c2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOCh1c2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXQodXNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRlKGludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydGUoaW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnR6KGludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHooaW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRwKGludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHAoaW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRuKGludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydG4oaW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzgoaW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0KGludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0ZSh1aW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0ZSh1aW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnR6KHVpbnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnR6KHVpbnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHAodWludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHAodWludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0bih1aW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0bih1aW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzgodWludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdCh1aW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRlKGxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRlKGxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHoobG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHoobG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0cChsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0cChsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRuKGxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRuKGxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOChsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0KGxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydGUodWxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRlKHVsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnR6KHVsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0eih1bG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0cCh1bG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHAodWxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydG4odWxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRuKHVsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzgodWxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXQodWxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydGUoZmxvYXQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRlKGZsb2F0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnR6KGZsb2F0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0eihmbG9hdDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0cChmbG9hdDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHAoZmxvYXQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydG4oZmxvYXQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRuKGZsb2F0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzgoZmxvYXQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXQoZmxvYXQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0ZShjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRlKGNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0eihjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnR6KGNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0cChjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRwKGNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0bihjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRuKGNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4KGNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdChjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydGUodWNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydGUodWNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0eih1Y2hhcjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0eih1Y2hhcjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRwKHVjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRwKHVjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydG4odWNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydG4odWNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4KHVjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXQodWNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0ZShzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0ZShzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnR6KHNob3J0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnR6KHNob3J0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHAoc2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHAoc2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0bihzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0bihzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzgoc2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdChzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRlKHVzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0ZSh1c2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0eih1c2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHoodXNob3J0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHAodXNob3J0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRwKHVzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRuKHVzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0bih1c2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4KHVzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0KHVzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRlKGludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0ZShpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0eihpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHooaW50OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHAoaW50OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRwKGludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRuKGludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0bihpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4KGludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0KGludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRlKHVpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydGUodWludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnR6KHVpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHoodWludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRwKHVpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHAodWludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRuKHVpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydG4odWludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzgodWludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0KHVpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0ZShsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRlKGxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0eihsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnR6KGxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0cChsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRwKGxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0bihsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRuKGxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4KGxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdChsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydGUodWxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydGUodWxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0eih1bG9uZzgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0eih1bG9uZzgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRwKHVsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRwKHVsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydG4odWxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydG4odWxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4KHVsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXQodWxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0ZShmbG9hdDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0ZShmbG9hdDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnR6KGZsb2F0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnR6KGZsb2F0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHAoZmxvYXQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHAoZmxvYXQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0bihmbG9hdDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0bihmbG9hdDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzgoZmxvYXQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdChmbG9hdDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRlKGNoYXI4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0eihjaGFyOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHAoY2hhcjgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRuKGNoYXI4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4KGNoYXI4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0ZSh1Y2hhcjgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnR6KHVjaGFyOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHAodWNoYXI4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0bih1Y2hhcjgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDgodWNoYXI4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0ZShzaG9ydDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnR6KHNob3J0OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHAoc2hvcnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0bihzaG9ydDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDgoc2hvcnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0ZSh1c2hvcnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0eih1c2hvcnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0cCh1c2hvcnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0bih1c2hvcnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4KHVzaG9ydDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRlKGludDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnR6KGludDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRwKGludDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRuKGludDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDgoaW50OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydGUodWludDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnR6KHVpbnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0cCh1aW50OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydG4odWludDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDgodWludDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRlKGxvbmc4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0eihsb25nOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHAobG9uZzgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRuKGxvbmc4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4KGxvbmc4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0ZSh1bG9uZzgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnR6KHVsb25nOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHAodWxvbmc4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0bih1bG9uZzgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDgodWxvbmc4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0ZShmbG9hdDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnR6KGZsb2F0OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHAoZmxvYXQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0bihmbG9hdDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDgoZmxvYXQ4KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0ZShjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0ZShjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnR6KGNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnR6KGNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHAoY2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHAoY2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0bihjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0bihjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTYoY2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdChjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRlKHVjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0ZSh1Y2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0eih1Y2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHoodWNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHAodWNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRwKHVjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRuKHVjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0bih1Y2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2KHVjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0KHVjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRlKHNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0ZShzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0eihzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHooc2hvcnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHAoc2hvcnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRwKHNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRuKHNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0bihzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2KHNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0KHNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRlKHVzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydGUodXNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnR6KHVzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHoodXNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRwKHVzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHAodXNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRuKHVzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydG4odXNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTYodXNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0KHVzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0ZShpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRlKGludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0eihpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnR6KGludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0cChpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRwKGludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0bihpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRuKGludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2KGludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdChpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydGUodWludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydGUodWludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0eih1aW50MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0eih1aW50MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRwKHVpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRwKHVpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydG4odWludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydG4odWludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2KHVpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXQodWludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0ZShsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0ZShsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnR6KGxvbmcxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnR6KGxvbmcxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHAobG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHAobG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0bihsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0bihsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTYobG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdChsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRlKHVsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0ZSh1bG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0eih1bG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHoodWxvbmcxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHAodWxvbmcxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRwKHVsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRuKHVsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0bih1bG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2KHVsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0KHVsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRlKGZsb2F0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0ZShmbG9hdDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0eihmbG9hdDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHooZmxvYXQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHAoZmxvYXQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRwKGZsb2F0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRuKGZsb2F0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0bihmbG9hdDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2KGZsb2F0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0KGZsb2F0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydGUoY2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0ZShjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHooY2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0eihjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHAoY2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0cChjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydG4oY2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0bihjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNihjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXQoY2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRlKHVjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRlKHVjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHoodWNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHoodWNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0cCh1Y2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0cCh1Y2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRuKHVjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRuKHVjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNih1Y2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0KHVjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydGUoc2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydGUoc2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0eihzaG9ydDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0eihzaG9ydDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRwKHNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRwKHNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydG4oc2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydG4oc2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2KHNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXQoc2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0ZSh1c2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydGUodXNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHoodXNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnR6KHVzaG9ydDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRwKHVzaG9ydDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0cCh1c2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0bih1c2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydG4odXNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNih1c2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdCh1c2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0ZShpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydGUoaW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHooaW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnR6KGludDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRwKGludDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0cChpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0bihpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydG4oaW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNihpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdChpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0ZSh1aW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRlKHVpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0eih1aW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnR6KHVpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0cCh1aW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRwKHVpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0bih1aW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRuKHVpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2KHVpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdCh1aW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydGUobG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0ZShsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHoobG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0eihsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHAobG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0cChsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydG4obG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0bihsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNihsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXQobG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRlKHVsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRlKHVsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHoodWxvbmcxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHoodWxvbmcxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0cCh1bG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0cCh1bG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRuKHVsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRuKHVsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNih1bG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0KHVsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydGUoZmxvYXQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydGUoZmxvYXQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0eihmbG9hdDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0eihmbG9hdDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRwKGZsb2F0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRwKGZsb2F0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydG4oZmxvYXQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydG4oZmxvYXQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2KGZsb2F0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXQoZmxvYXQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0ZShjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRlKGNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0eihjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnR6KGNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0cChjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRwKGNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0bihjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRuKGNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2KGNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdChjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydGUodWNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydGUodWNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0eih1Y2hhcjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0eih1Y2hhcjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRwKHVjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRwKHVjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydG4odWNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydG4odWNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2KHVjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXQodWNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0ZShzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0ZShzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnR6KHNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnR6KHNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHAoc2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydHAoc2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0bihzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0bihzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTYoc2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdChzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRlKHVzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0ZSh1c2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0eih1c2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydHoodXNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHAodXNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRwKHVzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRuKHVzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0bih1c2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2KHVzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0KHVzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRlKGludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0ZShpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0eihpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydHooaW50MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHAoaW50MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRwKGludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRuKGludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0bihpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2KGludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0KGludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRlKHVpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydGUodWludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnR6KHVpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydHoodWludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRwKHVpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydHAodWludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRuKHVpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydG4odWludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTYodWludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0KHVpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0ZShsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRlKGxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0eihsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnR6KGxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0cChsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRwKGxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0bihsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRuKGxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2KGxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdChsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydGUodWxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydGUodWxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0eih1bG9uZzE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0eih1bG9uZzE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRwKHVsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRwKHVsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydG4odWxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydG4odWxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2KHVsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXQodWxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0ZShmbG9hdDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0ZShmbG9hdDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnR6KGZsb2F0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnR6KGZsb2F0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHAoZmxvYXQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydHAoZmxvYXQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0bihmbG9hdDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0bihmbG9hdDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTYoZmxvYXQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdChmbG9hdDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydGUoY2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRlKGNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnR6KGNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0eihjaGFyMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0cChjaGFyMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHAoY2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydG4oY2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRuKGNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTYoY2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXQoY2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydGUodWNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0ZSh1Y2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHoodWNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0eih1Y2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHAodWNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0cCh1Y2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydG4odWNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0bih1Y2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNih1Y2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXQodWNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRlKHNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydGUoc2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnR6KHNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHooc2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRwKHNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHAoc2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRuKHNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydG4oc2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTYoc2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0KHNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0ZSh1c2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0ZSh1c2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnR6KHVzaG9ydDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnR6KHVzaG9ydDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHAodXNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHAodXNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0bih1c2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0bih1c2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTYodXNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdCh1c2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRlKGludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRlKGludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHooaW50MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHooaW50MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0cChpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0cChpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRuKGludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRuKGludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNihpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0KGludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydGUodWludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRlKHVpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnR6KHVpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0eih1aW50MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0cCh1aW50MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHAodWludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydG4odWludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRuKHVpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTYodWludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXQodWludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydGUobG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRlKGxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnR6KGxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0eihsb25nMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0cChsb25nMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHAobG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydG4obG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRuKGxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTYobG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXQobG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydGUodWxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0ZSh1bG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHoodWxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0eih1bG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHAodWxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0cCh1bG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydG4odWxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0bih1bG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNih1bG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXQodWxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRlKGZsb2F0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydGUoZmxvYXQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnR6KGZsb2F0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHooZmxvYXQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRwKGZsb2F0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHAoZmxvYXQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRuKGZsb2F0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydG4oZmxvYXQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTYoZmxvYXQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0KGZsb2F0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0ZShjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydGUoY2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHooY2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnR6KGNoYXIxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRwKGNoYXIxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0cChjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0bihjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydG4oY2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNihjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdChjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0ZSh1Y2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRlKHVjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0eih1Y2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnR6KHVjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0cCh1Y2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRwKHVjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0bih1Y2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRuKHVjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2KHVjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdCh1Y2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydGUoc2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0ZShzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHooc2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0eihzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHAoc2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0cChzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydG4oc2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0bihzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNihzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXQoc2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRlKHVzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRlKHVzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHoodXNob3J0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHoodXNob3J0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0cCh1c2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0cCh1c2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRuKHVzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRuKHVzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNih1c2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0KHVzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydGUoaW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydGUoaW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0eihpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0eihpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRwKGludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRwKGludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydG4oaW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydG4oaW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2KGludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXQoaW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0ZSh1aW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydGUodWludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHoodWludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnR6KHVpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRwKHVpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0cCh1aW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0bih1aW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydG4odWludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNih1aW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdCh1aW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0ZShsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydGUobG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHoobG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnR6KGxvbmcxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRwKGxvbmcxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0cChsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0bihsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydG4obG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNihsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdChsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0ZSh1bG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRlKHVsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0eih1bG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnR6KHVsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0cCh1bG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRwKHVsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0bih1bG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRuKHVsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2KHVsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdCh1bG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydGUoZmxvYXQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0ZShmbG9hdDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHooZmxvYXQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0eihmbG9hdDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHAoZmxvYXQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0cChmbG9hdDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydG4oZmxvYXQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0bihmbG9hdDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNihmbG9hdDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXQoZmxvYXQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydGUoY2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydGUoY2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0eihjaGFyMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0eihjaGFyMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRwKGNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRwKGNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydG4oY2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydG4oY2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2KGNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXQoY2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0ZSh1Y2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydGUodWNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHoodWNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnR6KHVjaGFyMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRwKHVjaGFyMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0cCh1Y2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0bih1Y2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydG4odWNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNih1Y2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdCh1Y2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0ZShzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydGUoc2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHooc2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnR6KHNob3J0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRwKHNob3J0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0cChzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0bihzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydG4oc2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNihzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdChzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0ZSh1c2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRlKHVzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0eih1c2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnR6KHVzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0cCh1c2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRwKHVzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0bih1c2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRuKHVzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2KHVzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdCh1c2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydGUoaW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0ZShpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHooaW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0eihpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHAoaW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0cChpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydG4oaW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0bihpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNihpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXQoaW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRlKHVpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRlKHVpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHoodWludDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHoodWludDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0cCh1aW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0cCh1aW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRuKHVpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRuKHVpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNih1aW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0KHVpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydGUobG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydGUobG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0eihsb25nMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0eihsb25nMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRwKGxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRwKGxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydG4obG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydG4obG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2KGxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXQobG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0ZSh1bG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydGUodWxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHoodWxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnR6KHVsb25nMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRwKHVsb25nMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0cCh1bG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0bih1bG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydG4odWxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNih1bG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdCh1bG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0ZShmbG9hdDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydGUoZmxvYXQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHooZmxvYXQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnR6KGZsb2F0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRwKGZsb2F0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0cChmbG9hdDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0bihmbG9hdDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydG4oZmxvYXQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNihmbG9hdDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdChmbG9hdDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0ZShjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0ZShjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnR6KGNoYXIxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnR6KGNoYXIxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHAoY2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHAoY2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0bihjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0bihjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTYoY2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdChjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRlKHVjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0ZSh1Y2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0eih1Y2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHoodWNoYXIxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHAodWNoYXIxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRwKHVjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRuKHVjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0bih1Y2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2KHVjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0KHVjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRlKHNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0ZShzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0eihzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHooc2hvcnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHAoc2hvcnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRwKHNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRuKHNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0bihzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2KHNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0KHNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRlKHVzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydGUodXNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnR6KHVzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHoodXNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRwKHVzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHAodXNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRuKHVzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydG4odXNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTYodXNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0KHVzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0ZShpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRlKGludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0eihpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnR6KGludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0cChpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRwKGludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0bihpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRuKGludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2KGludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdChpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydGUodWludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydGUodWludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0eih1aW50MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0eih1aW50MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRwKHVpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRwKHVpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydG4odWludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydG4odWludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2KHVpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXQodWludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0ZShsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0ZShsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnR6KGxvbmcxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnR6KGxvbmcxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHAobG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHAobG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0bihsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0bihsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTYobG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdChsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRlKHVsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0ZSh1bG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0eih1bG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHoodWxvbmcxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHAodWxvbmcxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRwKHVsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRuKHVsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0bih1bG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2KHVsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0KHVsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRlKGZsb2F0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0ZShmbG9hdDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0eihmbG9hdDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHooZmxvYXQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHAoZmxvYXQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRwKGZsb2F0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRuKGZsb2F0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0bihmbG9hdDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2KGZsb2F0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0KGZsb2F0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydGUoY2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0ZShjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHooY2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0eihjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHAoY2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0cChjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydG4oY2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0bihjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNihjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXQoY2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRlKHVjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRlKHVjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHoodWNoYXIxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHoodWNoYXIxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0cCh1Y2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0cCh1Y2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRuKHVjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRuKHVjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNih1Y2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0KHVjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydGUoc2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydGUoc2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0eihzaG9ydDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0eihzaG9ydDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRwKHNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRwKHNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydG4oc2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydG4oc2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2KHNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXQoc2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0ZSh1c2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydGUodXNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHoodXNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnR6KHVzaG9ydDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRwKHVzaG9ydDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0cCh1c2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0bih1c2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydG4odXNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNih1c2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdCh1c2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0ZShpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydGUoaW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHooaW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnR6KGludDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRwKGludDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0cChpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0bihpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydG4oaW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNihpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdChpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0ZSh1aW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRlKHVpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0eih1aW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnR6KHVpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0cCh1aW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRwKHVpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0bih1aW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRuKHVpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2KHVpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdCh1aW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydGUobG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0ZShsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHoobG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0eihsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHAobG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0cChsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydG4obG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0bihsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNihsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXQobG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRlKHVsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRlKHVsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHoodWxvbmcxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHoodWxvbmcxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0cCh1bG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0cCh1bG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRuKHVsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRuKHVsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNih1bG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0KHVsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydGUoZmxvYXQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydGUoZmxvYXQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0eihmbG9hdDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0eihmbG9hdDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRwKGZsb2F0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRwKGZsb2F0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydG4oZmxvYXQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydG4oZmxvYXQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2KGZsb2F0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXQoZmxvYXQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0ZShjaGFyMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHooY2hhcjE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRwKGNoYXIxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0bihjaGFyMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNihjaGFyMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydGUodWNoYXIxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0eih1Y2hhcjE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRwKHVjaGFyMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydG4odWNoYXIxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2KHVjaGFyMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydGUoc2hvcnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0eihzaG9ydDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRwKHNob3J0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydG4oc2hvcnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2KHNob3J0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydGUodXNob3J0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHoodXNob3J0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHAodXNob3J0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydG4odXNob3J0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNih1c2hvcnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0ZShpbnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0eihpbnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0cChpbnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0bihpbnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2KGludDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRlKHVpbnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0eih1aW50MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHAodWludDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRuKHVpbnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2KHVpbnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0ZShsb25nMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHoobG9uZzE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRwKGxvbmcxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0bihsb25nMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNihsb25nMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydGUodWxvbmcxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0eih1bG9uZzE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRwKHVsb25nMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydG4odWxvbmcxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2KHVsb25nMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydGUoZmxvYXQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0eihmbG9hdDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRwKGZsb2F0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydG4oZmxvYXQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2KGZsb2F0MTYpOworCisvLyBDb252ZXJzaW9ucyB3aXRoIGRvdWJsZSBkYXRhIHR5cGUgcGFyYW1ldGVycyBvciByZXR1cm4gdmFsdWUuCisKKyNpZmRlZiBjbF9raHJfZnA2NAorY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcihkb3VibGUpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydGUoZG91YmxlKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRuKGRvdWJsZSk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0cChkb3VibGUpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHooZG91YmxlKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0KGRvdWJsZSk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydGUoZG91YmxlKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0bihkb3VibGUpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRwKGRvdWJsZSk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHooZG91YmxlKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMihkb3VibGUyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydGUoZG91YmxlMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRuKGRvdWJsZTIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0cChkb3VibGUyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHooZG91YmxlMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0KGRvdWJsZTIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydGUoZG91YmxlMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0bihkb3VibGUyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRwKGRvdWJsZTIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHooZG91YmxlMik7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjMoZG91YmxlMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRlKGRvdWJsZTMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0bihkb3VibGUzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHAoZG91YmxlMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnR6KGRvdWJsZTMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdChkb3VibGUzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRlKGRvdWJsZTMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydG4oZG91YmxlMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0cChkb3VibGUzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnR6KGRvdWJsZTMpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0KGRvdWJsZTQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0ZShkb3VibGU0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydG4oZG91YmxlNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRwKGRvdWJsZTQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0eihkb3VibGU0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXQoZG91YmxlNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0ZShkb3VibGU0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRuKGRvdWJsZTQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHAoZG91YmxlNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0eihkb3VibGU0KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOChkb3VibGU4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydGUoZG91YmxlOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRuKGRvdWJsZTgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0cChkb3VibGU4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHooZG91YmxlOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0KGRvdWJsZTgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydGUoZG91YmxlOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0bihkb3VibGU4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRwKGRvdWJsZTgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHooZG91YmxlOCk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNihkb3VibGUxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydGUoZG91YmxlMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRuKGRvdWJsZTE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0cChkb3VibGUxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHooZG91YmxlMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0KGRvdWJsZTE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydGUoZG91YmxlMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0bihkb3VibGUxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRwKGRvdWJsZTE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHooZG91YmxlMTYpOworCit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIoZG91YmxlKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydGUoZG91YmxlKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydG4oZG91YmxlKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHAoZG91YmxlKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHooZG91YmxlKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXQoZG91YmxlKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRlKGRvdWJsZSk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0bihkb3VibGUpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydHAoZG91YmxlKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnR6KGRvdWJsZSk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMihkb3VibGUyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0ZShkb3VibGUyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0bihkb3VibGUyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0cChkb3VibGUyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0eihkb3VibGUyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdChkb3VibGUyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydGUoZG91YmxlMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRuKGRvdWJsZTIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0cChkb3VibGUyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHooZG91YmxlMik7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMyhkb3VibGUzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0ZShkb3VibGUzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0bihkb3VibGUzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0cChkb3VibGUzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0eihkb3VibGUzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdChkb3VibGUzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydGUoZG91YmxlMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRuKGRvdWJsZTMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0cChkb3VibGUzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHooZG91YmxlMyk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNChkb3VibGU0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0ZShkb3VibGU0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0bihkb3VibGU0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0cChkb3VibGU0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0eihkb3VibGU0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdChkb3VibGU0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydGUoZG91YmxlNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRuKGRvdWJsZTQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0cChkb3VibGU0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHooZG91YmxlNCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOChkb3VibGU4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0ZShkb3VibGU4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0bihkb3VibGU4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0cChkb3VibGU4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0eihkb3VibGU4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdChkb3VibGU4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydGUoZG91YmxlOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRuKGRvdWJsZTgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0cChkb3VibGU4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHooZG91YmxlOCk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2KGRvdWJsZTE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRlKGRvdWJsZTE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRuKGRvdWJsZTE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRwKGRvdWJsZTE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnR6KGRvdWJsZTE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0KGRvdWJsZTE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0ZShkb3VibGUxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydG4oZG91YmxlMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRwKGRvdWJsZTE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0eihkb3VibGUxNik7CisKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydChkb3VibGUpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0ZShkb3VibGUpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0bihkb3VibGUpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0cChkb3VibGUpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0eihkb3VibGUpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdChkb3VibGUpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydGUoZG91YmxlKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRuKGRvdWJsZSk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0cChkb3VibGUpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHooZG91YmxlKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyKGRvdWJsZTIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRlKGRvdWJsZTIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRuKGRvdWJsZTIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRwKGRvdWJsZTIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnR6KGRvdWJsZTIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0KGRvdWJsZTIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0ZShkb3VibGUyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydG4oZG91YmxlMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRwKGRvdWJsZTIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0eihkb3VibGUyKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzKGRvdWJsZTMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRlKGRvdWJsZTMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRuKGRvdWJsZTMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRwKGRvdWJsZTMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnR6KGRvdWJsZTMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0KGRvdWJsZTMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0ZShkb3VibGUzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydG4oZG91YmxlMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRwKGRvdWJsZTMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0eihkb3VibGUzKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0KGRvdWJsZTQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRlKGRvdWJsZTQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRuKGRvdWJsZTQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRwKGRvdWJsZTQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnR6KGRvdWJsZTQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0KGRvdWJsZTQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0ZShkb3VibGU0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydG4oZG91YmxlNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRwKGRvdWJsZTQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0eihkb3VibGU0KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4KGRvdWJsZTgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRlKGRvdWJsZTgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRuKGRvdWJsZTgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRwKGRvdWJsZTgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnR6KGRvdWJsZTgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0KGRvdWJsZTgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0ZShkb3VibGU4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydG4oZG91YmxlOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRwKGRvdWJsZTgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0eihkb3VibGU4KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTYoZG91YmxlMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydGUoZG91YmxlMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydG4oZG91YmxlMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHAoZG91YmxlMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHooZG91YmxlMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXQoZG91YmxlMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRlKGRvdWJsZTE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0bihkb3VibGUxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydHAoZG91YmxlMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnR6KGRvdWJsZTE2KTsKKwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQoZG91YmxlKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0ZShkb3VibGUpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRuKGRvdWJsZSk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHAoZG91YmxlKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0eihkb3VibGUpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0KGRvdWJsZSk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRlKGRvdWJsZSk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRuKGRvdWJsZSk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRwKGRvdWJsZSk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnR6KGRvdWJsZSk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyKGRvdWJsZTIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydGUoZG91YmxlMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0bihkb3VibGUyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRwKGRvdWJsZTIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHooZG91YmxlMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdChkb3VibGUyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0ZShkb3VibGUyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0bihkb3VibGUyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0cChkb3VibGUyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0eihkb3VibGUyKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDMoZG91YmxlMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0ZShkb3VibGUzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRuKGRvdWJsZTMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHAoZG91YmxlMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0eihkb3VibGUzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0KGRvdWJsZTMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRlKGRvdWJsZTMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRuKGRvdWJsZTMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRwKGRvdWJsZTMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnR6KGRvdWJsZTMpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NChkb3VibGU0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRlKGRvdWJsZTQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydG4oZG91YmxlNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0cChkb3VibGU0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnR6KGRvdWJsZTQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXQoZG91YmxlNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydGUoZG91YmxlNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydG4oZG91YmxlNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHAoZG91YmxlNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHooZG91YmxlNCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4KGRvdWJsZTgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydGUoZG91YmxlOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0bihkb3VibGU4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRwKGRvdWJsZTgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHooZG91YmxlOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdChkb3VibGU4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0ZShkb3VibGU4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0bihkb3VibGU4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0cChkb3VibGU4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0eihkb3VibGU4KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNihkb3VibGUxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRlKGRvdWJsZTE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydG4oZG91YmxlMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0cChkb3VibGUxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnR6KGRvdWJsZTE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXQoZG91YmxlMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydGUoZG91YmxlMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydG4oZG91YmxlMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHAoZG91YmxlMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHooZG91YmxlMTYpOworCitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludChkb3VibGUpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRlKGRvdWJsZSk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydG4oZG91YmxlKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0cChkb3VibGUpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnR6KGRvdWJsZSk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXQoZG91YmxlKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydGUoZG91YmxlKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydG4oZG91YmxlKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHAoZG91YmxlKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHooZG91YmxlKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDIoZG91YmxlMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0ZShkb3VibGUyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRuKGRvdWJsZTIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHAoZG91YmxlMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0eihkb3VibGUyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0KGRvdWJsZTIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRlKGRvdWJsZTIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRuKGRvdWJsZTIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRwKGRvdWJsZTIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnR6KGRvdWJsZTIpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Myhkb3VibGUzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRlKGRvdWJsZTMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydG4oZG91YmxlMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0cChkb3VibGUzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnR6KGRvdWJsZTMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXQoZG91YmxlMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydGUoZG91YmxlMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydG4oZG91YmxlMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHAoZG91YmxlMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHooZG91YmxlMyk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0KGRvdWJsZTQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydGUoZG91YmxlNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0bihkb3VibGU0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRwKGRvdWJsZTQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHooZG91YmxlNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdChkb3VibGU0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0ZShkb3VibGU0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0bihkb3VibGU0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0cChkb3VibGU0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0eihkb3VibGU0KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDgoZG91YmxlOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0ZShkb3VibGU4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRuKGRvdWJsZTgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHAoZG91YmxlOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0eihkb3VibGU4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0KGRvdWJsZTgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRlKGRvdWJsZTgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRuKGRvdWJsZTgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRwKGRvdWJsZTgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnR6KGRvdWJsZTgpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2KGRvdWJsZTE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydGUoZG91YmxlMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0bihkb3VibGUxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRwKGRvdWJsZTE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHooZG91YmxlMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdChkb3VibGUxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0ZShkb3VibGUxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0bihkb3VibGUxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0cChkb3VibGUxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0eihkb3VibGUxNik7CisKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQoZG91YmxlKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRlKGRvdWJsZSk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0bihkb3VibGUpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHAoZG91YmxlKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnR6KGRvdWJsZSk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdChkb3VibGUpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRlKGRvdWJsZSk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydG4oZG91YmxlKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0cChkb3VibGUpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnR6KGRvdWJsZSk7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDIoZG91YmxlMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRlKGRvdWJsZTIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0bihkb3VibGUyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHAoZG91YmxlMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnR6KGRvdWJsZTIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdChkb3VibGUyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRlKGRvdWJsZTIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydG4oZG91YmxlMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0cChkb3VibGUyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnR6KGRvdWJsZTIpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzKGRvdWJsZTMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0ZShkb3VibGUzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydG4oZG91YmxlMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRwKGRvdWJsZTMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0eihkb3VibGUzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXQoZG91YmxlMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0ZShkb3VibGUzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRuKGRvdWJsZTMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHAoZG91YmxlMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0eihkb3VibGUzKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NChkb3VibGU0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydGUoZG91YmxlNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRuKGRvdWJsZTQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0cChkb3VibGU0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHooZG91YmxlNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0KGRvdWJsZTQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydGUoZG91YmxlNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0bihkb3VibGU0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRwKGRvdWJsZTQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHooZG91YmxlNCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDgoZG91YmxlOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRlKGRvdWJsZTgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0bihkb3VibGU4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHAoZG91YmxlOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnR6KGRvdWJsZTgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdChkb3VibGU4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRlKGRvdWJsZTgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydG4oZG91YmxlOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0cChkb3VibGU4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnR6KGRvdWJsZTgpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTYoZG91YmxlMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRlKGRvdWJsZTE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0bihkb3VibGUxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHAoZG91YmxlMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnR6KGRvdWJsZTE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdChkb3VibGUxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRlKGRvdWJsZTE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydG4oZG91YmxlMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0cChkb3VibGUxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnR6KGRvdWJsZTE2KTsKKworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZyhkb3VibGUpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydGUoZG91YmxlKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRuKGRvdWJsZSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0cChkb3VibGUpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHooZG91YmxlKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0KGRvdWJsZSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydGUoZG91YmxlKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0bihkb3VibGUpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRwKGRvdWJsZSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydHooZG91YmxlKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMihkb3VibGUyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydGUoZG91YmxlMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRuKGRvdWJsZTIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0cChkb3VibGUyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHooZG91YmxlMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0KGRvdWJsZTIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydGUoZG91YmxlMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0bihkb3VibGUyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRwKGRvdWJsZTIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHooZG91YmxlMik7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzMoZG91YmxlMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRlKGRvdWJsZTMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0bihkb3VibGUzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHAoZG91YmxlMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnR6KGRvdWJsZTMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdChkb3VibGUzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRlKGRvdWJsZTMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydG4oZG91YmxlMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0cChkb3VibGUzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnR6KGRvdWJsZTMpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0KGRvdWJsZTQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0ZShkb3VibGU0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydG4oZG91YmxlNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRwKGRvdWJsZTQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0eihkb3VibGU0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXQoZG91YmxlNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0ZShkb3VibGU0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRuKGRvdWJsZTQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHAoZG91YmxlNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0eihkb3VibGU0KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOChkb3VibGU4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydGUoZG91YmxlOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRuKGRvdWJsZTgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0cChkb3VibGU4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHooZG91YmxlOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0KGRvdWJsZTgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydGUoZG91YmxlOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0bihkb3VibGU4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRwKGRvdWJsZTgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHooZG91YmxlOCk7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNihkb3VibGUxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydGUoZG91YmxlMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRuKGRvdWJsZTE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0cChkb3VibGUxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHooZG91YmxlMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0KGRvdWJsZTE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydGUoZG91YmxlMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0bihkb3VibGUxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRwKGRvdWJsZTE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHooZG91YmxlMTYpOworCit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcoZG91YmxlKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydGUoZG91YmxlKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydG4oZG91YmxlKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHAoZG91YmxlKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHooZG91YmxlKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXQoZG91YmxlKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRlKGRvdWJsZSk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0bihkb3VibGUpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHAoZG91YmxlKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnR6KGRvdWJsZSk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMihkb3VibGUyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0ZShkb3VibGUyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0bihkb3VibGUyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0cChkb3VibGUyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0eihkb3VibGUyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdChkb3VibGUyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydGUoZG91YmxlMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRuKGRvdWJsZTIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0cChkb3VibGUyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHooZG91YmxlMik7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMyhkb3VibGUzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0ZShkb3VibGUzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0bihkb3VibGUzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0cChkb3VibGUzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0eihkb3VibGUzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdChkb3VibGUzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydGUoZG91YmxlMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRuKGRvdWJsZTMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0cChkb3VibGUzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHooZG91YmxlMyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNChkb3VibGU0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0ZShkb3VibGU0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0bihkb3VibGU0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0cChkb3VibGU0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0eihkb3VibGU0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdChkb3VibGU0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydGUoZG91YmxlNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRuKGRvdWJsZTQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0cChkb3VibGU0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHooZG91YmxlNCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOChkb3VibGU4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0ZShkb3VibGU4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0bihkb3VibGU4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0cChkb3VibGU4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0eihkb3VibGU4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdChkb3VibGU4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydGUoZG91YmxlOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRuKGRvdWJsZTgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0cChkb3VibGU4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHooZG91YmxlOCk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2KGRvdWJsZTE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRlKGRvdWJsZTE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRuKGRvdWJsZTE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRwKGRvdWJsZTE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnR6KGRvdWJsZTE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0KGRvdWJsZTE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0ZShkb3VibGUxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydG4oZG91YmxlMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRwKGRvdWJsZTE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0eihkb3VibGUxNik7CisKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdChkb3VibGUpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0ZShkb3VibGUpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0bihkb3VibGUpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0cChkb3VibGUpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0eihkb3VibGUpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDIoZG91YmxlMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydGUoZG91YmxlMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydG4oZG91YmxlMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHAoZG91YmxlMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHooZG91YmxlMik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Myhkb3VibGUzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0ZShkb3VibGUzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0bihkb3VibGUzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0cChkb3VibGUzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0eihkb3VibGUzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0KGRvdWJsZTQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRlKGRvdWJsZTQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRuKGRvdWJsZTQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRwKGRvdWJsZTQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnR6KGRvdWJsZTQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDgoZG91YmxlOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydGUoZG91YmxlOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydG4oZG91YmxlOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHAoZG91YmxlOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHooZG91YmxlOCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2KGRvdWJsZTE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRlKGRvdWJsZTE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRuKGRvdWJsZTE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRwKGRvdWJsZTE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnR6KGRvdWJsZTE2KTsKKworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUoY2hhcik7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZShkb3VibGUpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUoZmxvYXQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUoaW50KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlKGxvbmcpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUoc2hvcnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUodWNoYXIpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUodWludCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZSh1bG9uZyk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZSh1c2hvcnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRlKGNoYXIpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRlKGRvdWJsZSk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydGUoZmxvYXQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRlKGludCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydGUobG9uZyk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydGUoc2hvcnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRlKHVjaGFyKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0ZSh1aW50KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0ZSh1bG9uZyk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydGUodXNob3J0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0bihjaGFyKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0bihkb3VibGUpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRuKGZsb2F0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0bihpbnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRuKGxvbmcpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRuKHNob3J0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0bih1Y2hhcik7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydG4odWludCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydG4odWxvbmcpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRuKHVzaG9ydCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHAoY2hhcik7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHAoZG91YmxlKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0cChmbG9hdCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHAoaW50KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0cChsb25nKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0cChzaG9ydCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHAodWNoYXIpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRwKHVpbnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRwKHVsb25nKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0cCh1c2hvcnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnR6KGNoYXIpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnR6KGRvdWJsZSk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHooZmxvYXQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnR6KGludCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHoobG9uZyk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHooc2hvcnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnR6KHVjaGFyKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0eih1aW50KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0eih1bG9uZyk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHoodXNob3J0KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTIoY2hhcjIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMihkb3VibGUyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTIoZmxvYXQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTIoaW50Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyKGxvbmcyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTIoc2hvcnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTIodWNoYXIyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTIodWludDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMih1bG9uZzIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMih1c2hvcnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRlKGNoYXIyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRlKGRvdWJsZTIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydGUoZmxvYXQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRlKGludDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydGUobG9uZzIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydGUoc2hvcnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRlKHVjaGFyMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0ZSh1aW50Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0ZSh1bG9uZzIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydGUodXNob3J0Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0bihjaGFyMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0bihkb3VibGUyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRuKGZsb2F0Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0bihpbnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRuKGxvbmcyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRuKHNob3J0Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0bih1Y2hhcjIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydG4odWludDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydG4odWxvbmcyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRuKHVzaG9ydDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHAoY2hhcjIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHAoZG91YmxlMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0cChmbG9hdDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHAoaW50Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0cChsb25nMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0cChzaG9ydDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHAodWNoYXIyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRwKHVpbnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRwKHVsb25nMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0cCh1c2hvcnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnR6KGNoYXIyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnR6KGRvdWJsZTIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHooZmxvYXQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnR6KGludDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHoobG9uZzIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHooc2hvcnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnR6KHVjaGFyMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0eih1aW50Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0eih1bG9uZzIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHoodXNob3J0Mik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzKGNoYXIzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTMoZG91YmxlMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzKGZsb2F0Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzKGludDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMyhsb25nMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzKHNob3J0Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzKHVjaGFyMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzKHVpbnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTModWxvbmczKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTModXNob3J0Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0ZShjaGFyMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0ZShkb3VibGUzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRlKGZsb2F0Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0ZShpbnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRlKGxvbmczKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRlKHNob3J0Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0ZSh1Y2hhcjMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydGUodWludDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydGUodWxvbmczKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRlKHVzaG9ydDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydG4oY2hhcjMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydG4oZG91YmxlMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0bihmbG9hdDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydG4oaW50Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0bihsb25nMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0bihzaG9ydDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydG4odWNoYXIzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRuKHVpbnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRuKHVsb25nMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0bih1c2hvcnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRwKGNoYXIzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRwKGRvdWJsZTMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHAoZmxvYXQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRwKGludDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHAobG9uZzMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHAoc2hvcnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRwKHVjaGFyMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0cCh1aW50Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0cCh1bG9uZzMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHAodXNob3J0Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0eihjaGFyMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0eihkb3VibGUzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnR6KGZsb2F0Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0eihpbnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnR6KGxvbmczKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnR6KHNob3J0Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0eih1Y2hhcjMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHoodWludDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHoodWxvbmczKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnR6KHVzaG9ydDMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNChjaGFyNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0KGRvdWJsZTQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNChmbG9hdDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNChpbnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTQobG9uZzQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNChzaG9ydDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNCh1Y2hhcjQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNCh1aW50NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0KHVsb25nNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0KHVzaG9ydDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydGUoY2hhcjQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydGUoZG91YmxlNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0ZShmbG9hdDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydGUoaW50NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0ZShsb25nNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0ZShzaG9ydDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydGUodWNoYXI0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRlKHVpbnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRlKHVsb25nNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0ZSh1c2hvcnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRuKGNoYXI0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRuKGRvdWJsZTQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydG4oZmxvYXQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRuKGludDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydG4obG9uZzQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydG4oc2hvcnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRuKHVjaGFyNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0bih1aW50NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0bih1bG9uZzQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydG4odXNob3J0NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0cChjaGFyNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0cChkb3VibGU0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRwKGZsb2F0NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0cChpbnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRwKGxvbmc0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRwKHNob3J0NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0cCh1Y2hhcjQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHAodWludDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHAodWxvbmc0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRwKHVzaG9ydDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHooY2hhcjQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHooZG91YmxlNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0eihmbG9hdDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHooaW50NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0eihsb25nNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0eihzaG9ydDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHoodWNoYXI0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnR6KHVpbnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnR6KHVsb25nNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0eih1c2hvcnQ0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTgoY2hhcjgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOChkb3VibGU4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTgoZmxvYXQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTgoaW50OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4KGxvbmc4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTgoc2hvcnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTgodWNoYXI4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTgodWludDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOCh1bG9uZzgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOCh1c2hvcnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRlKGNoYXI4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRlKGRvdWJsZTgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydGUoZmxvYXQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRlKGludDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydGUobG9uZzgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydGUoc2hvcnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRlKHVjaGFyOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0ZSh1aW50OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0ZSh1bG9uZzgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydGUodXNob3J0OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0bihjaGFyOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0bihkb3VibGU4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRuKGZsb2F0OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0bihpbnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRuKGxvbmc4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRuKHNob3J0OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0bih1Y2hhcjgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydG4odWludDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydG4odWxvbmc4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRuKHVzaG9ydDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHAoY2hhcjgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHAoZG91YmxlOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0cChmbG9hdDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHAoaW50OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0cChsb25nOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0cChzaG9ydDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHAodWNoYXI4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRwKHVpbnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRwKHVsb25nOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0cCh1c2hvcnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnR6KGNoYXI4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnR6KGRvdWJsZTgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHooZmxvYXQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnR6KGludDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHoobG9uZzgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHooc2hvcnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnR6KHVjaGFyOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0eih1aW50OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0eih1bG9uZzgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHoodXNob3J0OCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTYoY2hhcjE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNihkb3VibGUxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTYoZmxvYXQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTYoaW50MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2KGxvbmcxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTYoc2hvcnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTYodWNoYXIxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTYodWludDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNih1bG9uZzE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNih1c2hvcnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRlKGNoYXIxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRlKGRvdWJsZTE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydGUoZmxvYXQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRlKGludDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydGUobG9uZzE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydGUoc2hvcnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRlKHVjaGFyMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0ZSh1aW50MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0ZSh1bG9uZzE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydGUodXNob3J0MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0bihjaGFyMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0bihkb3VibGUxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRuKGZsb2F0MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0bihpbnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRuKGxvbmcxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRuKHNob3J0MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0bih1Y2hhcjE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydG4odWludDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydG4odWxvbmcxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRuKHVzaG9ydDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHAoY2hhcjE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHAoZG91YmxlMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0cChmbG9hdDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHAoaW50MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0cChsb25nMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0cChzaG9ydDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHAodWNoYXIxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRwKHVpbnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRwKHVsb25nMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0cCh1c2hvcnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnR6KGNoYXIxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnR6KGRvdWJsZTE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHooZmxvYXQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnR6KGludDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHoobG9uZzE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHooc2hvcnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnR6KHVjaGFyMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0eih1aW50MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0eih1bG9uZzE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHoodXNob3J0MTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKworI2lmZGVmIGNsX2tocl9mcDE2CisvLyBDb252ZXJ0IGhhbGYgdHlwZXMgdG8gbm9uLWRvdWJsZSB0eXBlcy4KK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcihoYWxmKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydGUoaGFsZik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRwKGhhbGYpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0bihoYWxmKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHooaGFsZik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0KGhhbGYpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydGUoaGFsZik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0cChoYWxmKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRuKGhhbGYpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydHooaGFsZik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMihoYWxmMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydGUoaGFsZjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRwKGhhbGYyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0bihoYWxmMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHooaGFsZjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0KGhhbGYyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydGUoaGFsZjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0cChoYWxmMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRuKGhhbGYyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHooaGFsZjIpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjMoaGFsZjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRlKGhhbGYzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0cChoYWxmMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydG4oaGFsZjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnR6KGhhbGYzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdChoYWxmMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRlKGhhbGYzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHAoaGFsZjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0bihoYWxmMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnR6KGhhbGYzKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0KGhhbGY0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0ZShoYWxmNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHAoaGFsZjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRuKGhhbGY0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0eihoYWxmNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXQoaGFsZjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0ZShoYWxmNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRwKGhhbGY0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydG4oaGFsZjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0eihoYWxmNCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOChoYWxmOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydGUoaGFsZjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRwKGhhbGY4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0bihoYWxmOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHooaGFsZjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0KGhhbGY4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydGUoaGFsZjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0cChoYWxmOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRuKGhhbGY4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHooaGFsZjgpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNihoYWxmMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydGUoaGFsZjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRwKGhhbGYxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0bihoYWxmMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHooaGFsZjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0KGhhbGYxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydGUoaGFsZjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0cChoYWxmMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRuKGhhbGYxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHooaGFsZjE2KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0KGhhbGYpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRlKGhhbGYpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRwKGhhbGYpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRuKGhhbGYpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnR6KGhhbGYpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0KGhhbGYpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0ZShoYWxmKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydHAoaGFsZik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRuKGhhbGYpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0eihoYWxmKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDIoaGFsZjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydGUoaGFsZjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHAoaGFsZjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydG4oaGFsZjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHooaGFsZjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXQoaGFsZjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRlKGhhbGYyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0cChoYWxmMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydG4oaGFsZjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnR6KGhhbGYyKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDMoaGFsZjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydGUoaGFsZjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHAoaGFsZjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydG4oaGFsZjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHooaGFsZjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXQoaGFsZjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRlKGhhbGYzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0cChoYWxmMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydG4oaGFsZjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnR6KGhhbGYzKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDQoaGFsZjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydGUoaGFsZjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHAoaGFsZjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydG4oaGFsZjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHooaGFsZjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXQoaGFsZjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRlKGhhbGY0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0cChoYWxmNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydG4oaGFsZjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnR6KGhhbGY0KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDgoaGFsZjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydGUoaGFsZjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHAoaGFsZjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydG4oaGFsZjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHooaGFsZjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXQoaGFsZjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRlKGhhbGY4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0cChoYWxmOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydG4oaGFsZjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnR6KGhhbGY4KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNihoYWxmMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0ZShoYWxmMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0cChoYWxmMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0bihoYWxmMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0eihoYWxmMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdChoYWxmMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydGUoaGFsZjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRwKGhhbGYxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0bihoYWxmMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHooaGFsZjE2KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQoaGFsZik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0ZShoYWxmKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRwKGhhbGYpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydG4oaGFsZik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0eihoYWxmKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0KGhhbGYpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRlKGhhbGYpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRwKGhhbGYpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRuKGhhbGYpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnR6KGhhbGYpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyKGhhbGYyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydGUoaGFsZjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0cChoYWxmMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRuKGhhbGYyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHooaGFsZjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdChoYWxmMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0ZShoYWxmMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0cChoYWxmMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0bihoYWxmMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0eihoYWxmMik7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDMoaGFsZjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0ZShoYWxmMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRwKGhhbGYzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydG4oaGFsZjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0eihoYWxmMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0KGhhbGYzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRlKGhhbGYzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRwKGhhbGYzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRuKGhhbGYzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnR6KGhhbGYzKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NChoYWxmNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRlKGhhbGY0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHAoaGFsZjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0bihoYWxmNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnR6KGhhbGY0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXQoaGFsZjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydGUoaGFsZjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHAoaGFsZjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydG4oaGFsZjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHooaGFsZjQpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4KGhhbGY4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydGUoaGFsZjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0cChoYWxmOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRuKGhhbGY4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHooaGFsZjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdChoYWxmOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0ZShoYWxmOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0cChoYWxmOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0bihoYWxmOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0eihoYWxmOCk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNihoYWxmMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRlKGhhbGYxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHAoaGFsZjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0bihoYWxmMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnR6KGhhbGYxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXQoaGFsZjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydGUoaGFsZjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHAoaGFsZjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydG4oaGFsZjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHooaGFsZjE2KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZyhoYWxmKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydGUoaGFsZik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRwKGhhbGYpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0bihoYWxmKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHooaGFsZik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0KGhhbGYpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydGUoaGFsZik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0cChoYWxmKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRuKGhhbGYpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHooaGFsZik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMihoYWxmMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydGUoaGFsZjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRwKGhhbGYyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0bihoYWxmMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHooaGFsZjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0KGhhbGYyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydGUoaGFsZjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0cChoYWxmMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRuKGhhbGYyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHooaGFsZjIpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzMoaGFsZjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRlKGhhbGYzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0cChoYWxmMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydG4oaGFsZjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnR6KGhhbGYzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdChoYWxmMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRlKGhhbGYzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHAoaGFsZjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0bihoYWxmMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnR6KGhhbGYzKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0KGhhbGY0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0ZShoYWxmNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHAoaGFsZjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRuKGhhbGY0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0eihoYWxmNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXQoaGFsZjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0ZShoYWxmNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRwKGhhbGY0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydG4oaGFsZjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0eihoYWxmNCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOChoYWxmOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydGUoaGFsZjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRwKGhhbGY4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0bihoYWxmOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHooaGFsZjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0KGhhbGY4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydGUoaGFsZjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0cChoYWxmOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRuKGhhbGY4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHooaGFsZjgpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNihoYWxmMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydGUoaGFsZjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRwKGhhbGYxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0bihoYWxmMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHooaGFsZjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0KGhhbGYxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydGUoaGFsZjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0cChoYWxmMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRuKGhhbGYxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHooaGFsZjE2KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIoaGFsZik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0ZShoYWxmKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRwKGhhbGYpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydG4oaGFsZik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0eihoYWxmKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0KGhhbGYpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRlKGhhbGYpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRwKGhhbGYpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRuKGhhbGYpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnR6KGhhbGYpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyKGhhbGYyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydGUoaGFsZjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0cChoYWxmMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRuKGhhbGYyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHooaGFsZjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdChoYWxmMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0ZShoYWxmMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0cChoYWxmMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0bihoYWxmMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0eihoYWxmMik7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjMoaGFsZjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0ZShoYWxmMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRwKGhhbGYzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydG4oaGFsZjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0eihoYWxmMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0KGhhbGYzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRlKGhhbGYzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRwKGhhbGYzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRuKGhhbGYzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnR6KGhhbGYzKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNChoYWxmNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRlKGhhbGY0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHAoaGFsZjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0bihoYWxmNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnR6KGhhbGY0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXQoaGFsZjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydGUoaGFsZjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHAoaGFsZjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydG4oaGFsZjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHooaGFsZjQpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4KGhhbGY4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydGUoaGFsZjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0cChoYWxmOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRuKGhhbGY4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHooaGFsZjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdChoYWxmOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0ZShoYWxmOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0cChoYWxmOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0bihoYWxmOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0eihoYWxmOCk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNihoYWxmMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRlKGhhbGYxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHAoaGFsZjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0bihoYWxmMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnR6KGhhbGYxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXQoaGFsZjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydGUoaGFsZjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHAoaGFsZjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydG4oaGFsZjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHooaGFsZjE2KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydChoYWxmKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydGUoaGFsZik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRwKGhhbGYpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0bihoYWxmKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHooaGFsZik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0KGhhbGYpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydGUoaGFsZik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0cChoYWxmKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRuKGhhbGYpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHooaGFsZik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MihoYWxmMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydGUoaGFsZjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRwKGhhbGYyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0bihoYWxmMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydHooaGFsZjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0KGhhbGYyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydGUoaGFsZjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0cChoYWxmMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRuKGhhbGYyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHooaGFsZjIpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDMoaGFsZjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRlKGhhbGYzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0cChoYWxmMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydG4oaGFsZjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnR6KGhhbGYzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdChoYWxmMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRlKGhhbGYzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHAoaGFsZjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0bihoYWxmMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnR6KGhhbGYzKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0KGhhbGY0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0ZShoYWxmNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHAoaGFsZjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRuKGhhbGY0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0eihoYWxmNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXQoaGFsZjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0ZShoYWxmNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRwKGhhbGY0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydG4oaGFsZjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0eihoYWxmNCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OChoYWxmOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydGUoaGFsZjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRwKGhhbGY4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0bihoYWxmOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydHooaGFsZjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0KGhhbGY4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydGUoaGFsZjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0cChoYWxmOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRuKGhhbGY4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHooaGFsZjgpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNihoYWxmMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydGUoaGFsZjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRwKGhhbGYxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0bihoYWxmMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHooaGFsZjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0KGhhbGYxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydGUoaGFsZjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0cChoYWxmMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRuKGhhbGYxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydHooaGFsZjE2KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50KGhhbGYpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRlKGhhbGYpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRwKGhhbGYpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRuKGhhbGYpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnR6KGhhbGYpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0KGhhbGYpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0ZShoYWxmKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHAoaGFsZik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRuKGhhbGYpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0eihoYWxmKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDIoaGFsZjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydGUoaGFsZjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHAoaGFsZjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydG4oaGFsZjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHooaGFsZjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXQoaGFsZjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRlKGhhbGYyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0cChoYWxmMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydG4oaGFsZjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnR6KGhhbGYyKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDMoaGFsZjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydGUoaGFsZjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHAoaGFsZjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydG4oaGFsZjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHooaGFsZjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXQoaGFsZjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRlKGhhbGYzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0cChoYWxmMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydG4oaGFsZjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnR6KGhhbGYzKTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDQoaGFsZjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydGUoaGFsZjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHAoaGFsZjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydG4oaGFsZjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHooaGFsZjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXQoaGFsZjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRlKGhhbGY0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0cChoYWxmNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydG4oaGFsZjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnR6KGhhbGY0KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDgoaGFsZjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydGUoaGFsZjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHAoaGFsZjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydG4oaGFsZjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHooaGFsZjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXQoaGFsZjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRlKGhhbGY4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0cChoYWxmOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydG4oaGFsZjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnR6KGhhbGY4KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNihoYWxmMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0ZShoYWxmMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0cChoYWxmMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0bihoYWxmMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0eihoYWxmMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdChoYWxmMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydGUoaGFsZjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRwKGhhbGYxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0bihoYWxmMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHooaGFsZjE2KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcoaGFsZik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0ZShoYWxmKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRwKGhhbGYpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydG4oaGFsZik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0eihoYWxmKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0KGhhbGYpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRlKGhhbGYpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRwKGhhbGYpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRuKGhhbGYpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnR6KGhhbGYpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyKGhhbGYyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydGUoaGFsZjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0cChoYWxmMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRuKGhhbGYyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHooaGFsZjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdChoYWxmMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0ZShoYWxmMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0cChoYWxmMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0bihoYWxmMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0eihoYWxmMik7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzMoaGFsZjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0ZShoYWxmMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRwKGhhbGYzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydG4oaGFsZjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0eihoYWxmMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0KGhhbGYzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRlKGhhbGYzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRwKGhhbGYzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRuKGhhbGYzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnR6KGhhbGYzKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNChoYWxmNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRlKGhhbGY0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHAoaGFsZjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0bihoYWxmNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnR6KGhhbGY0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXQoaGFsZjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydGUoaGFsZjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHAoaGFsZjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydG4oaGFsZjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHooaGFsZjQpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4KGhhbGY4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydGUoaGFsZjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0cChoYWxmOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRuKGhhbGY4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHooaGFsZjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdChoYWxmOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0ZShoYWxmOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0cChoYWxmOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0bihoYWxmOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0eihoYWxmOCk7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNihoYWxmMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRlKGhhbGYxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHAoaGFsZjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0bihoYWxmMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnR6KGhhbGYxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXQoaGFsZjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydGUoaGFsZjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHAoaGFsZjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydG4oaGFsZjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHooaGFsZjE2KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdChoYWxmKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydGUoaGFsZik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRwKGhhbGYpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0bihoYWxmKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHooaGFsZik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MihoYWxmMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydGUoaGFsZjIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRwKGhhbGYyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0bihoYWxmMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHooaGFsZjIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDMoaGFsZjMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRlKGhhbGYzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0cChoYWxmMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydG4oaGFsZjMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnR6KGhhbGYzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0KGhhbGY0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0ZShoYWxmNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHAoaGFsZjQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRuKGhhbGY0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0eihoYWxmNCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OChoYWxmOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydGUoaGFsZjgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRwKGhhbGY4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0bihoYWxmOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHooaGFsZjgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNihoYWxmMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydGUoaGFsZjE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRwKGhhbGYxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0bihoYWxmMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHooaGFsZjE2KTsKKworLy8gQ29udmVydCBub24tZG91YmxlIHR5cGVzIHRvIGhhbGYgdHlwZXMuCitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmKHVjaGFyKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYodXNob3J0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYodWludCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmKHVsb25nKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYoY2hhcik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmKHNob3J0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYoaW50KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYobG9uZyk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmKGZsb2F0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYoaGFsZik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0ZSh1Y2hhcik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0ZSh1c2hvcnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydGUodWludCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0ZSh1bG9uZyk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0ZShjaGFyKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRlKHNob3J0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRlKGludCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0ZShsb25nKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRlKGZsb2F0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRlKGhhbGYpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHAodWNoYXIpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHAodXNob3J0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRwKHVpbnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHAodWxvbmcpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHAoY2hhcik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0cChzaG9ydCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0cChpbnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHAobG9uZyk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0cChmbG9hdCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0cChoYWxmKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRuKHVjaGFyKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRuKHVzaG9ydCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0bih1aW50KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRuKHVsb25nKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRuKGNoYXIpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydG4oc2hvcnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydG4oaW50KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRuKGxvbmcpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydG4oZmxvYXQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydG4oaGFsZik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0eih1Y2hhcik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0eih1c2hvcnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHoodWludCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0eih1bG9uZyk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0eihjaGFyKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnR6KHNob3J0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnR6KGludCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0eihsb25nKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnR6KGZsb2F0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnR6KGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyKGNoYXIyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMih1Y2hhcjIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyKHNob3J0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjIodXNob3J0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjIoaW50Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjIodWludDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyKGxvbmcyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMih1bG9uZzIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyKGZsb2F0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjIoaGFsZjIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0ZShjaGFyMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRlKHVjaGFyMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRlKHNob3J0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRlKHVzaG9ydDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0ZShpbnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydGUodWludDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0ZShsb25nMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRlKHVsb25nMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRlKGZsb2F0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRlKGhhbGYyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHAoY2hhcjIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0cCh1Y2hhcjIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0cChzaG9ydDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0cCh1c2hvcnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHAoaW50Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRwKHVpbnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHAobG9uZzIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0cCh1bG9uZzIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0cChmbG9hdDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0cChoYWxmMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRuKGNoYXIyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydG4odWNoYXIyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydG4oc2hvcnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydG4odXNob3J0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRuKGludDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0bih1aW50Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRuKGxvbmcyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydG4odWxvbmcyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydG4oZmxvYXQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydG4oaGFsZjIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0eihjaGFyMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnR6KHVjaGFyMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnR6KHNob3J0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnR6KHVzaG9ydDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0eihpbnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHoodWludDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0eihsb25nMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnR6KHVsb25nMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnR6KGZsb2F0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnR6KGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMyhjaGFyMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjModWNoYXIzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMyhzaG9ydDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzKHVzaG9ydDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzKGludDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzKHVpbnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMyhsb25nMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjModWxvbmczKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMyhmbG9hdDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzKGhhbGYzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydGUoY2hhcjMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0ZSh1Y2hhcjMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0ZShzaG9ydDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0ZSh1c2hvcnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydGUoaW50Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRlKHVpbnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydGUobG9uZzMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0ZSh1bG9uZzMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0ZShmbG9hdDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0ZShoYWxmMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRwKGNoYXIzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHAodWNoYXIzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHAoc2hvcnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHAodXNob3J0Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRwKGludDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0cCh1aW50Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRwKGxvbmczKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHAodWxvbmczKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHAoZmxvYXQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHAoaGFsZjMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0bihjaGFyMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRuKHVjaGFyMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRuKHNob3J0Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRuKHVzaG9ydDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0bihpbnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydG4odWludDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0bihsb25nMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRuKHVsb25nMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRuKGZsb2F0Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRuKGhhbGYzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHooY2hhcjMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0eih1Y2hhcjMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0eihzaG9ydDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0eih1c2hvcnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHooaW50Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnR6KHVpbnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHoobG9uZzMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0eih1bG9uZzMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0eihmbG9hdDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0eihoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjQoY2hhcjQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0KHVjaGFyNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjQoc2hvcnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNCh1c2hvcnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNChpbnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNCh1aW50NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjQobG9uZzQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0KHVsb25nNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjQoZmxvYXQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNChoYWxmNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRlKGNoYXI0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydGUodWNoYXI0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydGUoc2hvcnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydGUodXNob3J0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRlKGludDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0ZSh1aW50NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRlKGxvbmc0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydGUodWxvbmc0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydGUoZmxvYXQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydGUoaGFsZjQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0cChjaGFyNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRwKHVjaGFyNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRwKHNob3J0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRwKHVzaG9ydDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0cChpbnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHAodWludDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0cChsb25nNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRwKHVsb25nNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRwKGZsb2F0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRwKGhhbGY0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydG4oY2hhcjQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0bih1Y2hhcjQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0bihzaG9ydDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0bih1c2hvcnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydG4oaW50NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRuKHVpbnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydG4obG9uZzQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0bih1bG9uZzQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0bihmbG9hdDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0bihoYWxmNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnR6KGNoYXI0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHoodWNoYXI0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHooc2hvcnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHoodXNob3J0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnR6KGludDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0eih1aW50NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnR6KGxvbmc0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHoodWxvbmc0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHooZmxvYXQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHooaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4KGNoYXI4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOCh1Y2hhcjgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4KHNob3J0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjgodXNob3J0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjgoaW50OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjgodWludDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4KGxvbmc4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOCh1bG9uZzgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4KGZsb2F0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjgoaGFsZjgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0ZShjaGFyOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRlKHVjaGFyOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRlKHNob3J0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRlKHVzaG9ydDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0ZShpbnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydGUodWludDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0ZShsb25nOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRlKHVsb25nOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRlKGZsb2F0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRlKGhhbGY4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHAoY2hhcjgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0cCh1Y2hhcjgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0cChzaG9ydDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0cCh1c2hvcnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHAoaW50OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRwKHVpbnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHAobG9uZzgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0cCh1bG9uZzgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0cChmbG9hdDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0cChoYWxmOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRuKGNoYXI4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydG4odWNoYXI4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydG4oc2hvcnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydG4odXNob3J0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRuKGludDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0bih1aW50OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRuKGxvbmc4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydG4odWxvbmc4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydG4oZmxvYXQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydG4oaGFsZjgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0eihjaGFyOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnR6KHVjaGFyOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnR6KHNob3J0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnR6KHVzaG9ydDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0eihpbnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHoodWludDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0eihsb25nOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnR6KHVsb25nOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnR6KGZsb2F0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnR6KGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2KGNoYXIxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNih1Y2hhcjE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2KHNob3J0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTYodXNob3J0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTYoaW50MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTYodWludDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2KGxvbmcxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNih1bG9uZzE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2KGZsb2F0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTYoaGFsZjE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0ZShjaGFyMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRlKHVjaGFyMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRlKHNob3J0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRlKHVzaG9ydDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0ZShpbnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydGUodWludDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0ZShsb25nMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRlKHVsb25nMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRlKGZsb2F0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRlKGhhbGYxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHAoY2hhcjE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0cCh1Y2hhcjE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0cChzaG9ydDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0cCh1c2hvcnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHAoaW50MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRwKHVpbnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHAobG9uZzE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0cCh1bG9uZzE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0cChmbG9hdDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0cChoYWxmMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRuKGNoYXIxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydG4odWNoYXIxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydG4oc2hvcnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydG4odXNob3J0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRuKGludDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0bih1aW50MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRuKGxvbmcxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydG4odWxvbmcxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydG4oZmxvYXQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydG4oaGFsZjE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0eihjaGFyMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnR6KHVjaGFyMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnR6KHNob3J0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnR6KHVzaG9ydDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0eihpbnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHoodWludDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0eihsb25nMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnR6KHVsb25nMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnR6KGZsb2F0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnR6KGhhbGYxNik7CisKKy8vIENvbnZlcnQgaGFsZiB0eXBlcyB0byBkb3VibGUgdHlwZXMuCisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlKGhhbGYpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRlKGhhbGYpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRwKGhhbGYpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRuKGhhbGYpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnR6KGhhbGYpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMihoYWxmMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0ZShoYWxmMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0cChoYWxmMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0bihoYWxmMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0eihoYWxmMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzKGhhbGYzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRlKGhhbGYzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRwKGhhbGYzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRuKGhhbGYzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnR6KGhhbGYzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTQoaGFsZjQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydGUoaGFsZjQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHAoaGFsZjQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydG4oaGFsZjQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHooaGFsZjQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOChoYWxmOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0ZShoYWxmOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0cChoYWxmOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0bihoYWxmOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0eihoYWxmOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTYoaGFsZjE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydGUoaGFsZjE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHAoaGFsZjE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydG4oaGFsZjE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHooaGFsZjE2KTsKKworLy8gQ29udmVydCBkb3VibGUgdHlwZXMgdG8gaGFsZiB0eXBlcy4KK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYoZG91YmxlKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRlKGRvdWJsZSk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0cChkb3VibGUpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydG4oZG91YmxlKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnR6KGRvdWJsZSk7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjIoZG91YmxlMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRlKGRvdWJsZTIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0cChkb3VibGUyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydG4oZG91YmxlMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnR6KGRvdWJsZTIpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzKGRvdWJsZTMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0ZShkb3VibGUzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHAoZG91YmxlMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRuKGRvdWJsZTMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0eihkb3VibGUzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNChkb3VibGU0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydGUoZG91YmxlNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRwKGRvdWJsZTQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0bihkb3VibGU0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHooZG91YmxlNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjgoZG91YmxlOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRlKGRvdWJsZTgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0cChkb3VibGU4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydG4oZG91YmxlOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnR6KGRvdWJsZTgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTYoZG91YmxlMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRlKGRvdWJsZTE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0cChkb3VibGUxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydG4oZG91YmxlMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnR6KGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKyNlbmRpZiAvLyBjbF9raHJfZnAxNgorCisvKioKKyAqIE9wZW5DTCB2MS4xLzEuMi8yLjAgczYuMi40LjIgLSBhc190eXBlIG9wZXJhdG9ycworICogUmVpbnRlcnByZXRzIGEgZGF0YSB0eXBlIGFzIGFub3RoZXIgZGF0YSB0eXBlIG9mIHRoZSBzYW1lIHNpemUKKyAqLworY2hhciBfX292bGQgX19jbmZuIGFzX2NoYXIoY2hhcik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gYXNfY2hhcih1Y2hhcik7CisKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjIoY2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBhc19jaGFyMih1Y2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBhc19jaGFyMihzaG9ydCk7CitjaGFyMiBfX292bGQgX19jbmZuIGFzX2NoYXIyKHVzaG9ydCk7CisKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjMoY2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBhc19jaGFyMyhjaGFyNCk7CitjaGFyMyBfX292bGQgX19jbmZuIGFzX2NoYXIzKHVjaGFyMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGFzX2NoYXIzKHVjaGFyNCk7CitjaGFyMyBfX292bGQgX19jbmZuIGFzX2NoYXIzKHNob3J0Mik7CitjaGFyMyBfX292bGQgX19jbmZuIGFzX2NoYXIzKHVzaG9ydDIpOworY2hhcjMgX19vdmxkIF9fY25mbiBhc19jaGFyMyhpbnQpOworY2hhcjMgX19vdmxkIF9fY25mbiBhc19jaGFyMyh1aW50KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjMoZmxvYXQpOworCitjaGFyNCBfX292bGQgX19jbmZuIGFzX2NoYXI0KGNoYXIzKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjQoY2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBhc19jaGFyNCh1Y2hhcjMpOworY2hhcjQgX19vdmxkIF9fY25mbiBhc19jaGFyNCh1Y2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBhc19jaGFyNChzaG9ydDIpOworY2hhcjQgX19vdmxkIF9fY25mbiBhc19jaGFyNCh1c2hvcnQyKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjQoaW50KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjQodWludCk7CitjaGFyNCBfX292bGQgX19jbmZuIGFzX2NoYXI0KGZsb2F0KTsKKworY2hhcjggX19vdmxkIF9fY25mbiBhc19jaGFyOChjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGFzX2NoYXI4KHVjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGFzX2NoYXI4KHNob3J0Myk7CitjaGFyOCBfX292bGQgX19jbmZuIGFzX2NoYXI4KHNob3J0NCk7CitjaGFyOCBfX292bGQgX19jbmZuIGFzX2NoYXI4KHVzaG9ydDMpOworY2hhcjggX19vdmxkIF9fY25mbiBhc19jaGFyOCh1c2hvcnQ0KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjgoaW50Mik7CitjaGFyOCBfX292bGQgX19jbmZuIGFzX2NoYXI4KHVpbnQyKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjgobG9uZyk7CitjaGFyOCBfX292bGQgX19jbmZuIGFzX2NoYXI4KHVsb25nKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjgoZmxvYXQyKTsKKworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjE2KGNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBhc19jaGFyMTYodWNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBhc19jaGFyMTYoc2hvcnQ4KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGFzX2NoYXIxNih1c2hvcnQ4KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGFzX2NoYXIxNihpbnQzKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGFzX2NoYXIxNihpbnQ0KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGFzX2NoYXIxNih1aW50Myk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBhc19jaGFyMTYodWludDQpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjE2KGxvbmcyKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGFzX2NoYXIxNih1bG9uZzIpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjE2KGZsb2F0Myk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBhc19jaGFyMTYoZmxvYXQ0KTsKKwordWNoYXIgX19vdmxkIF9fY25mbiBhc191Y2hhcihjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIodWNoYXIpOworCit1Y2hhcjIgX19vdmxkIF9fY25mbiBhc191Y2hhcjIoY2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIyKHVjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBhc191Y2hhcjIoc2hvcnQpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIyKHVzaG9ydCk7CisKK3VjaGFyMyBfX292bGQgX19jbmZuIGFzX3VjaGFyMyhjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBhc191Y2hhcjMoY2hhcjQpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIzKHVjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBhc191Y2hhcjModWNoYXI0KTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGFzX3VjaGFyMyhzaG9ydDIpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIzKHVzaG9ydDIpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIzKGludCk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBhc191Y2hhcjModWludCk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBhc191Y2hhcjMoZmxvYXQpOworCit1Y2hhcjQgX19vdmxkIF9fY25mbiBhc191Y2hhcjQoY2hhcjMpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI0KGNoYXI0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFzX3VjaGFyNCh1Y2hhcjMpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI0KHVjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBhc191Y2hhcjQoc2hvcnQyKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFzX3VjaGFyNCh1c2hvcnQyKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFzX3VjaGFyNChpbnQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI0KHVpbnQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI0KGZsb2F0KTsKKwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI4KGNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFzX3VjaGFyOCh1Y2hhcjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI4KHNob3J0Myk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhc191Y2hhcjgoc2hvcnQ0KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFzX3VjaGFyOCh1c2hvcnQzKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFzX3VjaGFyOCh1c2hvcnQ0KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFzX3VjaGFyOChpbnQyKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFzX3VjaGFyOCh1aW50Mik7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhc191Y2hhcjgobG9uZyk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhc191Y2hhcjgodWxvbmcpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI4KGZsb2F0Mik7CisKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBhc191Y2hhcjE2KGNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNih1Y2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBhc191Y2hhcjE2KHNob3J0OCk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNih1c2hvcnQ4KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBhc191Y2hhcjE2KGludDMpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFzX3VjaGFyMTYoaW50NCk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNih1aW50Myk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNih1aW50NCk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNihsb25nMik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNih1bG9uZzIpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFzX3VjaGFyMTYoZmxvYXQzKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBhc191Y2hhcjE2KGZsb2F0NCk7CisKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQoY2hhcjIpOworc2hvcnQgX19vdmxkIF9fY25mbiBhc19zaG9ydCh1Y2hhcjIpOworc2hvcnQgX19vdmxkIF9fY25mbiBhc19zaG9ydChzaG9ydCk7CitzaG9ydCBfX292bGQgX19jbmZuIGFzX3Nob3J0KHVzaG9ydCk7CisKK3Nob3J0MiBfX292bGQgX19jbmZuIGFzX3Nob3J0MihjaGFyMyk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBhc19zaG9ydDIoY2hhcjQpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQyKHVjaGFyMyk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBhc19zaG9ydDIodWNoYXI0KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGFzX3Nob3J0MihzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQyKHVzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQyKGludCk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBhc19zaG9ydDIodWludCk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBhc19zaG9ydDIoZmxvYXQpOworCitzaG9ydDMgX19vdmxkIF9fY25mbiBhc19zaG9ydDMoY2hhcjgpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQzKHVjaGFyOCk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBhc19zaG9ydDMoc2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGFzX3Nob3J0MyhzaG9ydDQpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQzKHVzaG9ydDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQzKHVzaG9ydDQpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQzKGludDIpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQzKHVpbnQyKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGFzX3Nob3J0Myhsb25nKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGFzX3Nob3J0Myh1bG9uZyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBhc19zaG9ydDMoZmxvYXQyKTsKKworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ0KGNoYXI4KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGFzX3Nob3J0NCh1Y2hhcjgpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ0KHNob3J0Myk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBhc19zaG9ydDQoc2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGFzX3Nob3J0NCh1c2hvcnQzKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGFzX3Nob3J0NCh1c2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGFzX3Nob3J0NChpbnQyKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGFzX3Nob3J0NCh1aW50Mik7CitzaG9ydDQgX19vdmxkIF9fY25mbiBhc19zaG9ydDQobG9uZyk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBhc19zaG9ydDQodWxvbmcpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ0KGZsb2F0Mik7CisKK3Nob3J0OCBfX292bGQgX19jbmZuIGFzX3Nob3J0OChjaGFyMTYpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ4KHVjaGFyMTYpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ4KHNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBhc19zaG9ydDgodXNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBhc19zaG9ydDgoaW50Myk7CitzaG9ydDggX19vdmxkIF9fY25mbiBhc19zaG9ydDgoaW50NCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBhc19zaG9ydDgodWludDMpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ4KHVpbnQ0KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGFzX3Nob3J0OChsb25nMik7CitzaG9ydDggX19vdmxkIF9fY25mbiBhc19zaG9ydDgodWxvbmcyKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGFzX3Nob3J0OChmbG9hdDMpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ4KGZsb2F0NCk7CisKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBhc19zaG9ydDE2KHNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3Nob3J0MTYodXNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3Nob3J0MTYoaW50OCk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQxNih1aW50OCk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQxNihsb25nMyk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQxNihsb25nNCk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQxNih1bG9uZzMpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3Nob3J0MTYodWxvbmc0KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBhc19zaG9ydDE2KGZsb2F0OCk7CisKK3VzaG9ydCBfX292bGQgX19jbmZuIGFzX3VzaG9ydChjaGFyMik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBhc191c2hvcnQodWNoYXIyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGFzX3VzaG9ydChzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBhc191c2hvcnQodXNob3J0KTsKKwordXNob3J0MiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDIoY2hhcjMpOwordXNob3J0MiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDIoY2hhcjQpOwordXNob3J0MiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDIodWNoYXIzKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBhc191c2hvcnQyKHVjaGFyNCk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MihzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDIodXNob3J0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MihpbnQpOwordXNob3J0MiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDIodWludCk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MihmbG9hdCk7CisKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKGNoYXI4KTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKHVjaGFyOCk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MyhzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGFzX3VzaG9ydDMoc2hvcnQ0KTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKHVzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGFzX3VzaG9ydDModXNob3J0NCk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MyhpbnQyKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKHVpbnQyKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKGxvbmcpOwordXNob3J0MyBfX292bGQgX19jbmZuIGFzX3VzaG9ydDModWxvbmcpOwordXNob3J0MyBfX292bGQgX19jbmZuIGFzX3VzaG9ydDMoZmxvYXQyKTsKKwordXNob3J0NCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDQoY2hhcjgpOwordXNob3J0NCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDQodWNoYXI4KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhc191c2hvcnQ0KHNob3J0Myk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0NChzaG9ydDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDQodXNob3J0Myk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0NCh1c2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhc191c2hvcnQ0KGludDIpOwordXNob3J0NCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDQodWludDIpOwordXNob3J0NCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDQobG9uZyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0NCh1bG9uZyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0NChmbG9hdDIpOworCit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0OChjaGFyMTYpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDgodWNoYXIxNik7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0OChzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDgodXNob3J0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0OChpbnQzKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhc191c2hvcnQ4KGludDQpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDgodWludDMpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDgodWludDQpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDgobG9uZzIpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDgodWxvbmcyKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhc191c2hvcnQ4KGZsb2F0Myk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0OChmbG9hdDQpOworCit1c2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDE2KHNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhc191c2hvcnQxNih1c2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDE2KGludDgpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhc191c2hvcnQxNih1aW50OCk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDE2KGxvbmczKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MTYobG9uZzQpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhc191c2hvcnQxNih1bG9uZzMpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhc191c2hvcnQxNih1bG9uZzQpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhc191c2hvcnQxNihmbG9hdDgpOworCitpbnQgX19vdmxkIF9fY25mbiBhc19pbnQoY2hhcjMpOworaW50IF9fb3ZsZCBfX2NuZm4gYXNfaW50KGNoYXI0KTsKK2ludCBfX292bGQgX19jbmZuIGFzX2ludCh1Y2hhcjMpOworaW50IF9fb3ZsZCBfX2NuZm4gYXNfaW50KHVjaGFyNCk7CitpbnQgX19vdmxkIF9fY25mbiBhc19pbnQoc2hvcnQyKTsKK2ludCBfX292bGQgX19jbmZuIGFzX2ludCh1c2hvcnQyKTsKK2ludCBfX292bGQgX19jbmZuIGFzX2ludChpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gYXNfaW50KHVpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gYXNfaW50KGZsb2F0KTsKKworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIoY2hhcjgpOworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIodWNoYXI4KTsKK2ludDIgX19vdmxkIF9fY25mbiBhc19pbnQyKHNob3J0Myk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfaW50MihzaG9ydDQpOworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIodXNob3J0Myk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfaW50Mih1c2hvcnQ0KTsKK2ludDIgX19vdmxkIF9fY25mbiBhc19pbnQyKGludDIpOworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIodWludDIpOworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIobG9uZyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfaW50Mih1bG9uZyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfaW50MihmbG9hdDIpOworCitpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfaW50MyhjaGFyMTYpOworaW50MyBfX292bGQgX19jbmZuIGFzX2ludDModWNoYXIxNik7CitpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfaW50MyhzaG9ydDgpOworaW50MyBfX292bGQgX19jbmZuIGFzX2ludDModXNob3J0OCk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfaW50MyhpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBhc19pbnQzKGludDQpOworaW50MyBfX292bGQgX19jbmZuIGFzX2ludDModWludDMpOworaW50MyBfX292bGQgX19jbmZuIGFzX2ludDModWludDQpOworaW50MyBfX292bGQgX19jbmZuIGFzX2ludDMobG9uZzIpOworaW50MyBfX292bGQgX19jbmZuIGFzX2ludDModWxvbmcyKTsKK2ludDMgX19vdmxkIF9fY25mbiBhc19pbnQzKGZsb2F0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfaW50MyhmbG9hdDQpOworCitpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfaW50NChjaGFyMTYpOworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQodWNoYXIxNik7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfaW50NChzaG9ydDgpOworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQodXNob3J0OCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfaW50NChpbnQzKTsKK2ludDQgX19vdmxkIF9fY25mbiBhc19pbnQ0KGludDQpOworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQodWludDMpOworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQodWludDQpOworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQobG9uZzIpOworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQodWxvbmcyKTsKK2ludDQgX19vdmxkIF9fY25mbiBhc19pbnQ0KGZsb2F0Myk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfaW50NChmbG9hdDQpOworCitpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfaW50OChzaG9ydDE2KTsKK2ludDggX19vdmxkIF9fY25mbiBhc19pbnQ4KHVzaG9ydDE2KTsKK2ludDggX19vdmxkIF9fY25mbiBhc19pbnQ4KGludDgpOworaW50OCBfX292bGQgX19jbmZuIGFzX2ludDgodWludDgpOworaW50OCBfX292bGQgX19jbmZuIGFzX2ludDgobG9uZzMpOworaW50OCBfX292bGQgX19jbmZuIGFzX2ludDgobG9uZzQpOworaW50OCBfX292bGQgX19jbmZuIGFzX2ludDgodWxvbmczKTsKK2ludDggX19vdmxkIF9fY25mbiBhc19pbnQ4KHVsb25nNCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfaW50OChmbG9hdDgpOworCitpbnQxNiBfX292bGQgX19jbmZuIGFzX2ludDE2KGludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gYXNfaW50MTYodWludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gYXNfaW50MTYobG9uZzgpOworaW50MTYgX19vdmxkIF9fY25mbiBhc19pbnQxNih1bG9uZzgpOworaW50MTYgX19vdmxkIF9fY25mbiBhc19pbnQxNihmbG9hdDE2KTsKKwordWludCBfX292bGQgX19jbmZuIGFzX3VpbnQoY2hhcjMpOwordWludCBfX292bGQgX19jbmZuIGFzX3VpbnQoY2hhcjQpOwordWludCBfX292bGQgX19jbmZuIGFzX3VpbnQodWNoYXIzKTsKK3VpbnQgX19vdmxkIF9fY25mbiBhc191aW50KHVjaGFyNCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gYXNfdWludChzaG9ydDIpOwordWludCBfX292bGQgX19jbmZuIGFzX3VpbnQodXNob3J0Mik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gYXNfdWludChpbnQpOwordWludCBfX292bGQgX19jbmZuIGFzX3VpbnQodWludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gYXNfdWludChmbG9hdCk7CisKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfdWludDIoY2hhcjgpOwordWludDIgX19vdmxkIF9fY25mbiBhc191aW50Mih1Y2hhcjgpOwordWludDIgX19vdmxkIF9fY25mbiBhc191aW50MihzaG9ydDMpOwordWludDIgX19vdmxkIF9fY25mbiBhc191aW50MihzaG9ydDQpOwordWludDIgX19vdmxkIF9fY25mbiBhc191aW50Mih1c2hvcnQzKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfdWludDIodXNob3J0NCk7Cit1aW50MiBfX292bGQgX19jbmZuIGFzX3VpbnQyKGludDIpOwordWludDIgX19vdmxkIF9fY25mbiBhc191aW50Mih1aW50Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGFzX3VpbnQyKGxvbmcpOwordWludDIgX19vdmxkIF9fY25mbiBhc191aW50Mih1bG9uZyk7Cit1aW50MiBfX292bGQgX19jbmZuIGFzX3VpbnQyKGZsb2F0Mik7CisKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfdWludDMoY2hhcjE2KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfdWludDModWNoYXIxNik7Cit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKHNob3J0OCk7Cit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKHVzaG9ydDgpOwordWludDMgX19vdmxkIF9fY25mbiBhc191aW50MyhpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfdWludDMoaW50NCk7Cit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKHVpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfdWludDModWludDQpOwordWludDMgX19vdmxkIF9fY25mbiBhc191aW50Myhsb25nMik7Cit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKHVsb25nMik7Cit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKGZsb2F0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKGZsb2F0NCk7CisKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdWludDQoY2hhcjE2KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdWludDQodWNoYXIxNik7Cit1aW50NCBfX292bGQgX19jbmZuIGFzX3VpbnQ0KHNob3J0OCk7Cit1aW50NCBfX292bGQgX19jbmZuIGFzX3VpbnQ0KHVzaG9ydDgpOwordWludDQgX19vdmxkIF9fY25mbiBhc191aW50NChpbnQzKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdWludDQoaW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGFzX3VpbnQ0KHVpbnQzKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdWludDQodWludDQpOwordWludDQgX19vdmxkIF9fY25mbiBhc191aW50NChsb25nMik7Cit1aW50NCBfX292bGQgX19jbmZuIGFzX3VpbnQ0KHVsb25nMik7Cit1aW50NCBfX292bGQgX19jbmZuIGFzX3VpbnQ0KGZsb2F0Myk7Cit1aW50NCBfX292bGQgX19jbmZuIGFzX3VpbnQ0KGZsb2F0NCk7CisKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdWludDgoc2hvcnQxNik7Cit1aW50OCBfX292bGQgX19jbmZuIGFzX3VpbnQ4KHVzaG9ydDE2KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdWludDgoaW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGFzX3VpbnQ4KHVpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdWludDgobG9uZzMpOwordWludDggX19vdmxkIF9fY25mbiBhc191aW50OChsb25nNCk7Cit1aW50OCBfX292bGQgX19jbmZuIGFzX3VpbnQ4KHVsb25nMyk7Cit1aW50OCBfX292bGQgX19jbmZuIGFzX3VpbnQ4KHVsb25nNCk7Cit1aW50OCBfX292bGQgX19jbmZuIGFzX3VpbnQ4KGZsb2F0OCk7CisKK3VpbnQxNiBfX292bGQgX19jbmZuIGFzX3VpbnQxNihpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBhc191aW50MTYodWludDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGFzX3VpbnQxNihsb25nOCk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBhc191aW50MTYodWxvbmc4KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGFzX3VpbnQxNihmbG9hdDE2KTsKKworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcoY2hhcjgpOworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcodWNoYXI4KTsKK2xvbmcgX19vdmxkIF9fY25mbiBhc19sb25nKHNob3J0Myk7Citsb25nIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZyhzaG9ydDQpOworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcodXNob3J0Myk7Citsb25nIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZyh1c2hvcnQ0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBhc19sb25nKGludDIpOworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcodWludDIpOworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcobG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZyh1bG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZyhmbG9hdDIpOworCitsb25nMiBfX292bGQgX19jbmZuIGFzX2xvbmcyKGNoYXIxNik7Citsb25nMiBfX292bGQgX19jbmZuIGFzX2xvbmcyKHVjaGFyMTYpOworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMihzaG9ydDgpOworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMih1c2hvcnQ4KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzIoaW50Myk7Citsb25nMiBfX292bGQgX19jbmZuIGFzX2xvbmcyKGludDQpOworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMih1aW50Myk7Citsb25nMiBfX292bGQgX19jbmZuIGFzX2xvbmcyKHVpbnQ0KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzIobG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMih1bG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMihmbG9hdDMpOworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMihmbG9hdDQpOworCitsb25nMyBfX292bGQgX19jbmZuIGFzX2xvbmczKHNob3J0MTYpOworbG9uZzMgX19vdmxkIF9fY25mbiBhc19sb25nMyh1c2hvcnQxNik7Citsb25nMyBfX292bGQgX19jbmZuIGFzX2xvbmczKGludDgpOworbG9uZzMgX19vdmxkIF9fY25mbiBhc19sb25nMyh1aW50OCk7Citsb25nMyBfX292bGQgX19jbmZuIGFzX2xvbmczKGxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzMobG9uZzQpOworbG9uZzMgX19vdmxkIF9fY25mbiBhc19sb25nMyh1bG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBhc19sb25nMyh1bG9uZzQpOworbG9uZzMgX19vdmxkIF9fY25mbiBhc19sb25nMyhmbG9hdDgpOworCitsb25nNCBfX292bGQgX19jbmZuIGFzX2xvbmc0KHNob3J0MTYpOworbG9uZzQgX19vdmxkIF9fY25mbiBhc19sb25nNCh1c2hvcnQxNik7Citsb25nNCBfX292bGQgX19jbmZuIGFzX2xvbmc0KGludDgpOworbG9uZzQgX19vdmxkIF9fY25mbiBhc19sb25nNCh1aW50OCk7Citsb25nNCBfX292bGQgX19jbmZuIGFzX2xvbmc0KGxvbmczKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzQobG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBhc19sb25nNCh1bG9uZzMpOworbG9uZzQgX19vdmxkIF9fY25mbiBhc19sb25nNCh1bG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBhc19sb25nNChmbG9hdDgpOworCitsb25nOCBfX292bGQgX19jbmZuIGFzX2xvbmc4KGludDE2KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzgodWludDE2KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzgobG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBhc19sb25nOCh1bG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBhc19sb25nOChmbG9hdDE2KTsKKworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzE2KGxvbmcxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBhc19sb25nMTYodWxvbmcxNik7CisKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcoY2hhcjgpOwordWxvbmcgX19vdmxkIF9fY25mbiBhc191bG9uZyh1Y2hhcjgpOwordWxvbmcgX19vdmxkIF9fY25mbiBhc191bG9uZyhzaG9ydDMpOwordWxvbmcgX19vdmxkIF9fY25mbiBhc191bG9uZyhzaG9ydDQpOwordWxvbmcgX19vdmxkIF9fY25mbiBhc191bG9uZyh1c2hvcnQzKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcodXNob3J0NCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGFzX3Vsb25nKGludDIpOwordWxvbmcgX19vdmxkIF9fY25mbiBhc191bG9uZyh1aW50Mik7Cit1bG9uZyBfX292bGQgX19jbmZuIGFzX3Vsb25nKGxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBhc191bG9uZyh1bG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGFzX3Vsb25nKGZsb2F0Mik7CisKK3Vsb25nMiBfX292bGQgX19jbmZuIGFzX3Vsb25nMihjaGFyMTYpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcyKHVjaGFyMTYpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcyKHNob3J0OCk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhc191bG9uZzIodXNob3J0OCk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhc191bG9uZzIoaW50Myk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhc191bG9uZzIoaW50NCk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhc191bG9uZzIodWludDMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcyKHVpbnQ0KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGFzX3Vsb25nMihsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhc191bG9uZzIodWxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGFzX3Vsb25nMihmbG9hdDMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcyKGZsb2F0NCk7CisKK3Vsb25nMyBfX292bGQgX19jbmZuIGFzX3Vsb25nMyhzaG9ydDE2KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFzX3Vsb25nMyh1c2hvcnQxNik7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBhc191bG9uZzMoaW50OCk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBhc191bG9uZzModWludDgpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmczKGxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFzX3Vsb25nMyhsb25nNCk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBhc191bG9uZzModWxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFzX3Vsb25nMyh1bG9uZzQpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmczKGZsb2F0OCk7CisKK3Vsb25nNCBfX292bGQgX19jbmZuIGFzX3Vsb25nNChzaG9ydDE2KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFzX3Vsb25nNCh1c2hvcnQxNik7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhc191bG9uZzQoaW50OCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhc191bG9uZzQodWludDgpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmc0KGxvbmczKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFzX3Vsb25nNChsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhc191bG9uZzQodWxvbmczKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFzX3Vsb25nNCh1bG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmc0KGZsb2F0OCk7CisKK3Vsb25nOCBfX292bGQgX19jbmZuIGFzX3Vsb25nOChpbnQxNik7Cit1bG9uZzggX19vdmxkIF9fY25mbiBhc191bG9uZzgodWludDE2KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGFzX3Vsb25nOChsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBhc191bG9uZzgodWxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGFzX3Vsb25nOChmbG9hdDE2KTsKKwordWxvbmcxNiBfX292bGQgX19jbmZuIGFzX3Vsb25nMTYobG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBhc191bG9uZzE2KHVsb25nMTYpOworCitmbG9hdCBfX292bGQgX19jbmZuIGFzX2Zsb2F0KGNoYXIzKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQoY2hhcjQpOworZmxvYXQgX19vdmxkIF9fY25mbiBhc19mbG9hdCh1Y2hhcjMpOworZmxvYXQgX19vdmxkIF9fY25mbiBhc19mbG9hdCh1Y2hhcjQpOworZmxvYXQgX19vdmxkIF9fY25mbiBhc19mbG9hdChzaG9ydDIpOworZmxvYXQgX19vdmxkIF9fY25mbiBhc19mbG9hdCh1c2hvcnQyKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQoaW50KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQodWludCk7CitmbG9hdCBfX292bGQgX19jbmZuIGFzX2Zsb2F0KGZsb2F0KTsKKworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQyKGNoYXI4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFzX2Zsb2F0Mih1Y2hhcjgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQyKHNob3J0Myk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc19mbG9hdDIoc2hvcnQ0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFzX2Zsb2F0Mih1c2hvcnQzKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFzX2Zsb2F0Mih1c2hvcnQ0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFzX2Zsb2F0MihpbnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFzX2Zsb2F0Mih1aW50Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc19mbG9hdDIobG9uZyk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc19mbG9hdDIodWxvbmcpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQyKGZsb2F0Mik7CisKK2Zsb2F0MyBfX292bGQgX19jbmZuIGFzX2Zsb2F0MyhjaGFyMTYpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQzKHVjaGFyMTYpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQzKHNob3J0OCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhc19mbG9hdDModXNob3J0OCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhc19mbG9hdDMoaW50Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhc19mbG9hdDMoaW50NCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhc19mbG9hdDModWludDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQzKHVpbnQ0KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGFzX2Zsb2F0Myhsb25nMik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhc19mbG9hdDModWxvbmcyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGFzX2Zsb2F0MyhmbG9hdDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQzKGZsb2F0NCk7CisKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFzX2Zsb2F0NChjaGFyMTYpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ0KHVjaGFyMTYpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ0KHNob3J0OCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhc19mbG9hdDQodXNob3J0OCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhc19mbG9hdDQoaW50Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhc19mbG9hdDQoaW50NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhc19mbG9hdDQodWludDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ0KHVpbnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFzX2Zsb2F0NChsb25nMik7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhc19mbG9hdDQodWxvbmcyKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFzX2Zsb2F0NChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ0KGZsb2F0NCk7CisKK2Zsb2F0OCBfX292bGQgX19jbmZuIGFzX2Zsb2F0OChzaG9ydDE2KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGFzX2Zsb2F0OCh1c2hvcnQxNik7CitmbG9hdDggX19vdmxkIF9fY25mbiBhc19mbG9hdDgoaW50OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhc19mbG9hdDgodWludDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ4KGxvbmczKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGFzX2Zsb2F0OChsb25nNCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhc19mbG9hdDgodWxvbmczKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGFzX2Zsb2F0OCh1bG9uZzQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ4KGZsb2F0OCk7CisKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBhc19mbG9hdDE2KGludDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBhc19mbG9hdDE2KHVpbnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQxNihsb25nOCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQxNih1bG9uZzgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGFzX2Zsb2F0MTYoZmxvYXQxNik7CisKKyNpZmRlZiBjbF9raHJfZnA2NAorY2hhcjggX19vdmxkIF9fY25mbiBhc19jaGFyOChkb3VibGUpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjE2KGRvdWJsZTIpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI4KGRvdWJsZSk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNihkb3VibGUyKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGFzX3Nob3J0Myhkb3VibGUpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ0KGRvdWJsZSk7CitzaG9ydDggX19vdmxkIF9fY25mbiBhc19zaG9ydDgoZG91YmxlMik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQxNihkb3VibGUzKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBhc19zaG9ydDE2KGRvdWJsZTQpOwordXNob3J0MyBfX292bGQgX19jbmZuIGFzX3VzaG9ydDMoZG91YmxlKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhc191c2hvcnQ0KGRvdWJsZSk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0OChkb3VibGUyKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MTYoZG91YmxlMyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDE2KGRvdWJsZTQpOworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIoZG91YmxlKTsKK2ludDMgX19vdmxkIF9fY25mbiBhc19pbnQzKGRvdWJsZTIpOworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQoZG91YmxlMik7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfaW50OChkb3VibGUzKTsKK2ludDggX19vdmxkIF9fY25mbiBhc19pbnQ4KGRvdWJsZTQpOworaW50MTYgX19vdmxkIF9fY25mbiBhc19pbnQxNihkb3VibGU4KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfdWludDIoZG91YmxlKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfdWludDMoZG91YmxlMik7Cit1aW50NCBfX292bGQgX19jbmZuIGFzX3VpbnQ0KGRvdWJsZTIpOwordWludDggX19vdmxkIF9fY25mbiBhc191aW50OChkb3VibGUzKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdWludDgoZG91YmxlNCk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBhc191aW50MTYoZG91YmxlOCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZyhkb3VibGUpOworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMihkb3VibGUyKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzMoZG91YmxlMyk7Citsb25nMyBfX292bGQgX19jbmZuIGFzX2xvbmczKGRvdWJsZTQpOworbG9uZzQgX19vdmxkIF9fY25mbiBhc19sb25nNChkb3VibGUzKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzQoZG91YmxlNCk7Citsb25nOCBfX292bGQgX19jbmZuIGFzX2xvbmc4KGRvdWJsZTgpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzE2KGRvdWJsZTE2KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcoZG91YmxlKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGFzX3Vsb25nMihkb3VibGUyKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFzX3Vsb25nMyhkb3VibGUzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFzX3Vsb25nMyhkb3VibGU0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFzX3Vsb25nNChkb3VibGUzKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFzX3Vsb25nNChkb3VibGU0KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGFzX3Vsb25nOChkb3VibGU4KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBhc191bG9uZzE2KGRvdWJsZTE2KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFzX2Zsb2F0Mihkb3VibGUpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQzKGRvdWJsZTIpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ0KGRvdWJsZTIpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ4KGRvdWJsZTMpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ4KGRvdWJsZTQpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGFzX2Zsb2F0MTYoZG91YmxlOCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBhc19kb3VibGUoY2hhcjgpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlKHVjaGFyOCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBhc19kb3VibGUoc2hvcnQzKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGFzX2RvdWJsZShzaG9ydDQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlKHVzaG9ydDMpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlKHVzaG9ydDQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlKGludDIpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlKHVpbnQyKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGFzX2RvdWJsZShsb25nKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGFzX2RvdWJsZSh1bG9uZyk7Citkb3VibGUgX19vdmxkIF9fY25mbiBhc19kb3VibGUoZmxvYXQyKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGFzX2RvdWJsZShkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFzX2RvdWJsZTIoY2hhcjE2KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKHVjaGFyMTYpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFzX2RvdWJsZTIoc2hvcnQ4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKHVzaG9ydDgpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFzX2RvdWJsZTIoaW50Myk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMihpbnQ0KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKHVpbnQzKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKHVpbnQ0KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKGxvbmcyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKHVsb25nMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMihmbG9hdDMpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFzX2RvdWJsZTIoZmxvYXQ0KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFzX2RvdWJsZTMoc2hvcnQxNik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMyh1c2hvcnQxNik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMyhpbnQ4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhc19kb3VibGUzKHVpbnQ4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhc19kb3VibGUzKGxvbmczKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhc19kb3VibGUzKGxvbmc0KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhc19kb3VibGUzKHVsb25nMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMyh1bG9uZzQpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFzX2RvdWJsZTMoZmxvYXQ4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhc19kb3VibGUzKGRvdWJsZTMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFzX2RvdWJsZTMoZG91YmxlNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlNChzaG9ydDE2KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhc19kb3VibGU0KHVzaG9ydDE2KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhc19kb3VibGU0KGludDgpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTQodWludDgpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTQobG9uZzMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTQobG9uZzQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTQodWxvbmczKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhc19kb3VibGU0KHVsb25nNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlNChmbG9hdDgpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTQoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlNChkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBhc19kb3VibGU4KGludDE2KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBhc19kb3VibGU4KHVpbnQxNik7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlOChsb25nOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlOCh1bG9uZzgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTgoZmxvYXQxNik7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlOChkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMTYobG9uZzE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMTYodWxvbmcxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGFzX2RvdWJsZTE2KGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKyNpZmRlZiBjbF9raHJfZnAxNgorY2hhcjIgX19vdmxkIF9fY25mbiBhc19jaGFyMihoYWxmKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjMoaGFsZjIpOworY2hhcjQgX19vdmxkIF9fY25mbiBhc19jaGFyNChoYWxmMik7CitjaGFyOCBfX292bGQgX19jbmZuIGFzX2NoYXI4KGhhbGYzKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjgoaGFsZjQpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjE2KGhhbGY4KTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGFzX3VjaGFyMihoYWxmKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGFzX3VjaGFyMyhoYWxmMik7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBhc191Y2hhcjQoaGFsZjIpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI4KGhhbGYzKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFzX3VjaGFyOChoYWxmNCk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNihoYWxmOCk7CitzaG9ydCBfX292bGQgX19jbmZuIGFzX3Nob3J0KGhhbGYpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQyKGhhbGYyKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGFzX3Nob3J0MyhoYWxmMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBhc19zaG9ydDMoaGFsZjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ0KGhhbGYzKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGFzX3Nob3J0NChoYWxmNCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBhc19zaG9ydDgoaGFsZjgpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3Nob3J0MTYoaGFsZjE2KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGFzX3VzaG9ydChoYWxmKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBhc191c2hvcnQyKGhhbGYyKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKGhhbGYzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKGhhbGY0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhc191c2hvcnQ0KGhhbGYzKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhc191c2hvcnQ0KGhhbGY0KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhc191c2hvcnQ4KGhhbGY4KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MTYoaGFsZjE2KTsKK2ludCBfX292bGQgX19jbmZuIGFzX2ludChoYWxmMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfaW50MihoYWxmMyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfaW50MihoYWxmNCk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfaW50MyhoYWxmOCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfaW50NChoYWxmOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfaW50OChoYWxmMTYpOwordWludCBfX292bGQgX19jbmZuIGFzX3VpbnQoaGFsZjIpOwordWludDIgX19vdmxkIF9fY25mbiBhc191aW50MihoYWxmMyk7Cit1aW50MiBfX292bGQgX19jbmZuIGFzX3VpbnQyKGhhbGY0KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfdWludDMoaGFsZjgpOwordWludDQgX19vdmxkIF9fY25mbiBhc191aW50NChoYWxmOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGFzX3VpbnQ4KGhhbGYxNik7Citsb25nIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZyhoYWxmMyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZyhoYWxmNCk7Citsb25nMiBfX292bGQgX19jbmZuIGFzX2xvbmcyKGhhbGY4KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzMoaGFsZjE2KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzQoaGFsZjE2KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcoaGFsZjMpOwordWxvbmcgX19vdmxkIF9fY25mbiBhc191bG9uZyhoYWxmNCk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhc191bG9uZzIoaGFsZjgpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmczKGhhbGYxNik7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhc191bG9uZzQoaGFsZjE2KTsKK2hhbGYgX19vdmxkIF9fY25mbiBhc19oYWxmKGNoYXIyKTsKK2hhbGYgX19vdmxkIF9fY25mbiBhc19oYWxmKHVjaGFyMik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZihzaG9ydCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZih1c2hvcnQpOworaGFsZiBfX292bGQgX19jbmZuIGFzX2hhbGYoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGFzX2hhbGYyKGNoYXIzKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjIoY2hhcjQpOworaGFsZjIgX19vdmxkIF9fY25mbiBhc19oYWxmMih1Y2hhcjMpOworaGFsZjIgX19vdmxkIF9fY25mbiBhc19oYWxmMih1Y2hhcjQpOworaGFsZjIgX19vdmxkIF9fY25mbiBhc19oYWxmMihzaG9ydDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBhc19oYWxmMih1c2hvcnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjIoaW50KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjIodWludCk7CitoYWxmMiBfX292bGQgX19jbmZuIGFzX2hhbGYyKGhhbGYyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjIoZmxvYXQpOworaGFsZjMgX19vdmxkIF9fY25mbiBhc19oYWxmMyhjaGFyOCk7CitoYWxmMyBfX292bGQgX19jbmZuIGFzX2hhbGYzKHVjaGFyOCk7CitoYWxmMyBfX292bGQgX19jbmZuIGFzX2hhbGYzKHNob3J0Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGFzX2hhbGYzKHNob3J0NCk7CitoYWxmMyBfX292bGQgX19jbmZuIGFzX2hhbGYzKHVzaG9ydDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBhc19oYWxmMyh1c2hvcnQ0KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjMoaW50Mik7CitoYWxmMyBfX292bGQgX19jbmZuIGFzX2hhbGYzKHVpbnQyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjMobG9uZyk7CitoYWxmMyBfX292bGQgX19jbmZuIGFzX2hhbGYzKHVsb25nKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjMoaGFsZjMpOworaGFsZjMgX19vdmxkIF9fY25mbiBhc19oYWxmMyhoYWxmNCk7CitoYWxmMyBfX292bGQgX19jbmZuIGFzX2hhbGYzKGZsb2F0Mik7CitoYWxmNCBfX292bGQgX19jbmZuIGFzX2hhbGY0KGNoYXI4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjQodWNoYXI4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjQoc2hvcnQzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjQoc2hvcnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjQodXNob3J0Myk7CitoYWxmNCBfX292bGQgX19jbmZuIGFzX2hhbGY0KHVzaG9ydDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBhc19oYWxmNChpbnQyKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjQodWludDIpOworaGFsZjQgX19vdmxkIF9fY25mbiBhc19oYWxmNChsb25nKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjQodWxvbmcpOworaGFsZjQgX19vdmxkIF9fY25mbiBhc19oYWxmNChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGFzX2hhbGY0KGhhbGY0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjQoZmxvYXQyKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjgoY2hhcjE2KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjgodWNoYXIxNik7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KHNob3J0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KHVzaG9ydDgpOworaGFsZjggX19vdmxkIF9fY25mbiBhc19oYWxmOChpbnQzKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjgoaW50NCk7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KHVpbnQzKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjgodWludDQpOworaGFsZjggX19vdmxkIF9fY25mbiBhc19oYWxmOChsb25nMik7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KHVsb25nMik7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KGhhbGY4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjgoZmxvYXQzKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjgoZmxvYXQ0KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFzX2hhbGYxNihzaG9ydDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFzX2hhbGYxNih1c2hvcnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc19oYWxmMTYoaW50OCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc19oYWxmMTYodWludDgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjE2KGxvbmczKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFzX2hhbGYxNihsb25nNCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc19oYWxmMTYodWxvbmczKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFzX2hhbGYxNih1bG9uZzQpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjE2KGhhbGYxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc19oYWxmMTYoZmxvYXQ4KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQoaGFsZjIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQyKGhhbGYzKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFzX2Zsb2F0MihoYWxmNCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhc19mbG9hdDMoaGFsZjgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ0KGhhbGY4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGFzX2Zsb2F0OChoYWxmMTYpOworCisjaWZkZWYgY2xfa2hyX2ZwNjQKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjMoZG91YmxlKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjQoZG91YmxlKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjgoZG91YmxlMik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc19oYWxmMTYoZG91YmxlMyk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc19oYWxmMTYoZG91YmxlNCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBhc19kb3VibGUoaGFsZjMpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlKGhhbGY0KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKGhhbGY4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhc19kb3VibGUzKGhhbGYxNik7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlNChoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8vIE9wZW5DTCB2MS4xIHM2LjksIHYxLjIvMi4wIHM2LjEwIC0gRnVuY3Rpb24gcXVhbGlmaWVycworCisjZGVmaW5lIF9fa2VybmVsX2V4ZWMoWCwgdHlwZW4pIF9fa2VybmVsIFwKKwlfX2F0dHJpYnV0ZV9fKCh3b3JrX2dyb3VwX3NpemVfaGludChYLCAxLCAxKSkpIFwKKwlfX2F0dHJpYnV0ZV9fKCh2ZWNfdHlwZV9oaW50KHR5cGVuKSkpCisKKyNkZWZpbmUga2VybmVsX2V4ZWMoWCwgdHlwZW4pIF9fa2VybmVsIFwKKwlfX2F0dHJpYnV0ZV9fKCh3b3JrX2dyb3VwX3NpemVfaGludChYLCAxLCAxKSkpIFwKKwlfX2F0dHJpYnV0ZV9fKCh2ZWNfdHlwZV9oaW50KHR5cGVuKSkpCisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjEsIHYxLjIgczYuMTIuMSwgdjIuMCBzNi4xMy4xIC0gV29yay1pdGVtIEZ1bmN0aW9ucworCisvKioKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkaW1lbnNpb25zIGluIHVzZS4gVGhpcyBpcyB0aGUKKyAqIHZhbHVlIGdpdmVuIHRvIHRoZSB3b3JrX2RpbSBhcmd1bWVudCBzcGVjaWZpZWQgaW4KKyAqIGNsRW5xdWV1ZU5EUmFuZ2VLZXJuZWwuCisgKiBGb3IgY2xFbnF1ZXVlVGFzaywgdGhpcyByZXR1cm5zIDEuCisgKi8KK3VpbnQgX19vdmxkIF9fY25mbiBnZXRfd29ya19kaW0odm9pZCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGdsb2JhbCB3b3JrLWl0ZW1zIHNwZWNpZmllZCBmb3IKKyAqIGRpbWVuc2lvbiBpZGVudGlmaWVkIGJ5IGRpbWluZHguIFRoaXMgdmFsdWUgaXMgZ2l2ZW4gYnkKKyAqIHRoZSBnbG9iYWxfd29ya19zaXplIGFyZ3VtZW50IHRvCisgKiBjbEVucXVldWVORFJhbmdlS2VybmVsLiBWYWxpZCB2YWx1ZXMgb2YgZGltaW5keAorICogYXJlIDAgdG8gZ2V0X3dvcmtfZGltKCkgLSAxLiBGb3Igb3RoZXIgdmFsdWVzIG9mCisgKiBkaW1pbmR4LCBnZXRfZ2xvYmFsX3NpemUoKSByZXR1cm5zIDEuCisgKiBGb3IgY2xFbnF1ZXVlVGFzaywgdGhpcyBhbHdheXMgcmV0dXJucyAxLgorICovCitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfZ2xvYmFsX3NpemUodWludCBkaW1pbmR4KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSB1bmlxdWUgZ2xvYmFsIHdvcmstaXRlbSBJRCB2YWx1ZSBmb3IKKyAqIGRpbWVuc2lvbiBpZGVudGlmaWVkIGJ5IGRpbWluZHguIFRoZSBnbG9iYWwgd29yay1pdGVtCisgKiBJRCBzcGVjaWZpZXMgdGhlIHdvcmstaXRlbSBJRCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mCisgKiBnbG9iYWwgd29yay1pdGVtcyBzcGVjaWZpZWQgdG8gZXhlY3V0ZSB0aGUga2VybmVsLiBWYWxpZAorICogdmFsdWVzIG9mIGRpbWluZHggYXJlIDAgdG8gZ2V0X3dvcmtfZGltKCkgLSAxLiBGb3IKKyAqIG90aGVyIHZhbHVlcyBvZiBkaW1pbmR4LCBnZXRfZ2xvYmFsX2lkKCkgcmV0dXJucyAwLgorICogRm9yIGNsRW5xdWV1ZVRhc2ssIHRoaXMgcmV0dXJucyAwLgorICovCitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfZ2xvYmFsX2lkKHVpbnQgZGltaW5keCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxvY2FsIHdvcmstaXRlbXMgc3BlY2lmaWVkIGluCisgKiBkaW1lbnNpb24gaWRlbnRpZmllZCBieSBkaW1pbmR4LiBUaGlzIHZhbHVlIGlzIGdpdmVuIGJ5CisgKiB0aGUgbG9jYWxfd29ya19zaXplIGFyZ3VtZW50IHRvCisgKiBjbEVucXVldWVORFJhbmdlS2VybmVsIGlmIGxvY2FsX3dvcmtfc2l6ZSBpcyBub3QKKyAqIE5VTEw7IG90aGVyd2lzZSB0aGUgT3BlbkNMIGltcGxlbWVudGF0aW9uIGNob29zZXMKKyAqIGFuIGFwcHJvcHJpYXRlIGxvY2FsX3dvcmtfc2l6ZSB2YWx1ZSB3aGljaCBpcyByZXR1cm5lZAorICogYnkgdGhpcyBmdW5jdGlvbi4gVmFsaWQgdmFsdWVzIG9mIGRpbWluZHggYXJlIDAgdG8KKyAqIGdldF93b3JrX2RpbSgpIC0gMS4gRm9yIG90aGVyIHZhbHVlcyBvZiBkaW1pbmR4LAorICogZ2V0X2xvY2FsX3NpemUoKSByZXR1cm5zIDEuCisgKiBGb3IgY2xFbnF1ZXVlVGFzaywgdGhpcyBhbHdheXMgcmV0dXJucyAxLgorICovCitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfbG9jYWxfc2l6ZSh1aW50IGRpbWluZHgpOworCisvKioKKyAqIFJldHVybnMgdGhlIHVuaXF1ZSBsb2NhbCB3b3JrLWl0ZW0gSUQgaS5lLiBhIHdvcmstaXRlbQorICogd2l0aGluIGEgc3BlY2lmaWMgd29yay1ncm91cCBmb3IgZGltZW5zaW9uIGlkZW50aWZpZWQgYnkKKyAqIGRpbWluZHguIFZhbGlkIHZhbHVlcyBvZiBkaW1pbmR4IGFyZSAwIHRvCisgKiBnZXRfd29ya19kaW0oKSAtIDEuIEZvciBvdGhlciB2YWx1ZXMgb2YgZGltaW5keCwKKyAqIGdldF9sb2NhbF9pZCgpIHJldHVybnMgMC4KKyAqIEZvciBjbEVucXVldWVUYXNrLCB0aGlzIHJldHVybnMgMC4KKyAqLworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2xvY2FsX2lkKHVpbnQgZGltaW5keCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHdvcmstZ3JvdXBzIHRoYXQgd2lsbCBleGVjdXRlIGEKKyAqIGtlcm5lbCBmb3IgZGltZW5zaW9uIGlkZW50aWZpZWQgYnkgZGltaW5keC4KKyAqIFZhbGlkIHZhbHVlcyBvZiBkaW1pbmR4IGFyZSAwIHRvIGdldF93b3JrX2RpbSgpIC0gMS4KKyAqIEZvciBvdGhlciB2YWx1ZXMgb2YgZGltaW5keCwgZ2V0X251bV9ncm91cHMgKCkgcmV0dXJucworICogMS4KKyAqIEZvciBjbEVucXVldWVUYXNrLCB0aGlzIGFsd2F5cyByZXR1cm5zIDEuCisgKi8KK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9udW1fZ3JvdXBzKHVpbnQgZGltaW5keCk7CisKKy8qKgorICogZ2V0X2dyb3VwX2lkIHJldHVybnMgdGhlIHdvcmstZ3JvdXAgSUQgd2hpY2ggaXMgYQorICogbnVtYmVyIGZyb20gMCAuLiBnZXRfbnVtX2dyb3VwcyhkaW1pbmR4KSAtIDEuCisgKiBWYWxpZCB2YWx1ZXMgb2YgZGltaW5keCBhcmUgMCB0byBnZXRfd29ya19kaW0oKSAtIDEuCisgKiBGb3Igb3RoZXIgdmFsdWVzLCBnZXRfZ3JvdXBfaWQoKSByZXR1cm5zIDAuCisgKiBGb3IgY2xFbnF1ZXVlVGFzaywgdGhpcyByZXR1cm5zIDAuCisgKi8KK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9ncm91cF9pZCh1aW50IGRpbWluZHgpOworCisvKioKKyAqIGdldF9nbG9iYWxfb2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCB2YWx1ZXMgc3BlY2lmaWVkIGluCisgKiBnbG9iYWxfd29ya19vZmZzZXQgYXJndW1lbnQgdG8KKyAqIGNsRW5xdWV1ZU5EUmFuZ2VLZXJuZWwuCisgKiBWYWxpZCB2YWx1ZXMgb2YgZGltaW5keCBhcmUgMCB0byBnZXRfd29ya19kaW0oKSAtIDEuCisgKiBGb3Igb3RoZXIgdmFsdWVzLCBnZXRfZ2xvYmFsX29mZnNldCgpIHJldHVybnMgMC4KKyAqIEZvciBjbEVucXVldWVUYXNrLCB0aGlzIHJldHVybnMgMC4KKyAqLworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2dsb2JhbF9vZmZzZXQodWludCBkaW1pbmR4KTsKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitzaXplX3QgX19vdmxkIGdldF9lbnF1ZXVlZF9sb2NhbF9zaXplKHVpbnQgZGltaW5keCk7CitzaXplX3QgX19vdmxkIGdldF9nbG9iYWxfbGluZWFyX2lkKHZvaWQpOworc2l6ZV90IF9fb3ZsZCBnZXRfbG9jYWxfbGluZWFyX2lkKHZvaWQpOworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLy8gT3BlbkNMIHYxLjEgczYuMTEuMiwgdjEuMiBzNi4xMi4yLCB2Mi4wIHM2LjEzLjIgLSBNYXRoIGZ1bmN0aW9ucworCisvKioKKyAqIEFyYyBjb3NpbmUgZnVuY3Rpb24uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYWNvcyhmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhY29zKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhY29zKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhY29zKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhY29zKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gYWNvcyhmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gYWNvcyhkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFjb3MoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYWNvcyhkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhY29zKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGFjb3MoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGFjb3MoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGFjb3MoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGFjb3MoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBhY29zKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYWNvcyhoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGFjb3MoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYWNvcyhoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBJbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGFjb3NoKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFjb3NoKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhY29zaChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYWNvc2goZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGFjb3NoKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gYWNvc2goZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGFjb3NoKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYWNvc2goZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYWNvc2goZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYWNvc2goZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYWNvc2goZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGFjb3NoKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBhY29zaChoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYWNvc2goaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBhY29zaChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGFjb3NoKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYWNvc2goaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYWNvc2goaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBhY29zICh4KSAvIFBJLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGFjb3NwaShmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFjb3NwaShmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhY29zcGkoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGFjb3NwaShmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGFjb3NwaShkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGFjb3NwaShkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBhY29zcGkoaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBhY29zcGkoaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIGFjb3NwaShoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGhhbGYxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQXJjIHNpbmUgZnVuY3Rpb24uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXNpbihmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc2luKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhc2luKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhc2luKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhc2luKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gYXNpbihmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNpbihkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFzaW4oZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXNpbihkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhc2luKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGFzaW4oZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGFzaW4oZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGFzaW4oaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGFzaW4oaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBhc2luKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNpbihoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGFzaW4oaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXNpbihoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBJbnZlcnNlIGh5cGVyYm9saWMgc2luZS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBhc2luaChmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc2luaChmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNpbmgoZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFzaW5oKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhc2luaChmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGFzaW5oKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBhc2luaChkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFzaW5oKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFzaW5oKGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFzaW5oKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGFzaW5oKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhc2luaChkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gYXNpbmgoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGFzaW5oKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXNpbmgoaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBhc2luaChoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGFzaW5oKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFzaW5oKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgYXNpbiAoeCkgLyBQSS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBhc2lucGkoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc2lucGkoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNpbnBpKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFzaW5waShmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhc2lucGkoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGFzaW5waShmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBhc2lucGkoZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFzaW5waShkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFzaW5waShkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFzaW5waShkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGFzaW5waShkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhc2lucGkoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gYXNpbnBpKGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIGFzaW5waShoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXNpbnBpKGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiBhc2lucGkoaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIGFzaW5waShoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFzaW5waShoYWxmMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIEFyYyB0YW5nZW50IGZ1bmN0aW9uLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGF0YW4oZmxvYXQgeV9vdmVyX3gpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXRhbihmbG9hdDIgeV9vdmVyX3gpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXRhbihmbG9hdDMgeV9vdmVyX3gpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXRhbihmbG9hdDQgeV9vdmVyX3gpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXRhbihmbG9hdDggeV9vdmVyX3gpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGF0YW4oZmxvYXQxNiB5X292ZXJfeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGF0YW4oZG91YmxlIHlfb3Zlcl94KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhdGFuKGRvdWJsZTIgeV9vdmVyX3gpOworZG91YmxlMyBfX292bGQgX19jbmZuIGF0YW4oZG91YmxlMyB5X292ZXJfeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXRhbihkb3VibGU0IHlfb3Zlcl94KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBhdGFuKGRvdWJsZTggeV9vdmVyX3gpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhdGFuKGRvdWJsZTE2IHlfb3Zlcl94KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBhdGFuKGhhbGYgeV9vdmVyX3gpOworaGFsZjIgX19vdmxkIF9fY25mbiBhdGFuKGhhbGYyIHlfb3Zlcl94KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXRhbihoYWxmMyB5X292ZXJfeCk7CitoYWxmNCBfX292bGQgX19jbmZuIGF0YW4oaGFsZjQgeV9vdmVyX3gpOworaGFsZjggX19vdmxkIF9fY25mbiBhdGFuKGhhbGY4IHlfb3Zlcl94KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGF0YW4oaGFsZjE2IHlfb3Zlcl94KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQXJjIHRhbmdlbnQgb2YgeSAvIHguCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXRhbjIoZmxvYXQgeSwgZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhdGFuMihmbG9hdDIgeSwgZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXRhbjIoZmxvYXQzIHksIGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGF0YW4yKGZsb2F0NCB5LCBmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhdGFuMihmbG9hdDggeSwgZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGF0YW4yKGZsb2F0MTYgeSwgZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXRhbjIoZG91YmxlIHksIGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhdGFuMihkb3VibGUyIHksIGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXRhbjIoZG91YmxlMyB5LCBkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIGF0YW4yKGRvdWJsZTQgeSwgZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBhdGFuMihkb3VibGU4IHksIGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGF0YW4yKGRvdWJsZTE2IHksIGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGF0YW4yKGhhbGYgeSwgaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXRhbjIoaGFsZjIgeSwgaGFsZjIgeCk7CitoYWxmMyBfX292bGQgX19jbmZuIGF0YW4yKGhhbGYzIHksIGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiBhdGFuMihoYWxmNCB5LCBoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXRhbjIoaGFsZjggeSwgaGFsZjggeCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhdGFuMihoYWxmMTYgeSwgaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBIeXBlcmJvbGljIGFyYyB0YW5nZW50LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGF0YW5oKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGF0YW5oKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhdGFuaChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXRhbmgoZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGF0YW5oKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gYXRhbmgoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGF0YW5oKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXRhbmgoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXRhbmgoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXRhbmgoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYXRhbmgoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGF0YW5oKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBhdGFuaChoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXRhbmgoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBhdGFuaChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGF0YW5oKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXRhbmgoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXRhbmgoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBhdGFuICh4KSAvIFBJLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGF0YW5waShmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGF0YW5waShmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhdGFucGkoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGF0YW5waShmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGF0YW5waShkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGF0YW5waShkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBhdGFucGkoaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBhdGFucGkoaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIGF0YW5waShoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGhhbGYxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBhdGFuMiAoeSwgeCkgLyBQSS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBhdGFuMnBpKGZsb2F0IHksIGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShmbG9hdDIgeSwgZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShmbG9hdDMgeSwgZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShmbG9hdDQgeSwgZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShmbG9hdDggeSwgZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGF0YW4ycGkoZmxvYXQxNiB5LCBmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBhdGFuMnBpKGRvdWJsZSB5LCBkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShkb3VibGUyIHksIGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShkb3VibGUzIHksIGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShkb3VibGU0IHksIGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShkb3VibGU4IHksIGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGF0YW4ycGkoZG91YmxlMTYgeSwgZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShoYWxmIHksIGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIGF0YW4ycGkoaGFsZjIgeSwgaGFsZjIgeCk7CitoYWxmMyBfX292bGQgX19jbmZuIGF0YW4ycGkoaGFsZjMgeSwgaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIGF0YW4ycGkoaGFsZjQgeSwgaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIGF0YW4ycGkoaGFsZjggeSwgaGFsZjggeCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhdGFuMnBpKGhhbGYxNiB5LCBoYWxmMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgY3ViZS1yb290LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGNicnQoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY2JydChmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY2JydChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY2JydChmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY2JydChmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNicnQoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGNicnQoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjYnJ0KGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNicnQoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY2JydChkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjYnJ0KGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjYnJ0KGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBjYnJ0KGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBjYnJ0KGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY2JydChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGNicnQoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBjYnJ0KGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNicnQoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUm91bmQgdG8gaW50ZWdyYWwgdmFsdWUgdXNpbmcgdGhlIHJvdW5kIHRvIHBvc2l0aXZlCisgKiBpbmZpbml0eSByb3VuZGluZyBtb2RlLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGNlaWwoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY2VpbChmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY2VpbChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY2VpbChmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY2VpbChmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNlaWwoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGNlaWwoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjZWlsKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNlaWwoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY2VpbChkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjZWlsKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjZWlsKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBjZWlsKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBjZWlsKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY2VpbChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGNlaWwoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBjZWlsKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNlaWwoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyB4IHdpdGggaXRzIHNpZ24gY2hhbmdlZCB0byBtYXRjaCB0aGUgc2lnbiBvZiB5LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGNvcHlzaWduKGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvcHlzaWduKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb3B5c2lnbihmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb3B5c2lnbihmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvcHlzaWduKGRvdWJsZSB4LCBkb3VibGUgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oZG91YmxlMiB4LCBkb3VibGUyIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvcHlzaWduKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb3B5c2lnbihkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oZG91YmxlOCB4LCBkb3VibGU4IHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb3B5c2lnbihkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBjb3B5c2lnbihoYWxmIHgsIGhhbGYgeSk7CitoYWxmMiBfX292bGQgX19jbmZuIGNvcHlzaWduKGhhbGYyIHgsIGhhbGYyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb3B5c2lnbihoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oaGFsZjQgeCwgaGFsZjQgeSk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvcHlzaWduKGhhbGY4IHgsIGhhbGY4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBjb3NpbmUuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29zKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvcyhmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29zKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb3MoZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvcyhmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvcyhmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29zKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29zKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvcyhkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb3MoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29zKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb3MoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGNvcyhoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29zKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29zKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29zKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29zKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvcyhoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIGh5cGVyYm9saWMgY29zaW5lLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGNvc2goZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29zaChmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29zaChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29zaChmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29zaChmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvc2goZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvc2goZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb3NoKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvc2goZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29zaChkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb3NoKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb3NoKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBjb3NoKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb3NoKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29zaChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvc2goaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBjb3NoKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvc2goaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBjb3MgKFBJICogeCkuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29zcGkoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb3NwaShmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb3NwaShmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb3NwaShmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb3NwaShmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29zcGkoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29zcGkoZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvc3BpKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29zcGkoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb3NwaShkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvc3BpKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvc3BpKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGNvc3BpKGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIGNvc3BpKGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb3NwaShoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29zcGkoaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvc3BpKGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29zcGkoaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGVyZmMoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gZXJmYyhmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gZXJmYyhmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gZXJmYyhmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gZXJmYyhmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGVyZmMoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGVyZmMoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBlcmZjKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGVyZmMoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gZXJmYyhkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBlcmZjKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBlcmZjKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBlcmZjKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBlcmZjKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gZXJmYyhoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGVyZmMoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBlcmZjKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGVyZmMoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogRXJyb3IgZnVuY3Rpb24gZW5jb3VudGVyZWQgaW4gaW50ZWdyYXRpbmcgdGhlCisgKiBub3JtYWwgZGlzdHJpYnV0aW9uLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGVyZihmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBlcmYoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGVyZihmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gZXJmKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBlcmYoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBlcmYoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGVyZihkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGVyZihkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBlcmYoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gZXJmKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGVyZihkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gZXJmKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBlcmYoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGVyZihoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIGVyZihoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGVyZihoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGVyZihoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBlcmYoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSB0aGUgYmFzZSBlIGV4cG9uZW50aWFsIGZ1bmN0aW9uIG9mIHguCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZXhwKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gZXhwKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGV4cChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBleHAoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gZXhwKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBleHAoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZXhwKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBleHAoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBleHAoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBleHAoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBleHAoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gZXhwKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGV4cChoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiBleHAoaGFsZjIgeCk7CitoYWxmMyBfX292bGQgX19jbmZuIGV4cChoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZXhwKGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiBleHAoaGFsZjggeCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBleHAoaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBFeHBvbmVudGlhbCBiYXNlIDIgZnVuY3Rpb24uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZXhwMihmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBleHAyKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBleHAyKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBleHAyKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBleHAyKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gZXhwMihmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZXhwMihkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGV4cDIoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZXhwMihkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBleHAyKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGV4cDIoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGV4cDIoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGV4cDIoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGV4cDIoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBleHAyKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZXhwMihoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGV4cDIoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZXhwMihoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBFeHBvbmVudGlhbCBiYXNlIDEwIGZ1bmN0aW9uLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGV4cDEwKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGV4cDEwKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBleHAxMChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gZXhwMTAoZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGV4cDEwKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gZXhwMTAoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGV4cDEwKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gZXhwMTAoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZXhwMTAoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gZXhwMTAoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gZXhwMTAoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGV4cDEwKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBleHAxMChoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZXhwMTAoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBleHAxMChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGV4cDEwKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZXhwMTAoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZXhwMTAoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBlXngtIDEuMC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBleHBtMShmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGV4cG0xKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGV4cG0xKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGV4cG0xKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGV4cG0xKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBleHBtMShmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBleHBtMShkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gZXhwbTEoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBleHBtMShkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIGV4cG0xKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gZXhwbTEoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gZXhwbTEoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gZXhwbTEoaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZXhwbTEoaGFsZjIgeCk7CitoYWxmMyBfX292bGQgX19jbmZuIGV4cG0xKGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiBleHBtMShoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZXhwbTEoaGFsZjggeCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBleHBtMShoYWxmMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgYWJzb2x1dGUgdmFsdWUgb2YgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZmFicyhmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBmYWJzKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBmYWJzKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBmYWJzKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBmYWJzKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gZmFicyhmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZmFicyhkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGZhYnMoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZmFicyhkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBmYWJzKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGZhYnMoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGZhYnMoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGZhYnMoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGZhYnMoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBmYWJzKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZmFicyhoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGZhYnMoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZmFicyhoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiB4IC0geSBpZiB4ID4geSwgKzAgaWYgeCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8geS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBmZGltKGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gZmRpbShmbG9hdDIgeCwgZmxvYXQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gZmRpbShmbG9hdDMgeCwgZmxvYXQzIHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gZmRpbShmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gZmRpbShmbG9hdDggeCwgZmxvYXQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGZkaW0oZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBmZGltKGRvdWJsZSB4LCBkb3VibGUgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gZmRpbShkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZmRpbShkb3VibGUzIHgsIGRvdWJsZTMgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gZmRpbShkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gZmRpbShkb3VibGU4IHgsIGRvdWJsZTggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGZkaW0oZG91YmxlMTYgeCwgZG91YmxlMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gZmRpbShoYWxmIHgsIGhhbGYgeSk7CitoYWxmMiBfX292bGQgX19jbmZuIGZkaW0oaGFsZjIgeCwgaGFsZjIgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIGZkaW0oaGFsZjMgeCwgaGFsZjMgeSk7CitoYWxmNCBfX292bGQgX19jbmZuIGZkaW0oaGFsZjQgeCwgaGFsZjQgeSk7CitoYWxmOCBfX292bGQgX19jbmZuIGZkaW0oaGFsZjggeCwgaGFsZjggeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBmZGltKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJvdW5kIHRvIGludGVncmFsIHZhbHVlIHVzaW5nIHRoZSByb3VuZCB0byAtdmUKKyAqIGluZmluaXR5IHJvdW5kaW5nIG1vZGUuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZmxvb3IoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gZmxvb3IoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGZsb29yKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBmbG9vcihmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gZmxvb3IoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBmbG9vcihmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZmxvb3IoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBmbG9vcihkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBmbG9vcihkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBmbG9vcihkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBmbG9vcihkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gZmxvb3IoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGZsb29yKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBmbG9vcihoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIGZsb29yKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZmxvb3IoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBmbG9vcihoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBmbG9vcihoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjb3JyZWN0bHkgcm91bmRlZCBmbG9hdGluZy1wb2ludAorICogcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1bSBvZiBjIHdpdGggdGhlIGluZmluaXRlbHkKKyAqIHByZWNpc2UgcHJvZHVjdCBvZiBhIGFuZCBiLiBSb3VuZGluZyBvZgorICogaW50ZXJtZWRpYXRlIHByb2R1Y3RzIHNoYWxsIG5vdCBvY2N1ci4gRWRnZSBjYXNlCisgKiBiZWhhdmlvciBpcyBwZXIgdGhlIElFRUUgNzU0LTIwMDggc3RhbmRhcmQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZm1hKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gZm1hKGZsb2F0MiBhLCBmbG9hdDIgYiwgZmxvYXQyIGMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gZm1hKGZsb2F0MyBhLCBmbG9hdDMgYiwgZmxvYXQzIGMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gZm1hKGZsb2F0NCBhLCBmbG9hdDQgYiwgZmxvYXQ0IGMpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gZm1hKGZsb2F0OCBhLCBmbG9hdDggYiwgZmxvYXQ4IGMpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGZtYShmbG9hdDE2IGEsIGZsb2F0MTYgYiwgZmxvYXQxNiBjKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZm1hKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpOworZG91YmxlMiBfX292bGQgX19jbmZuIGZtYShkb3VibGUyIGEsIGRvdWJsZTIgYiwgZG91YmxlMiBjKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBmbWEoZG91YmxlMyBhLCBkb3VibGUzIGIsIGRvdWJsZTMgYyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gZm1hKGRvdWJsZTQgYSwgZG91YmxlNCBiLCBkb3VibGU0IGMpOworZG91YmxlOCBfX292bGQgX19jbmZuIGZtYShkb3VibGU4IGEsIGRvdWJsZTggYiwgZG91YmxlOCBjKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gZm1hKGRvdWJsZTE2IGEsIGRvdWJsZTE2IGIsIGRvdWJsZTE2IGMpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGZtYShoYWxmIGEsIGhhbGYgYiwgaGFsZiBjKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZm1hKGhhbGYyIGEsIGhhbGYyIGIsIGhhbGYyIGMpOworaGFsZjMgX19vdmxkIF9fY25mbiBmbWEoaGFsZjMgYSwgaGFsZjMgYiwgaGFsZjMgYyk7CitoYWxmNCBfX292bGQgX19jbmZuIGZtYShoYWxmNCBhLCBoYWxmNCBiLCBoYWxmNCBjKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZm1hKGhhbGY4IGEsIGhhbGY4IGIsIGhhbGY4IGMpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZm1hKGhhbGYxNiBhLCBoYWxmMTYgYiwgaGFsZjE2IGMpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIHkgaWYgeCA8IHksIG90aGVyd2lzZSBpdCByZXR1cm5zIHguIElmIG9uZQorICogYXJndW1lbnQgaXMgYSBOYU4sIGZtYXgoKSByZXR1cm5zIHRoZSBvdGhlcgorICogYXJndW1lbnQuIElmIGJvdGggYXJndW1lbnRzIGFyZSBOYU5zLCBmbWF4KCkKKyAqIHJldHVybnMgYSBOYU4uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZm1heChmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGZtYXgoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGZtYXgoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGZtYXgoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGZtYXgoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBmbWF4KGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGZtYXgoZmxvYXQyIHgsIGZsb2F0IHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gZm1heChmbG9hdDMgeCwgZmxvYXQgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBmbWF4KGZsb2F0NCB4LCBmbG9hdCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGZtYXgoZmxvYXQ4IHgsIGZsb2F0IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGZtYXgoZmxvYXQxNiB4LCBmbG9hdCB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZm1heChkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIGZtYXgoZG91YmxlMiB4LCBkb3VibGUyIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIGZtYXgoZG91YmxlMyB4LCBkb3VibGUzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIGZtYXgoZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIGZtYXgoZG91YmxlOCB4LCBkb3VibGU4IHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBmbWF4KGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIGZtYXgoZG91YmxlMiB4LCBkb3VibGUgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZm1heChkb3VibGUzIHgsIGRvdWJsZSB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBmbWF4KGRvdWJsZTQgeCwgZG91YmxlIHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIGZtYXgoZG91YmxlOCB4LCBkb3VibGUgeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGZtYXgoZG91YmxlMTYgeCwgZG91YmxlIHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGZtYXgoaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBmbWF4KGhhbGYyIHgsIGhhbGYyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBmbWF4KGhhbGYzIHgsIGhhbGYzIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiBmbWF4KGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiBmbWF4KGhhbGY4IHgsIGhhbGY4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZm1heChoYWxmMTYgeCwgaGFsZjE2IHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBmbWF4KGhhbGYyIHgsIGhhbGYgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIGZtYXgoaGFsZjMgeCwgaGFsZiB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZm1heChoYWxmNCB4LCBoYWxmIHkpOworaGFsZjggX19vdmxkIF9fY25mbiBmbWF4KGhhbGY4IHgsIGhhbGYgeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBmbWF4KGhhbGYxNiB4LCBoYWxmIHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIHkgaWYgeSA8IHgsIG90aGVyd2lzZSBpdCByZXR1cm5zIHguIElmIG9uZQorICogYXJndW1lbnQgaXMgYSBOYU4sIGZtaW4oKSByZXR1cm5zIHRoZSBvdGhlcgorICogYXJndW1lbnQuIElmIGJvdGggYXJndW1lbnRzIGFyZSBOYU5zLCBmbWluKCkKKyAqIHJldHVybnMgYSBOYU4uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZm1pbihmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGZtaW4oZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGZtaW4oZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGZtaW4oZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGZtaW4oZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBmbWluKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGZtaW4oZmxvYXQyIHgsIGZsb2F0IHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gZm1pbihmbG9hdDMgeCwgZmxvYXQgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBmbWluKGZsb2F0NCB4LCBmbG9hdCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGZtaW4oZmxvYXQ4IHgsIGZsb2F0IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGZtaW4oZmxvYXQxNiB4LCBmbG9hdCB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZm1pbihkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIGZtaW4oZG91YmxlMiB4LCBkb3VibGUyIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIGZtaW4oZG91YmxlMyB4LCBkb3VibGUzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIGZtaW4oZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIGZtaW4oZG91YmxlOCB4LCBkb3VibGU4IHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBmbWluKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIGZtaW4oZG91YmxlMiB4LCBkb3VibGUgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZm1pbihkb3VibGUzIHgsIGRvdWJsZSB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBmbWluKGRvdWJsZTQgeCwgZG91YmxlIHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIGZtaW4oZG91YmxlOCB4LCBkb3VibGUgeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGZtaW4oZG91YmxlMTYgeCwgZG91YmxlIHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGZtaW4oaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBmbWluKGhhbGYyIHgsIGhhbGYyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBmbWluKGhhbGYzIHgsIGhhbGYzIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiBmbWluKGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiBmbWluKGhhbGY4IHgsIGhhbGY4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZm1pbihoYWxmMTYgeCwgaGFsZjE2IHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBmbWluKGhhbGYyIHgsIGhhbGYgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIGZtaW4oaGFsZjMgeCwgaGFsZiB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZm1pbihoYWxmNCB4LCBoYWxmIHkpOworaGFsZjggX19vdmxkIF9fY25mbiBmbWluKGhhbGY4IHgsIGhhbGYgeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBmbWluKGhhbGYxNiB4LCBoYWxmIHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBNb2R1bHVzLiBSZXR1cm5zIHggLSB5ICogdHJ1bmMgKHgveSkuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZm1vZChmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGZtb2QoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGZtb2QoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGZtb2QoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGZtb2QoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBmbW9kKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZm1vZChkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIGZtb2QoZG91YmxlMiB4LCBkb3VibGUyIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIGZtb2QoZG91YmxlMyB4LCBkb3VibGUzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIGZtb2QoZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIGZtb2QoZG91YmxlOCB4LCBkb3VibGU4IHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBmbW9kKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGZtb2QoaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBmbW9kKGhhbGYyIHgsIGhhbGYyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBmbW9kKGhhbGYzIHgsIGhhbGYzIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiBmbW9kKGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiBmbW9kKGhhbGY4IHgsIGhhbGY4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZm1vZChoYWxmMTYgeCwgaGFsZjE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIGZtaW4oeCAtIGZsb29yICh4KSwgMHgxLmZmZmZmZXAtMWYgKS4KKyAqIGZsb29yKHgpIGlzIHJldHVybmVkIGluIGlwdHIuCisgKi8KKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorZmxvYXQgX19vdmxkIGZyYWN0KGZsb2F0IHgsIGZsb2F0ICppcHRyKTsKK2Zsb2F0MiBfX292bGQgZnJhY3QoZmxvYXQyIHgsIGZsb2F0MiAqaXB0cik7CitmbG9hdDMgX19vdmxkIGZyYWN0KGZsb2F0MyB4LCBmbG9hdDMgKmlwdHIpOworZmxvYXQ0IF9fb3ZsZCBmcmFjdChmbG9hdDQgeCwgZmxvYXQ0ICppcHRyKTsKK2Zsb2F0OCBfX292bGQgZnJhY3QoZmxvYXQ4IHgsIGZsb2F0OCAqaXB0cik7CitmbG9hdDE2IF9fb3ZsZCBmcmFjdChmbG9hdDE2IHgsIGZsb2F0MTYgKmlwdHIpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIGZyYWN0KGRvdWJsZSB4LCBkb3VibGUgKmlwdHIpOworZG91YmxlMiBfX292bGQgZnJhY3QoZG91YmxlMiB4LCBkb3VibGUyICppcHRyKTsKK2RvdWJsZTMgX19vdmxkIGZyYWN0KGRvdWJsZTMgeCwgZG91YmxlMyAqaXB0cik7Citkb3VibGU0IF9fb3ZsZCBmcmFjdChkb3VibGU0IHgsIGRvdWJsZTQgKmlwdHIpOworZG91YmxlOCBfX292bGQgZnJhY3QoZG91YmxlOCB4LCBkb3VibGU4ICppcHRyKTsKK2RvdWJsZTE2IF9fb3ZsZCBmcmFjdChkb3VibGUxNiB4LCBkb3VibGUxNiAqaXB0cik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBmcmFjdChoYWxmIHgsIGhhbGYgKmlwdHIpOworaGFsZjIgX19vdmxkIGZyYWN0KGhhbGYyIHgsIGhhbGYyICppcHRyKTsKK2hhbGYzIF9fb3ZsZCBmcmFjdChoYWxmMyB4LCBoYWxmMyAqaXB0cik7CitoYWxmNCBfX292bGQgZnJhY3QoaGFsZjQgeCwgaGFsZjQgKmlwdHIpOworaGFsZjggX19vdmxkIGZyYWN0KGhhbGY4IHgsIGhhbGY4ICppcHRyKTsKK2hhbGYxNiBfX292bGQgZnJhY3QoaGFsZjE2IHgsIGhhbGYxNiAqaXB0cik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorI2Vsc2UKK2Zsb2F0IF9fb3ZsZCBmcmFjdChmbG9hdCB4LCBfX2dsb2JhbCBmbG9hdCAqaXB0cik7CitmbG9hdDIgX19vdmxkIGZyYWN0KGZsb2F0MiB4LCBfX2dsb2JhbCBmbG9hdDIgKmlwdHIpOworZmxvYXQzIF9fb3ZsZCBmcmFjdChmbG9hdDMgeCwgX19nbG9iYWwgZmxvYXQzICppcHRyKTsKK2Zsb2F0NCBfX292bGQgZnJhY3QoZmxvYXQ0IHgsIF9fZ2xvYmFsIGZsb2F0NCAqaXB0cik7CitmbG9hdDggX19vdmxkIGZyYWN0KGZsb2F0OCB4LCBfX2dsb2JhbCBmbG9hdDggKmlwdHIpOworZmxvYXQxNiBfX292bGQgZnJhY3QoZmxvYXQxNiB4LCBfX2dsb2JhbCBmbG9hdDE2ICppcHRyKTsKK2Zsb2F0IF9fb3ZsZCBmcmFjdChmbG9hdCB4LCBfX2xvY2FsIGZsb2F0ICppcHRyKTsKK2Zsb2F0MiBfX292bGQgZnJhY3QoZmxvYXQyIHgsIF9fbG9jYWwgZmxvYXQyICppcHRyKTsKK2Zsb2F0MyBfX292bGQgZnJhY3QoZmxvYXQzIHgsIF9fbG9jYWwgZmxvYXQzICppcHRyKTsKK2Zsb2F0NCBfX292bGQgZnJhY3QoZmxvYXQ0IHgsIF9fbG9jYWwgZmxvYXQ0ICppcHRyKTsKK2Zsb2F0OCBfX292bGQgZnJhY3QoZmxvYXQ4IHgsIF9fbG9jYWwgZmxvYXQ4ICppcHRyKTsKK2Zsb2F0MTYgX19vdmxkIGZyYWN0KGZsb2F0MTYgeCwgX19sb2NhbCBmbG9hdDE2ICppcHRyKTsKK2Zsb2F0IF9fb3ZsZCBmcmFjdChmbG9hdCB4LCBfX3ByaXZhdGUgZmxvYXQgKmlwdHIpOworZmxvYXQyIF9fb3ZsZCBmcmFjdChmbG9hdDIgeCwgX19wcml2YXRlIGZsb2F0MiAqaXB0cik7CitmbG9hdDMgX19vdmxkIGZyYWN0KGZsb2F0MyB4LCBfX3ByaXZhdGUgZmxvYXQzICppcHRyKTsKK2Zsb2F0NCBfX292bGQgZnJhY3QoZmxvYXQ0IHgsIF9fcHJpdmF0ZSBmbG9hdDQgKmlwdHIpOworZmxvYXQ4IF9fb3ZsZCBmcmFjdChmbG9hdDggeCwgX19wcml2YXRlIGZsb2F0OCAqaXB0cik7CitmbG9hdDE2IF9fb3ZsZCBmcmFjdChmbG9hdDE2IHgsIF9fcHJpdmF0ZSBmbG9hdDE2ICppcHRyKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBmcmFjdChkb3VibGUgeCwgX19nbG9iYWwgZG91YmxlICppcHRyKTsKK2RvdWJsZTIgX19vdmxkIGZyYWN0KGRvdWJsZTIgeCwgX19nbG9iYWwgZG91YmxlMiAqaXB0cik7Citkb3VibGUzIF9fb3ZsZCBmcmFjdChkb3VibGUzIHgsIF9fZ2xvYmFsIGRvdWJsZTMgKmlwdHIpOworZG91YmxlNCBfX292bGQgZnJhY3QoZG91YmxlNCB4LCBfX2dsb2JhbCBkb3VibGU0ICppcHRyKTsKK2RvdWJsZTggX19vdmxkIGZyYWN0KGRvdWJsZTggeCwgX19nbG9iYWwgZG91YmxlOCAqaXB0cik7Citkb3VibGUxNiBfX292bGQgZnJhY3QoZG91YmxlMTYgeCwgX19nbG9iYWwgZG91YmxlMTYgKmlwdHIpOworZG91YmxlIF9fb3ZsZCBmcmFjdChkb3VibGUgeCwgX19sb2NhbCBkb3VibGUgKmlwdHIpOworZG91YmxlMiBfX292bGQgZnJhY3QoZG91YmxlMiB4LCBfX2xvY2FsIGRvdWJsZTIgKmlwdHIpOworZG91YmxlMyBfX292bGQgZnJhY3QoZG91YmxlMyB4LCBfX2xvY2FsIGRvdWJsZTMgKmlwdHIpOworZG91YmxlNCBfX292bGQgZnJhY3QoZG91YmxlNCB4LCBfX2xvY2FsIGRvdWJsZTQgKmlwdHIpOworZG91YmxlOCBfX292bGQgZnJhY3QoZG91YmxlOCB4LCBfX2xvY2FsIGRvdWJsZTggKmlwdHIpOworZG91YmxlMTYgX19vdmxkIGZyYWN0KGRvdWJsZTE2IHgsIF9fbG9jYWwgZG91YmxlMTYgKmlwdHIpOworZG91YmxlIF9fb3ZsZCBmcmFjdChkb3VibGUgeCwgX19wcml2YXRlIGRvdWJsZSAqaXB0cik7Citkb3VibGUyIF9fb3ZsZCBmcmFjdChkb3VibGUyIHgsIF9fcHJpdmF0ZSBkb3VibGUyICppcHRyKTsKK2RvdWJsZTMgX19vdmxkIGZyYWN0KGRvdWJsZTMgeCwgX19wcml2YXRlIGRvdWJsZTMgKmlwdHIpOworZG91YmxlNCBfX292bGQgZnJhY3QoZG91YmxlNCB4LCBfX3ByaXZhdGUgZG91YmxlNCAqaXB0cik7Citkb3VibGU4IF9fb3ZsZCBmcmFjdChkb3VibGU4IHgsIF9fcHJpdmF0ZSBkb3VibGU4ICppcHRyKTsKK2RvdWJsZTE2IF9fb3ZsZCBmcmFjdChkb3VibGUxNiB4LCBfX3ByaXZhdGUgZG91YmxlMTYgKmlwdHIpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgZnJhY3QoaGFsZiB4LCBfX2dsb2JhbCBoYWxmICppcHRyKTsKK2hhbGYyIF9fb3ZsZCBmcmFjdChoYWxmMiB4LCBfX2dsb2JhbCBoYWxmMiAqaXB0cik7CitoYWxmMyBfX292bGQgZnJhY3QoaGFsZjMgeCwgX19nbG9iYWwgaGFsZjMgKmlwdHIpOworaGFsZjQgX19vdmxkIGZyYWN0KGhhbGY0IHgsIF9fZ2xvYmFsIGhhbGY0ICppcHRyKTsKK2hhbGY4IF9fb3ZsZCBmcmFjdChoYWxmOCB4LCBfX2dsb2JhbCBoYWxmOCAqaXB0cik7CitoYWxmMTYgX19vdmxkIGZyYWN0KGhhbGYxNiB4LCBfX2dsb2JhbCBoYWxmMTYgKmlwdHIpOworaGFsZiBfX292bGQgZnJhY3QoaGFsZiB4LCBfX2xvY2FsIGhhbGYgKmlwdHIpOworaGFsZjIgX19vdmxkIGZyYWN0KGhhbGYyIHgsIF9fbG9jYWwgaGFsZjIgKmlwdHIpOworaGFsZjMgX19vdmxkIGZyYWN0KGhhbGYzIHgsIF9fbG9jYWwgaGFsZjMgKmlwdHIpOworaGFsZjQgX19vdmxkIGZyYWN0KGhhbGY0IHgsIF9fbG9jYWwgaGFsZjQgKmlwdHIpOworaGFsZjggX19vdmxkIGZyYWN0KGhhbGY4IHgsIF9fbG9jYWwgaGFsZjggKmlwdHIpOworaGFsZjE2IF9fb3ZsZCBmcmFjdChoYWxmMTYgeCwgX19sb2NhbCBoYWxmMTYgKmlwdHIpOworaGFsZiBfX292bGQgZnJhY3QoaGFsZiB4LCBfX3ByaXZhdGUgaGFsZiAqaXB0cik7CitoYWxmMiBfX292bGQgZnJhY3QoaGFsZjIgeCwgX19wcml2YXRlIGhhbGYyICppcHRyKTsKK2hhbGYzIF9fb3ZsZCBmcmFjdChoYWxmMyB4LCBfX3ByaXZhdGUgaGFsZjMgKmlwdHIpOworaGFsZjQgX19vdmxkIGZyYWN0KGhhbGY0IHgsIF9fcHJpdmF0ZSBoYWxmNCAqaXB0cik7CitoYWxmOCBfX292bGQgZnJhY3QoaGFsZjggeCwgX19wcml2YXRlIGhhbGY4ICppcHRyKTsKK2hhbGYxNiBfX292bGQgZnJhY3QoaGFsZjE2IHgsIF9fcHJpdmF0ZSBoYWxmMTYgKmlwdHIpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogRXh0cmFjdCBtYW50aXNzYSBhbmQgZXhwb25lbnQgZnJvbSB4LiBGb3IgZWFjaAorICogY29tcG9uZW50IHRoZSBtYW50aXNzYSByZXR1cm5lZCBpcyBhIGZsb2F0IHdpdGgKKyAqIG1hZ25pdHVkZSBpbiB0aGUgaW50ZXJ2YWwgWzEvMiwgMSkgb3IgMC4gRWFjaAorICogY29tcG9uZW50IG9mIHggZXF1YWxzIG1hbnRpc3NhIHJldHVybmVkICogMl5leHAuCisgKi8KKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorZmxvYXQgX19vdmxkIGZyZXhwKGZsb2F0IHgsIGludCAqZXhwKTsKK2Zsb2F0MiBfX292bGQgZnJleHAoZmxvYXQyIHgsIGludDIgKmV4cCk7CitmbG9hdDMgX19vdmxkIGZyZXhwKGZsb2F0MyB4LCBpbnQzICpleHApOworZmxvYXQ0IF9fb3ZsZCBmcmV4cChmbG9hdDQgeCwgaW50NCAqZXhwKTsKK2Zsb2F0OCBfX292bGQgZnJleHAoZmxvYXQ4IHgsIGludDggKmV4cCk7CitmbG9hdDE2IF9fb3ZsZCBmcmV4cChmbG9hdDE2IHgsIGludDE2ICpleHApOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIGZyZXhwKGRvdWJsZSB4LCBpbnQgKmV4cCk7Citkb3VibGUyIF9fb3ZsZCBmcmV4cChkb3VibGUyIHgsIGludDIgKmV4cCk7Citkb3VibGUzIF9fb3ZsZCBmcmV4cChkb3VibGUzIHgsIGludDMgKmV4cCk7Citkb3VibGU0IF9fb3ZsZCBmcmV4cChkb3VibGU0IHgsIGludDQgKmV4cCk7Citkb3VibGU4IF9fb3ZsZCBmcmV4cChkb3VibGU4IHgsIGludDggKmV4cCk7Citkb3VibGUxNiBfX292bGQgZnJleHAoZG91YmxlMTYgeCwgaW50MTYgKmV4cCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBmcmV4cChoYWxmIHgsIGludCAqZXhwKTsKK2hhbGYyIF9fb3ZsZCBmcmV4cChoYWxmMiB4LCBpbnQyICpleHApOworaGFsZjMgX19vdmxkIGZyZXhwKGhhbGYzIHgsIGludDMgKmV4cCk7CitoYWxmNCBfX292bGQgZnJleHAoaGFsZjQgeCwgaW50NCAqZXhwKTsKK2hhbGY4IF9fb3ZsZCBmcmV4cChoYWxmOCB4LCBpbnQ4ICpleHApOworaGFsZjE2IF9fb3ZsZCBmcmV4cChoYWxmMTYgeCwgaW50MTYgKmV4cCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorI2Vsc2UKK2Zsb2F0IF9fb3ZsZCBmcmV4cChmbG9hdCB4LCBfX2dsb2JhbCBpbnQgKmV4cCk7CitmbG9hdDIgX19vdmxkIGZyZXhwKGZsb2F0MiB4LCBfX2dsb2JhbCBpbnQyICpleHApOworZmxvYXQzIF9fb3ZsZCBmcmV4cChmbG9hdDMgeCwgX19nbG9iYWwgaW50MyAqZXhwKTsKK2Zsb2F0NCBfX292bGQgZnJleHAoZmxvYXQ0IHgsIF9fZ2xvYmFsIGludDQgKmV4cCk7CitmbG9hdDggX19vdmxkIGZyZXhwKGZsb2F0OCB4LCBfX2dsb2JhbCBpbnQ4ICpleHApOworZmxvYXQxNiBfX292bGQgZnJleHAoZmxvYXQxNiB4LCBfX2dsb2JhbCBpbnQxNiAqZXhwKTsKK2Zsb2F0IF9fb3ZsZCBmcmV4cChmbG9hdCB4LCBfX2xvY2FsIGludCAqZXhwKTsKK2Zsb2F0MiBfX292bGQgZnJleHAoZmxvYXQyIHgsIF9fbG9jYWwgaW50MiAqZXhwKTsKK2Zsb2F0MyBfX292bGQgZnJleHAoZmxvYXQzIHgsIF9fbG9jYWwgaW50MyAqZXhwKTsKK2Zsb2F0NCBfX292bGQgZnJleHAoZmxvYXQ0IHgsIF9fbG9jYWwgaW50NCAqZXhwKTsKK2Zsb2F0OCBfX292bGQgZnJleHAoZmxvYXQ4IHgsIF9fbG9jYWwgaW50OCAqZXhwKTsKK2Zsb2F0MTYgX19vdmxkIGZyZXhwKGZsb2F0MTYgeCwgX19sb2NhbCBpbnQxNiAqZXhwKTsKK2Zsb2F0IF9fb3ZsZCBmcmV4cChmbG9hdCB4LCBfX3ByaXZhdGUgaW50ICpleHApOworZmxvYXQyIF9fb3ZsZCBmcmV4cChmbG9hdDIgeCwgX19wcml2YXRlIGludDIgKmV4cCk7CitmbG9hdDMgX19vdmxkIGZyZXhwKGZsb2F0MyB4LCBfX3ByaXZhdGUgaW50MyAqZXhwKTsKK2Zsb2F0NCBfX292bGQgZnJleHAoZmxvYXQ0IHgsIF9fcHJpdmF0ZSBpbnQ0ICpleHApOworZmxvYXQ4IF9fb3ZsZCBmcmV4cChmbG9hdDggeCwgX19wcml2YXRlIGludDggKmV4cCk7CitmbG9hdDE2IF9fb3ZsZCBmcmV4cChmbG9hdDE2IHgsIF9fcHJpdmF0ZSBpbnQxNiAqZXhwKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBmcmV4cChkb3VibGUgeCwgX19nbG9iYWwgaW50ICpleHApOworZG91YmxlMiBfX292bGQgZnJleHAoZG91YmxlMiB4LCBfX2dsb2JhbCBpbnQyICpleHApOworZG91YmxlMyBfX292bGQgZnJleHAoZG91YmxlMyB4LCBfX2dsb2JhbCBpbnQzICpleHApOworZG91YmxlNCBfX292bGQgZnJleHAoZG91YmxlNCB4LCBfX2dsb2JhbCBpbnQ0ICpleHApOworZG91YmxlOCBfX292bGQgZnJleHAoZG91YmxlOCB4LCBfX2dsb2JhbCBpbnQ4ICpleHApOworZG91YmxlMTYgX19vdmxkIGZyZXhwKGRvdWJsZTE2IHgsIF9fZ2xvYmFsIGludDE2ICpleHApOworZG91YmxlIF9fb3ZsZCBmcmV4cChkb3VibGUgeCwgX19sb2NhbCBpbnQgKmV4cCk7Citkb3VibGUyIF9fb3ZsZCBmcmV4cChkb3VibGUyIHgsIF9fbG9jYWwgaW50MiAqZXhwKTsKK2RvdWJsZTMgX19vdmxkIGZyZXhwKGRvdWJsZTMgeCwgX19sb2NhbCBpbnQzICpleHApOworZG91YmxlNCBfX292bGQgZnJleHAoZG91YmxlNCB4LCBfX2xvY2FsIGludDQgKmV4cCk7Citkb3VibGU4IF9fb3ZsZCBmcmV4cChkb3VibGU4IHgsIF9fbG9jYWwgaW50OCAqZXhwKTsKK2RvdWJsZTE2IF9fb3ZsZCBmcmV4cChkb3VibGUxNiB4LCBfX2xvY2FsIGludDE2ICpleHApOworZG91YmxlIF9fb3ZsZCBmcmV4cChkb3VibGUgeCwgX19wcml2YXRlIGludCAqZXhwKTsKK2RvdWJsZTIgX19vdmxkIGZyZXhwKGRvdWJsZTIgeCwgX19wcml2YXRlIGludDIgKmV4cCk7Citkb3VibGUzIF9fb3ZsZCBmcmV4cChkb3VibGUzIHgsIF9fcHJpdmF0ZSBpbnQzICpleHApOworZG91YmxlNCBfX292bGQgZnJleHAoZG91YmxlNCB4LCBfX3ByaXZhdGUgaW50NCAqZXhwKTsKK2RvdWJsZTggX19vdmxkIGZyZXhwKGRvdWJsZTggeCwgX19wcml2YXRlIGludDggKmV4cCk7Citkb3VibGUxNiBfX292bGQgZnJleHAoZG91YmxlMTYgeCwgX19wcml2YXRlIGludDE2ICpleHApOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgZnJleHAoaGFsZiB4LCBfX2dsb2JhbCBpbnQgKmV4cCk7CitoYWxmMiBfX292bGQgZnJleHAoaGFsZjIgeCwgX19nbG9iYWwgaW50MiAqZXhwKTsKK2hhbGYzIF9fb3ZsZCBmcmV4cChoYWxmMyB4LCBfX2dsb2JhbCBpbnQzICpleHApOworaGFsZjQgX19vdmxkIGZyZXhwKGhhbGY0IHgsIF9fZ2xvYmFsIGludDQgKmV4cCk7CitoYWxmOCBfX292bGQgZnJleHAoaGFsZjggeCwgX19nbG9iYWwgaW50OCAqZXhwKTsKK2hhbGYxNiBfX292bGQgZnJleHAoaGFsZjE2IHgsIF9fZ2xvYmFsIGludDE2ICpleHApOworaGFsZiBfX292bGQgZnJleHAoaGFsZiB4LCBfX2xvY2FsIGludCAqZXhwKTsKK2hhbGYyIF9fb3ZsZCBmcmV4cChoYWxmMiB4LCBfX2xvY2FsIGludDIgKmV4cCk7CitoYWxmMyBfX292bGQgZnJleHAoaGFsZjMgeCwgX19sb2NhbCBpbnQzICpleHApOworaGFsZjQgX19vdmxkIGZyZXhwKGhhbGY0IHgsIF9fbG9jYWwgaW50NCAqZXhwKTsKK2hhbGY4IF9fb3ZsZCBmcmV4cChoYWxmOCB4LCBfX2xvY2FsIGludDggKmV4cCk7CitoYWxmMTYgX19vdmxkIGZyZXhwKGhhbGYxNiB4LCBfX2xvY2FsIGludDE2ICpleHApOworaGFsZiBfX292bGQgZnJleHAoaGFsZiB4LCBfX3ByaXZhdGUgaW50ICpleHApOworaGFsZjIgX19vdmxkIGZyZXhwKGhhbGYyIHgsIF9fcHJpdmF0ZSBpbnQyICpleHApOworaGFsZjMgX19vdmxkIGZyZXhwKGhhbGYzIHgsIF9fcHJpdmF0ZSBpbnQzICpleHApOworaGFsZjQgX19vdmxkIGZyZXhwKGhhbGY0IHgsIF9fcHJpdmF0ZSBpbnQ0ICpleHApOworaGFsZjggX19vdmxkIGZyZXhwKGhhbGY4IHgsIF9fcHJpdmF0ZSBpbnQ4ICpleHApOworaGFsZjE2IF9fb3ZsZCBmcmV4cChoYWxmMTYgeCwgX19wcml2YXRlIGludDE2ICpleHApOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogQ29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHNxdWFyZSByb290IG9mIHheMiArIHleMgorICogd2l0aG91dCB1bmR1ZSBvdmVyZmxvdyBvciB1bmRlcmZsb3cuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gaHlwb3QoZmxvYXQgeCwgZmxvYXQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBoeXBvdChmbG9hdDIgeCwgZmxvYXQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gaHlwb3QoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGh5cG90KGZsb2F0NCB4LCBmbG9hdDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBoeXBvdChmbG9hdDggeCwgZmxvYXQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGh5cG90KGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gaHlwb3QoZG91YmxlIHgsIGRvdWJsZSB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBoeXBvdChkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gaHlwb3QoZG91YmxlMyB4LCBkb3VibGUzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIGh5cG90KGRvdWJsZTQgeCwgZG91YmxlNCB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBoeXBvdChkb3VibGU4IHgsIGRvdWJsZTggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGh5cG90KGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGh5cG90KGhhbGYgeCwgaGFsZiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gaHlwb3QoaGFsZjIgeCwgaGFsZjIgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIGh5cG90KGhhbGYzIHgsIGhhbGYzIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiBoeXBvdChoYWxmNCB4LCBoYWxmNCB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gaHlwb3QoaGFsZjggeCwgaGFsZjggeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBoeXBvdChoYWxmMTYgeCwgaGFsZjE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm4gdGhlIGV4cG9uZW50IGFzIGFuIGludGVnZXIgdmFsdWUuCisgKi8KK2ludCBfX292bGQgX19jbmZuIGlsb2diKGZsb2F0IHgpOworaW50MiBfX292bGQgX19jbmZuIGlsb2diKGZsb2F0MiB4KTsKK2ludDMgX19vdmxkIF9fY25mbiBpbG9nYihmbG9hdDMgeCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaWxvZ2IoZmxvYXQ0IHgpOworaW50OCBfX292bGQgX19jbmZuIGlsb2diKGZsb2F0OCB4KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gaWxvZ2IoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAoraW50IF9fb3ZsZCBfX2NuZm4gaWxvZ2IoZG91YmxlIHgpOworaW50MiBfX292bGQgX19jbmZuIGlsb2diKGRvdWJsZTIgeCk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gaWxvZ2IoZG91YmxlMyB4KTsKK2ludDQgX19vdmxkIF9fY25mbiBpbG9nYihkb3VibGU0IHgpOworaW50OCBfX292bGQgX19jbmZuIGlsb2diKGRvdWJsZTggeCk7CitpbnQxNiBfX292bGQgX19jbmZuIGlsb2diKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraW50IF9fb3ZsZCBfX2NuZm4gaWxvZ2IoaGFsZiB4KTsKK2ludDIgX19vdmxkIF9fY25mbiBpbG9nYihoYWxmMiB4KTsKK2ludDMgX19vdmxkIF9fY25mbiBpbG9nYihoYWxmMyB4KTsKK2ludDQgX19vdmxkIF9fY25mbiBpbG9nYihoYWxmNCB4KTsKK2ludDggX19vdmxkIF9fY25mbiBpbG9nYihoYWxmOCB4KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gaWxvZ2IoaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBNdWx0aXBseSB4IGJ5IDIgdG8gdGhlIHBvd2VyIG4uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbGRleHAoZmxvYXQgeCwgaW50IG4pOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbGRleHAoZmxvYXQyIHgsIGludDIgbik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBsZGV4cChmbG9hdDMgeCwgaW50MyBuKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGxkZXhwKGZsb2F0NCB4LCBpbnQ0IG4pOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbGRleHAoZmxvYXQ4IHgsIGludDggbik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbGRleHAoZmxvYXQxNiB4LCBpbnQxNiBuKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGxkZXhwKGZsb2F0MiB4LCBpbnQgbik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBsZGV4cChmbG9hdDMgeCwgaW50IG4pOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbGRleHAoZmxvYXQ0IHgsIGludCBuKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGxkZXhwKGZsb2F0OCB4LCBpbnQgbik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbGRleHAoZmxvYXQxNiB4LCBpbnQgbik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGxkZXhwKGRvdWJsZSB4LCBpbnQgbik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbGRleHAoZG91YmxlMiB4LCBpbnQyIG4pOworZG91YmxlMyBfX292bGQgX19jbmZuIGxkZXhwKGRvdWJsZTMgeCwgaW50MyBuKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBsZGV4cChkb3VibGU0IHgsIGludDQgbik7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbGRleHAoZG91YmxlOCB4LCBpbnQ4IG4pOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBsZGV4cChkb3VibGUxNiB4LCBpbnQxNiBuKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBsZGV4cChkb3VibGUyIHgsIGludCBuKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBsZGV4cChkb3VibGUzIHgsIGludCBuKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBsZGV4cChkb3VibGU0IHgsIGludCBuKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBsZGV4cChkb3VibGU4IHgsIGludCBuKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbGRleHAoZG91YmxlMTYgeCwgaW50IG4pOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGxkZXhwKGhhbGYgeCwgaW50IG4pOworaGFsZjIgX19vdmxkIF9fY25mbiBsZGV4cChoYWxmMiB4LCBpbnQyIG4pOworaGFsZjMgX19vdmxkIF9fY25mbiBsZGV4cChoYWxmMyB4LCBpbnQzIG4pOworaGFsZjQgX19vdmxkIF9fY25mbiBsZGV4cChoYWxmNCB4LCBpbnQ0IG4pOworaGFsZjggX19vdmxkIF9fY25mbiBsZGV4cChoYWxmOCB4LCBpbnQ4IG4pOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbGRleHAoaGFsZjE2IHgsIGludDE2IG4pOworaGFsZjIgX19vdmxkIF9fY25mbiBsZGV4cChoYWxmMiB4LCBpbnQgbik7CitoYWxmMyBfX292bGQgX19jbmZuIGxkZXhwKGhhbGYzIHgsIGludCBuKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbGRleHAoaGFsZjQgeCwgaW50IG4pOworaGFsZjggX19vdmxkIF9fY25mbiBsZGV4cChoYWxmOCB4LCBpbnQgbik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBsZGV4cChoYWxmMTYgeCwgaW50IG4pOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBMb2cgZ2FtbWEgZnVuY3Rpb24uIFJldHVybnMgdGhlIG5hdHVyYWwKKyAqIGxvZ2FyaXRobSBvZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGdhbW1hCisgKiBmdW5jdGlvbi4gVGhlIHNpZ24gb2YgdGhlIGdhbW1hIGZ1bmN0aW9uIGlzCisgKiByZXR1cm5lZCBpbiB0aGUgc2lnbnAgYXJndW1lbnQgb2YgbGdhbW1hX3IuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGxnYW1tYShmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBsZ2FtbWEoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBsZ2FtbWEoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBsZ2FtbWEoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBsZ2FtbWEoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBsZ2FtbWEoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBsZ2FtbWEoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGxnYW1tYShoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiBsZ2FtbWEoaGFsZjIgeCk7CitoYWxmMyBfX292bGQgX19jbmZuIGxnYW1tYShoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiBsZ2FtbWEoaGFsZjggeCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBsZ2FtbWEoaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitmbG9hdCBfX292bGQgbGdhbW1hX3IoZmxvYXQgeCwgaW50ICpzaWducCk7CitmbG9hdDIgX19vdmxkIGxnYW1tYV9yKGZsb2F0MiB4LCBpbnQyICpzaWducCk7CitmbG9hdDMgX19vdmxkIGxnYW1tYV9yKGZsb2F0MyB4LCBpbnQzICpzaWducCk7CitmbG9hdDQgX19vdmxkIGxnYW1tYV9yKGZsb2F0NCB4LCBpbnQ0ICpzaWducCk7CitmbG9hdDggX19vdmxkIGxnYW1tYV9yKGZsb2F0OCB4LCBpbnQ4ICpzaWducCk7CitmbG9hdDE2IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDE2IHgsIGludDE2ICpzaWducCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgbGdhbW1hX3IoZG91YmxlIHgsIGludCAqc2lnbnApOworZG91YmxlMiBfX292bGQgbGdhbW1hX3IoZG91YmxlMiB4LCBpbnQyICpzaWducCk7Citkb3VibGUzIF9fb3ZsZCBsZ2FtbWFfcihkb3VibGUzIHgsIGludDMgKnNpZ25wKTsKK2RvdWJsZTQgX19vdmxkIGxnYW1tYV9yKGRvdWJsZTQgeCwgaW50NCAqc2lnbnApOworZG91YmxlOCBfX292bGQgbGdhbW1hX3IoZG91YmxlOCB4LCBpbnQ4ICpzaWducCk7Citkb3VibGUxNiBfX292bGQgbGdhbW1hX3IoZG91YmxlMTYgeCwgaW50MTYgKnNpZ25wKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIGxnYW1tYV9yKGhhbGYgeCwgaW50ICpzaWducCk7CitoYWxmMiBfX292bGQgbGdhbW1hX3IoaGFsZjIgeCwgaW50MiAqc2lnbnApOworaGFsZjMgX19vdmxkIGxnYW1tYV9yKGhhbGYzIHgsIGludDMgKnNpZ25wKTsKK2hhbGY0IF9fb3ZsZCBsZ2FtbWFfcihoYWxmNCB4LCBpbnQ0ICpzaWducCk7CitoYWxmOCBfX292bGQgbGdhbW1hX3IoaGFsZjggeCwgaW50OCAqc2lnbnApOworaGFsZjE2IF9fb3ZsZCBsZ2FtbWFfcihoYWxmMTYgeCwgaW50MTYgKnNpZ25wKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZWxzZQorZmxvYXQgX19vdmxkIGxnYW1tYV9yKGZsb2F0IHgsIF9fZ2xvYmFsIGludCAqc2lnbnApOworZmxvYXQyIF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDIgeCwgX19nbG9iYWwgaW50MiAqc2lnbnApOworZmxvYXQzIF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDMgeCwgX19nbG9iYWwgaW50MyAqc2lnbnApOworZmxvYXQ0IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDQgeCwgX19nbG9iYWwgaW50NCAqc2lnbnApOworZmxvYXQ4IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDggeCwgX19nbG9iYWwgaW50OCAqc2lnbnApOworZmxvYXQxNiBfX292bGQgbGdhbW1hX3IoZmxvYXQxNiB4LCBfX2dsb2JhbCBpbnQxNiAqc2lnbnApOworZmxvYXQgX19vdmxkIGxnYW1tYV9yKGZsb2F0IHgsIF9fbG9jYWwgaW50ICpzaWducCk7CitmbG9hdDIgX19vdmxkIGxnYW1tYV9yKGZsb2F0MiB4LCBfX2xvY2FsIGludDIgKnNpZ25wKTsKK2Zsb2F0MyBfX292bGQgbGdhbW1hX3IoZmxvYXQzIHgsIF9fbG9jYWwgaW50MyAqc2lnbnApOworZmxvYXQ0IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDQgeCwgX19sb2NhbCBpbnQ0ICpzaWducCk7CitmbG9hdDggX19vdmxkIGxnYW1tYV9yKGZsb2F0OCB4LCBfX2xvY2FsIGludDggKnNpZ25wKTsKK2Zsb2F0MTYgX19vdmxkIGxnYW1tYV9yKGZsb2F0MTYgeCwgX19sb2NhbCBpbnQxNiAqc2lnbnApOworZmxvYXQgX19vdmxkIGxnYW1tYV9yKGZsb2F0IHgsIF9fcHJpdmF0ZSBpbnQgKnNpZ25wKTsKK2Zsb2F0MiBfX292bGQgbGdhbW1hX3IoZmxvYXQyIHgsIF9fcHJpdmF0ZSBpbnQyICpzaWducCk7CitmbG9hdDMgX19vdmxkIGxnYW1tYV9yKGZsb2F0MyB4LCBfX3ByaXZhdGUgaW50MyAqc2lnbnApOworZmxvYXQ0IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDQgeCwgX19wcml2YXRlIGludDQgKnNpZ25wKTsKK2Zsb2F0OCBfX292bGQgbGdhbW1hX3IoZmxvYXQ4IHgsIF9fcHJpdmF0ZSBpbnQ4ICpzaWducCk7CitmbG9hdDE2IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDE2IHgsIF9fcHJpdmF0ZSBpbnQxNiAqc2lnbnApOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIGxnYW1tYV9yKGRvdWJsZSB4LCBfX2dsb2JhbCBpbnQgKnNpZ25wKTsKK2RvdWJsZTIgX19vdmxkIGxnYW1tYV9yKGRvdWJsZTIgeCwgX19nbG9iYWwgaW50MiAqc2lnbnApOworZG91YmxlMyBfX292bGQgbGdhbW1hX3IoZG91YmxlMyB4LCBfX2dsb2JhbCBpbnQzICpzaWducCk7Citkb3VibGU0IF9fb3ZsZCBsZ2FtbWFfcihkb3VibGU0IHgsIF9fZ2xvYmFsIGludDQgKnNpZ25wKTsKK2RvdWJsZTggX19vdmxkIGxnYW1tYV9yKGRvdWJsZTggeCwgX19nbG9iYWwgaW50OCAqc2lnbnApOworZG91YmxlMTYgX19vdmxkIGxnYW1tYV9yKGRvdWJsZTE2IHgsIF9fZ2xvYmFsIGludDE2ICpzaWducCk7Citkb3VibGUgX19vdmxkIGxnYW1tYV9yKGRvdWJsZSB4LCBfX2xvY2FsIGludCAqc2lnbnApOworZG91YmxlMiBfX292bGQgbGdhbW1hX3IoZG91YmxlMiB4LCBfX2xvY2FsIGludDIgKnNpZ25wKTsKK2RvdWJsZTMgX19vdmxkIGxnYW1tYV9yKGRvdWJsZTMgeCwgX19sb2NhbCBpbnQzICpzaWducCk7Citkb3VibGU0IF9fb3ZsZCBsZ2FtbWFfcihkb3VibGU0IHgsIF9fbG9jYWwgaW50NCAqc2lnbnApOworZG91YmxlOCBfX292bGQgbGdhbW1hX3IoZG91YmxlOCB4LCBfX2xvY2FsIGludDggKnNpZ25wKTsKK2RvdWJsZTE2IF9fb3ZsZCBsZ2FtbWFfcihkb3VibGUxNiB4LCBfX2xvY2FsIGludDE2ICpzaWducCk7Citkb3VibGUgX19vdmxkIGxnYW1tYV9yKGRvdWJsZSB4LCBfX3ByaXZhdGUgaW50ICpzaWducCk7Citkb3VibGUyIF9fb3ZsZCBsZ2FtbWFfcihkb3VibGUyIHgsIF9fcHJpdmF0ZSBpbnQyICpzaWducCk7Citkb3VibGUzIF9fb3ZsZCBsZ2FtbWFfcihkb3VibGUzIHgsIF9fcHJpdmF0ZSBpbnQzICpzaWducCk7Citkb3VibGU0IF9fb3ZsZCBsZ2FtbWFfcihkb3VibGU0IHgsIF9fcHJpdmF0ZSBpbnQ0ICpzaWducCk7Citkb3VibGU4IF9fb3ZsZCBsZ2FtbWFfcihkb3VibGU4IHgsIF9fcHJpdmF0ZSBpbnQ4ICpzaWducCk7Citkb3VibGUxNiBfX292bGQgbGdhbW1hX3IoZG91YmxlMTYgeCwgX19wcml2YXRlIGludDE2ICpzaWducCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBsZ2FtbWFfcihoYWxmIHgsIF9fZ2xvYmFsIGludCAqc2lnbnApOworaGFsZjIgX19vdmxkIGxnYW1tYV9yKGhhbGYyIHgsIF9fZ2xvYmFsIGludDIgKnNpZ25wKTsKK2hhbGYzIF9fb3ZsZCBsZ2FtbWFfcihoYWxmMyB4LCBfX2dsb2JhbCBpbnQzICpzaWducCk7CitoYWxmNCBfX292bGQgbGdhbW1hX3IoaGFsZjQgeCwgX19nbG9iYWwgaW50NCAqc2lnbnApOworaGFsZjggX19vdmxkIGxnYW1tYV9yKGhhbGY4IHgsIF9fZ2xvYmFsIGludDggKnNpZ25wKTsKK2hhbGYxNiBfX292bGQgbGdhbW1hX3IoaGFsZjE2IHgsIF9fZ2xvYmFsIGludDE2ICpzaWducCk7CitoYWxmIF9fb3ZsZCBsZ2FtbWFfcihoYWxmIHgsIF9fbG9jYWwgaW50ICpzaWducCk7CitoYWxmMiBfX292bGQgbGdhbW1hX3IoaGFsZjIgeCwgX19sb2NhbCBpbnQyICpzaWducCk7CitoYWxmMyBfX292bGQgbGdhbW1hX3IoaGFsZjMgeCwgX19sb2NhbCBpbnQzICpzaWducCk7CitoYWxmNCBfX292bGQgbGdhbW1hX3IoaGFsZjQgeCwgX19sb2NhbCBpbnQ0ICpzaWducCk7CitoYWxmOCBfX292bGQgbGdhbW1hX3IoaGFsZjggeCwgX19sb2NhbCBpbnQ4ICpzaWducCk7CitoYWxmMTYgX19vdmxkIGxnYW1tYV9yKGhhbGYxNiB4LCBfX2xvY2FsIGludDE2ICpzaWducCk7CitoYWxmIF9fb3ZsZCBsZ2FtbWFfcihoYWxmIHgsIF9fcHJpdmF0ZSBpbnQgKnNpZ25wKTsKK2hhbGYyIF9fb3ZsZCBsZ2FtbWFfcihoYWxmMiB4LCBfX3ByaXZhdGUgaW50MiAqc2lnbnApOworaGFsZjMgX19vdmxkIGxnYW1tYV9yKGhhbGYzIHgsIF9fcHJpdmF0ZSBpbnQzICpzaWducCk7CitoYWxmNCBfX292bGQgbGdhbW1hX3IoaGFsZjQgeCwgX19wcml2YXRlIGludDQgKnNpZ25wKTsKK2hhbGY4IF9fb3ZsZCBsZ2FtbWFfcihoYWxmOCB4LCBfX3ByaXZhdGUgaW50OCAqc2lnbnApOworaGFsZjE2IF9fb3ZsZCBsZ2FtbWFfcihoYWxmMTYgeCwgX19wcml2YXRlIGludDE2ICpzaWducCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBDb21wdXRlIG5hdHVyYWwgbG9nYXJpdGhtLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGxvZyhmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBsb2coZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGxvZyhmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbG9nKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBsb2coZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBsb2coZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGxvZyhkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGxvZyhkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBsb2coZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbG9nKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGxvZyhkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbG9nKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBsb2coaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGxvZyhoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIGxvZyhoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGxvZyhoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGxvZyhoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBsb2coaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBhIGJhc2UgMiBsb2dhcml0aG0uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbG9nMihmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBsb2cyKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBsb2cyKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBsb2cyKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBsb2cyKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbG9nMihmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbG9nMihkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGxvZzIoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbG9nMihkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBsb2cyKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGxvZzIoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGxvZzIoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGxvZzIoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGxvZzIoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBsb2cyKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbG9nMihoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGxvZzIoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbG9nMihoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIGEgYmFzZSAxMCBsb2dhcml0aG0uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbG9nMTAoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbG9nMTAoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGxvZzEwKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBsb2cxMChmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbG9nMTAoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBsb2cxMChmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbG9nMTAoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBsb2cxMChkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBsb2cxMChkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBsb2cxMChkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBsb2cxMChkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbG9nMTAoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGxvZzEwKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBsb2cxMChoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIGxvZzEwKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbG9nMTAoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBsb2cxMChoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBsb2cxMChoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIGEgYmFzZSBlIGxvZ2FyaXRobSBvZiAoMS4wICsgeCkuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbG9nMXAoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBsb2cxcChmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBsb2cxcChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBsb2cxcChmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBsb2cxcChmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbG9nMXAoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbG9nMXAoZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIGxvZzFwKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbG9nMXAoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBsb2cxcChkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGxvZzFwKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGxvZzFwKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGxvZzFwKGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIGxvZzFwKGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBsb2cxcChoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbG9nMXAoaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIGxvZzFwKGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbG9nMXAoaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIHRoZSBleHBvbmVudCBvZiB4LCB3aGljaCBpcyB0aGUgaW50ZWdyYWwKKyAqIHBhcnQgb2YgbG9nciB8IHggfC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBsb2diKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbG9nYihmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBsb2diKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGxvZ2IoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbG9nYihmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbG9nYihmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBsb2diKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBsb2diKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbG9nYihkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIGxvZ2IoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBsb2diKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGxvZ2IoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gbG9nYihoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiBsb2diKGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBsb2diKGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiBsb2diKGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiBsb2diKGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbG9nYihoYWxmMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIG1hZCBhcHByb3hpbWF0ZXMgYSAqIGIgKyBjLiBXaGV0aGVyIG9yIGhvdyB0aGUKKyAqIHByb2R1Y3Qgb2YgYSAqIGIgaXMgcm91bmRlZCBhbmQgaG93IHN1cGVybm9ybWFsIG9yCisgKiBzdWJub3JtYWwgaW50ZXJtZWRpYXRlIHByb2R1Y3RzIGFyZSBoYW5kbGVkIGlzIG5vdAorICogZGVmaW5lZC4gbWFkIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2hlcmUgc3BlZWQgaXMKKyAqIHByZWZlcnJlZCBvdmVyIGFjY3VyYWN5LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG1hZChmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBjKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG1hZChmbG9hdDIgYSwgZmxvYXQyIGIsIGZsb2F0MiBjKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG1hZChmbG9hdDMgYSwgZmxvYXQzIGIsIGZsb2F0MyBjKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG1hZChmbG9hdDQgYSwgZmxvYXQ0IGIsIGZsb2F0NCBjKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG1hZChmbG9hdDggYSwgZmxvYXQ4IGIsIGZsb2F0OCBjKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBtYWQoZmxvYXQxNiBhLCBmbG9hdDE2IGIsIGZsb2F0MTYgYyk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIG1hZChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBtYWQoZG91YmxlMiBhLCBkb3VibGUyIGIsIGRvdWJsZTIgYyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbWFkKGRvdWJsZTMgYSwgZG91YmxlMyBiLCBkb3VibGUzIGMpOworZG91YmxlNCBfX292bGQgX19jbmZuIG1hZChkb3VibGU0IGEsIGRvdWJsZTQgYiwgZG91YmxlNCBjKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBtYWQoZG91YmxlOCBhLCBkb3VibGU4IGIsIGRvdWJsZTggYyk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG1hZChkb3VibGUxNiBhLCBkb3VibGUxNiBiLCBkb3VibGUxNiBjKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBtYWQoaGFsZiBhLCBoYWxmIGIsIGhhbGYgYyk7CitoYWxmMiBfX292bGQgX19jbmZuIG1hZChoYWxmMiBhLCBoYWxmMiBiLCBoYWxmMiBjKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gbWFkKGhhbGYzIGEsIGhhbGYzIGIsIGhhbGYzIGMpOworaGFsZjQgX19vdmxkIF9fY25mbiBtYWQoaGFsZjQgYSwgaGFsZjQgYiwgaGFsZjQgYyk7CitoYWxmOCBfX292bGQgX19jbmZuIG1hZChoYWxmOCBhLCBoYWxmOCBiLCBoYWxmOCBjKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIG1hZChoYWxmMTYgYSwgaGFsZjE2IGIsIGhhbGYxNiBjKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyB4IGlmIHwgeCB8ID4gfCB5IHwsIHkgaWYgfCB5IHwgPiB8IHggfCwgb3RoZXJ3aXNlCisgKiBmbWF4KHgsIHkpLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG1heG1hZyhmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG1heG1hZyhmbG9hdDIgeCwgZmxvYXQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbWF4bWFnKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBtYXhtYWcoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG1heG1hZyhmbG9hdDggeCwgZmxvYXQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG1heG1hZyhmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIG1heG1hZyhkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIG1heG1hZyhkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbWF4bWFnKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBtYXhtYWcoZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIG1heG1hZyhkb3VibGU4IHgsIGRvdWJsZTggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG1heG1hZyhkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBtYXhtYWcoaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBtYXhtYWcoaGFsZjIgeCwgaGFsZjIgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIG1heG1hZyhoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbWF4bWFnKGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiBtYXhtYWcoaGFsZjggeCwgaGFsZjggeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBtYXhtYWcoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyB4IGlmIHwgeCB8IDwgfCB5IHwsIHkgaWYgfCB5IHwgPCB8IHggfCwgb3RoZXJ3aXNlCisgKiBmbWluKHgsIHkpLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG1pbm1hZyhmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG1pbm1hZyhmbG9hdDIgeCwgZmxvYXQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbWlubWFnKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBtaW5tYWcoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG1pbm1hZyhmbG9hdDggeCwgZmxvYXQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG1pbm1hZyhmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIG1pbm1hZyhkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIG1pbm1hZyhkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbWlubWFnKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBtaW5tYWcoZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIG1pbm1hZyhkb3VibGU4IHgsIGRvdWJsZTggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG1pbm1hZyhkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBtaW5tYWcoaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBtaW5tYWcoaGFsZjIgeCwgaGFsZjIgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIG1pbm1hZyhoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbWlubWFnKGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiBtaW5tYWcoaGFsZjggeCwgaGFsZjggeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBtaW5tYWcoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogRGVjb21wb3NlIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLiBUaGUgbW9kZgorICogZnVuY3Rpb24gYnJlYWtzIHRoZSBhcmd1bWVudCB4IGludG8gaW50ZWdyYWwgYW5kCisgKiBmcmFjdGlvbmFsIHBhcnRzLCBlYWNoIG9mIHdoaWNoIGhhcyB0aGUgc2FtZSBzaWduIGFzCisgKiB0aGUgYXJndW1lbnQuIEl0IHN0b3JlcyB0aGUgaW50ZWdyYWwgcGFydCBpbiB0aGUgb2JqZWN0CisgKiBwb2ludGVkIHRvIGJ5IGlwdHIuCisgKi8KKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorZmxvYXQgX19vdmxkIG1vZGYoZmxvYXQgeCwgZmxvYXQgKmlwdHIpOworZmxvYXQyIF9fb3ZsZCBtb2RmKGZsb2F0MiB4LCBmbG9hdDIgKmlwdHIpOworZmxvYXQzIF9fb3ZsZCBtb2RmKGZsb2F0MyB4LCBmbG9hdDMgKmlwdHIpOworZmxvYXQ0IF9fb3ZsZCBtb2RmKGZsb2F0NCB4LCBmbG9hdDQgKmlwdHIpOworZmxvYXQ4IF9fb3ZsZCBtb2RmKGZsb2F0OCB4LCBmbG9hdDggKmlwdHIpOworZmxvYXQxNiBfX292bGQgbW9kZihmbG9hdDE2IHgsIGZsb2F0MTYgKmlwdHIpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIG1vZGYoZG91YmxlIHgsIGRvdWJsZSAqaXB0cik7Citkb3VibGUyIF9fb3ZsZCBtb2RmKGRvdWJsZTIgeCwgZG91YmxlMiAqaXB0cik7Citkb3VibGUzIF9fb3ZsZCBtb2RmKGRvdWJsZTMgeCwgZG91YmxlMyAqaXB0cik7Citkb3VibGU0IF9fb3ZsZCBtb2RmKGRvdWJsZTQgeCwgZG91YmxlNCAqaXB0cik7Citkb3VibGU4IF9fb3ZsZCBtb2RmKGRvdWJsZTggeCwgZG91YmxlOCAqaXB0cik7Citkb3VibGUxNiBfX292bGQgbW9kZihkb3VibGUxNiB4LCBkb3VibGUxNiAqaXB0cik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBtb2RmKGhhbGYgeCwgaGFsZiAqaXB0cik7CitoYWxmMiBfX292bGQgbW9kZihoYWxmMiB4LCBoYWxmMiAqaXB0cik7CitoYWxmMyBfX292bGQgbW9kZihoYWxmMyB4LCBoYWxmMyAqaXB0cik7CitoYWxmNCBfX292bGQgbW9kZihoYWxmNCB4LCBoYWxmNCAqaXB0cik7CitoYWxmOCBfX292bGQgbW9kZihoYWxmOCB4LCBoYWxmOCAqaXB0cik7CitoYWxmMTYgX19vdmxkIG1vZGYoaGFsZjE2IHgsIGhhbGYxNiAqaXB0cik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorI2Vsc2UKK2Zsb2F0IF9fb3ZsZCBtb2RmKGZsb2F0IHgsIF9fZ2xvYmFsIGZsb2F0ICppcHRyKTsKK2Zsb2F0MiBfX292bGQgbW9kZihmbG9hdDIgeCwgX19nbG9iYWwgZmxvYXQyICppcHRyKTsKK2Zsb2F0MyBfX292bGQgbW9kZihmbG9hdDMgeCwgX19nbG9iYWwgZmxvYXQzICppcHRyKTsKK2Zsb2F0NCBfX292bGQgbW9kZihmbG9hdDQgeCwgX19nbG9iYWwgZmxvYXQ0ICppcHRyKTsKK2Zsb2F0OCBfX292bGQgbW9kZihmbG9hdDggeCwgX19nbG9iYWwgZmxvYXQ4ICppcHRyKTsKK2Zsb2F0MTYgX19vdmxkIG1vZGYoZmxvYXQxNiB4LCBfX2dsb2JhbCBmbG9hdDE2ICppcHRyKTsKK2Zsb2F0IF9fb3ZsZCBtb2RmKGZsb2F0IHgsIF9fbG9jYWwgZmxvYXQgKmlwdHIpOworZmxvYXQyIF9fb3ZsZCBtb2RmKGZsb2F0MiB4LCBfX2xvY2FsIGZsb2F0MiAqaXB0cik7CitmbG9hdDMgX19vdmxkIG1vZGYoZmxvYXQzIHgsIF9fbG9jYWwgZmxvYXQzICppcHRyKTsKK2Zsb2F0NCBfX292bGQgbW9kZihmbG9hdDQgeCwgX19sb2NhbCBmbG9hdDQgKmlwdHIpOworZmxvYXQ4IF9fb3ZsZCBtb2RmKGZsb2F0OCB4LCBfX2xvY2FsIGZsb2F0OCAqaXB0cik7CitmbG9hdDE2IF9fb3ZsZCBtb2RmKGZsb2F0MTYgeCwgX19sb2NhbCBmbG9hdDE2ICppcHRyKTsKK2Zsb2F0IF9fb3ZsZCBtb2RmKGZsb2F0IHgsIF9fcHJpdmF0ZSBmbG9hdCAqaXB0cik7CitmbG9hdDIgX19vdmxkIG1vZGYoZmxvYXQyIHgsIF9fcHJpdmF0ZSBmbG9hdDIgKmlwdHIpOworZmxvYXQzIF9fb3ZsZCBtb2RmKGZsb2F0MyB4LCBfX3ByaXZhdGUgZmxvYXQzICppcHRyKTsKK2Zsb2F0NCBfX292bGQgbW9kZihmbG9hdDQgeCwgX19wcml2YXRlIGZsb2F0NCAqaXB0cik7CitmbG9hdDggX19vdmxkIG1vZGYoZmxvYXQ4IHgsIF9fcHJpdmF0ZSBmbG9hdDggKmlwdHIpOworZmxvYXQxNiBfX292bGQgbW9kZihmbG9hdDE2IHgsIF9fcHJpdmF0ZSBmbG9hdDE2ICppcHRyKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBtb2RmKGRvdWJsZSB4LCBfX2dsb2JhbCBkb3VibGUgKmlwdHIpOworZG91YmxlMiBfX292bGQgbW9kZihkb3VibGUyIHgsIF9fZ2xvYmFsIGRvdWJsZTIgKmlwdHIpOworZG91YmxlMyBfX292bGQgbW9kZihkb3VibGUzIHgsIF9fZ2xvYmFsIGRvdWJsZTMgKmlwdHIpOworZG91YmxlNCBfX292bGQgbW9kZihkb3VibGU0IHgsIF9fZ2xvYmFsIGRvdWJsZTQgKmlwdHIpOworZG91YmxlOCBfX292bGQgbW9kZihkb3VibGU4IHgsIF9fZ2xvYmFsIGRvdWJsZTggKmlwdHIpOworZG91YmxlMTYgX19vdmxkIG1vZGYoZG91YmxlMTYgeCwgX19nbG9iYWwgZG91YmxlMTYgKmlwdHIpOworZG91YmxlIF9fb3ZsZCBtb2RmKGRvdWJsZSB4LCBfX2xvY2FsIGRvdWJsZSAqaXB0cik7Citkb3VibGUyIF9fb3ZsZCBtb2RmKGRvdWJsZTIgeCwgX19sb2NhbCBkb3VibGUyICppcHRyKTsKK2RvdWJsZTMgX19vdmxkIG1vZGYoZG91YmxlMyB4LCBfX2xvY2FsIGRvdWJsZTMgKmlwdHIpOworZG91YmxlNCBfX292bGQgbW9kZihkb3VibGU0IHgsIF9fbG9jYWwgZG91YmxlNCAqaXB0cik7Citkb3VibGU4IF9fb3ZsZCBtb2RmKGRvdWJsZTggeCwgX19sb2NhbCBkb3VibGU4ICppcHRyKTsKK2RvdWJsZTE2IF9fb3ZsZCBtb2RmKGRvdWJsZTE2IHgsIF9fbG9jYWwgZG91YmxlMTYgKmlwdHIpOworZG91YmxlIF9fb3ZsZCBtb2RmKGRvdWJsZSB4LCBfX3ByaXZhdGUgZG91YmxlICppcHRyKTsKK2RvdWJsZTIgX19vdmxkIG1vZGYoZG91YmxlMiB4LCBfX3ByaXZhdGUgZG91YmxlMiAqaXB0cik7Citkb3VibGUzIF9fb3ZsZCBtb2RmKGRvdWJsZTMgeCwgX19wcml2YXRlIGRvdWJsZTMgKmlwdHIpOworZG91YmxlNCBfX292bGQgbW9kZihkb3VibGU0IHgsIF9fcHJpdmF0ZSBkb3VibGU0ICppcHRyKTsKK2RvdWJsZTggX19vdmxkIG1vZGYoZG91YmxlOCB4LCBfX3ByaXZhdGUgZG91YmxlOCAqaXB0cik7Citkb3VibGUxNiBfX292bGQgbW9kZihkb3VibGUxNiB4LCBfX3ByaXZhdGUgZG91YmxlMTYgKmlwdHIpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgbW9kZihoYWxmIHgsIF9fZ2xvYmFsIGhhbGYgKmlwdHIpOworaGFsZjIgX19vdmxkIG1vZGYoaGFsZjIgeCwgX19nbG9iYWwgaGFsZjIgKmlwdHIpOworaGFsZjMgX19vdmxkIG1vZGYoaGFsZjMgeCwgX19nbG9iYWwgaGFsZjMgKmlwdHIpOworaGFsZjQgX19vdmxkIG1vZGYoaGFsZjQgeCwgX19nbG9iYWwgaGFsZjQgKmlwdHIpOworaGFsZjggX19vdmxkIG1vZGYoaGFsZjggeCwgX19nbG9iYWwgaGFsZjggKmlwdHIpOworaGFsZjE2IF9fb3ZsZCBtb2RmKGhhbGYxNiB4LCBfX2dsb2JhbCBoYWxmMTYgKmlwdHIpOworaGFsZiBfX292bGQgbW9kZihoYWxmIHgsIF9fbG9jYWwgaGFsZiAqaXB0cik7CitoYWxmMiBfX292bGQgbW9kZihoYWxmMiB4LCBfX2xvY2FsIGhhbGYyICppcHRyKTsKK2hhbGYzIF9fb3ZsZCBtb2RmKGhhbGYzIHgsIF9fbG9jYWwgaGFsZjMgKmlwdHIpOworaGFsZjQgX19vdmxkIG1vZGYoaGFsZjQgeCwgX19sb2NhbCBoYWxmNCAqaXB0cik7CitoYWxmOCBfX292bGQgbW9kZihoYWxmOCB4LCBfX2xvY2FsIGhhbGY4ICppcHRyKTsKK2hhbGYxNiBfX292bGQgbW9kZihoYWxmMTYgeCwgX19sb2NhbCBoYWxmMTYgKmlwdHIpOworaGFsZiBfX292bGQgbW9kZihoYWxmIHgsIF9fcHJpdmF0ZSBoYWxmICppcHRyKTsKK2hhbGYyIF9fb3ZsZCBtb2RmKGhhbGYyIHgsIF9fcHJpdmF0ZSBoYWxmMiAqaXB0cik7CitoYWxmMyBfX292bGQgbW9kZihoYWxmMyB4LCBfX3ByaXZhdGUgaGFsZjMgKmlwdHIpOworaGFsZjQgX19vdmxkIG1vZGYoaGFsZjQgeCwgX19wcml2YXRlIGhhbGY0ICppcHRyKTsKK2hhbGY4IF9fb3ZsZCBtb2RmKGhhbGY4IHgsIF9fcHJpdmF0ZSBoYWxmOCAqaXB0cik7CitoYWxmMTYgX19vdmxkIG1vZGYoaGFsZjE2IHgsIF9fcHJpdmF0ZSBoYWxmMTYgKmlwdHIpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogUmV0dXJucyBhIHF1aWV0IE5hTi4gVGhlIG5hbmNvZGUgbWF5IGJlIHBsYWNlZAorICogaW4gdGhlIHNpZ25pZmljYW5kIG9mIHRoZSByZXN1bHRpbmcgTmFOLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG5hbih1aW50IG5hbmNvZGUpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmFuKHVpbnQyIG5hbmNvZGUpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbmFuKHVpbnQzIG5hbmNvZGUpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbmFuKHVpbnQ0IG5hbmNvZGUpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmFuKHVpbnQ4IG5hbmNvZGUpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG5hbih1aW50MTYgbmFuY29kZSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIG5hbih1bG9uZyBuYW5jb2RlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBuYW4odWxvbmcyIG5hbmNvZGUpOworZG91YmxlMyBfX292bGQgX19jbmZuIG5hbih1bG9uZzMgbmFuY29kZSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbmFuKHVsb25nNCBuYW5jb2RlKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBuYW4odWxvbmc4IG5hbmNvZGUpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBuYW4odWxvbmcxNiBuYW5jb2RlKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBuYW4odXNob3J0IG5hbmNvZGUpOworaGFsZjIgX19vdmxkIF9fY25mbiBuYW4odXNob3J0MiBuYW5jb2RlKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gbmFuKHVzaG9ydDMgbmFuY29kZSk7CitoYWxmNCBfX292bGQgX19jbmZuIG5hbih1c2hvcnQ0IG5hbmNvZGUpOworaGFsZjggX19vdmxkIF9fY25mbiBuYW4odXNob3J0OCBuYW5jb2RlKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIG5hbih1c2hvcnQxNiBuYW5jb2RlKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZXMgdGhlIG5leHQgcmVwcmVzZW50YWJsZSBzaW5nbGUtcHJlY2lzaW9uCisgKiBmbG9hdGluZy1wb2ludCB2YWx1ZSBmb2xsb3dpbmcgeCBpbiB0aGUgZGlyZWN0aW9uIG9mCisgKiB5LiBUaHVzLCBpZiB5IGlzIGxlc3MgdGhhbiB4LCBuZXh0YWZ0ZXIoKSByZXR1cm5zIHRoZQorICogbGFyZ2VzdCByZXByZXNlbnRhYmxlIGZsb2F0aW5nLXBvaW50IG51bWJlciBsZXNzCisgKiB0aGFuIHguCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuZXh0YWZ0ZXIoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG5leHRhZnRlcihmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGRvdWJsZSB4LCBkb3VibGUgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBuZXh0YWZ0ZXIoZG91YmxlMyB4LCBkb3VibGUzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIG5leHRhZnRlcihkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIG5leHRhZnRlcihoYWxmIHgsIGhhbGYgeSk7CitoYWxmMiBfX292bGQgX19jbmZuIG5leHRhZnRlcihoYWxmMiB4LCBoYWxmMiB5KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGhhbGYzIHgsIGhhbGYzIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiBuZXh0YWZ0ZXIoaGFsZjQgeCwgaGFsZjQgeSk7CitoYWxmOCBfX292bGQgX19jbmZuIG5leHRhZnRlcihoYWxmOCB4LCBoYWxmOCB5KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIG5leHRhZnRlcihoYWxmMTYgeCwgaGFsZjE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIHggdG8gdGhlIHBvd2VyIHkuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gcG93KGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gcG93KGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBwb3coZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHBvdyhmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gcG93KGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gcG93KGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gcG93KGRvdWJsZSB4LCBkb3VibGUgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gcG93KGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBwb3coZG91YmxlMyB4LCBkb3VibGUzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIHBvdyhkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gcG93KGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gcG93KGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHBvdyhoYWxmIHgsIGhhbGYgeSk7CitoYWxmMiBfX292bGQgX19jbmZuIHBvdyhoYWxmMiB4LCBoYWxmMiB5KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gcG93KGhhbGYzIHgsIGhhbGYzIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiBwb3coaGFsZjQgeCwgaGFsZjQgeSk7CitoYWxmOCBfX292bGQgX19jbmZuIHBvdyhoYWxmOCB4LCBoYWxmOCB5KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHBvdyhoYWxmMTYgeCwgaGFsZjE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIHggdG8gdGhlIHBvd2VyIHksIHdoZXJlIHkgaXMgYW4gaW50ZWdlci4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBwb3duKGZsb2F0IHgsIGludCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHBvd24oZmxvYXQyIHgsIGludDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBwb3duKGZsb2F0MyB4LCBpbnQzIHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gcG93bihmbG9hdDQgeCwgaW50NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHBvd24oZmxvYXQ4IHgsIGludDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gcG93bihmbG9hdDE2IHgsIGludDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBwb3duKGRvdWJsZSB4LCBpbnQgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gcG93bihkb3VibGUyIHgsIGludDIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gcG93bihkb3VibGUzIHgsIGludDMgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gcG93bihkb3VibGU0IHgsIGludDQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gcG93bihkb3VibGU4IHgsIGludDggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHBvd24oZG91YmxlMTYgeCwgaW50MTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gcG93bihoYWxmIHgsIGludCB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gcG93bihoYWxmMiB4LCBpbnQyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBwb3duKGhhbGYzIHgsIGludDMgeSk7CitoYWxmNCBfX292bGQgX19jbmZuIHBvd24oaGFsZjQgeCwgaW50NCB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gcG93bihoYWxmOCB4LCBpbnQ4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gcG93bihoYWxmMTYgeCwgaW50MTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgeCB0byB0aGUgcG93ZXIgeSwgd2hlcmUgeCBpcyA+PSAwLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHBvd3IoZmxvYXQgeCwgZmxvYXQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBwb3dyKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBwb3dyKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBwb3dyKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBwb3dyKGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gcG93cihmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHBvd3IoZG91YmxlIHgsIGRvdWJsZSB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBwb3dyKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBwb3dyKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBwb3dyKGRvdWJsZTQgeCwgZG91YmxlNCB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBwb3dyKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gcG93cihkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBwb3dyKGhhbGYgeCwgaGFsZiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gcG93cihoYWxmMiB4LCBoYWxmMiB5KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gcG93cihoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gcG93cihoYWxmNCB4LCBoYWxmNCB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gcG93cihoYWxmOCB4LCBoYWxmOCB5KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHBvd3IoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSB0aGUgdmFsdWUgciBzdWNoIHRoYXQgciA9IHggLSBuKnksIHdoZXJlIG4KKyAqIGlzIHRoZSBpbnRlZ2VyIG5lYXJlc3QgdGhlIGV4YWN0IHZhbHVlIG9mIHgveS4gSWYgdGhlcmUKKyAqIGFyZSB0d28gaW50ZWdlcnMgY2xvc2VzdCB0byB4L3ksIG4gc2hhbGwgYmUgdGhlIGV2ZW4KKyAqIG9uZS4gSWYgciBpcyB6ZXJvLCBpdCBpcyBnaXZlbiB0aGUgc2FtZSBzaWduIGFzIHguCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiByZW1haW5kZXIoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHJlbWFpbmRlcihmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGRvdWJsZSB4LCBkb3VibGUgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiByZW1haW5kZXIoZG91YmxlMyB4LCBkb3VibGUzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIHJlbWFpbmRlcihkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHJlbWFpbmRlcihoYWxmIHgsIGhhbGYgeSk7CitoYWxmMiBfX292bGQgX19jbmZuIHJlbWFpbmRlcihoYWxmMiB4LCBoYWxmMiB5KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGhhbGYzIHgsIGhhbGYzIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiByZW1haW5kZXIoaGFsZjQgeCwgaGFsZjQgeSk7CitoYWxmOCBfX292bGQgX19jbmZuIHJlbWFpbmRlcihoYWxmOCB4LCBoYWxmOCB5KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHJlbWFpbmRlcihoYWxmMTYgeCwgaGFsZjE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBUaGUgcmVtcXVvIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSB2YWx1ZSByIHN1Y2gKKyAqIHRoYXQgciA9IHggLSBuKnksIHdoZXJlIG4gaXMgdGhlIGludGVnZXIgbmVhcmVzdCB0aGUKKyAqIGV4YWN0IHZhbHVlIG9mIHgveS4gSWYgdGhlcmUgYXJlIHR3byBpbnRlZ2VycyBjbG9zZXN0CisgKiB0byB4L3ksIG4gc2hhbGwgYmUgdGhlIGV2ZW4gb25lLiBJZiByIGlzIHplcm8sIGl0IGlzCisgKiBnaXZlbiB0aGUgc2FtZSBzaWduIGFzIHguIFRoaXMgaXMgdGhlIHNhbWUgdmFsdWUKKyAqIHRoYXQgaXMgcmV0dXJuZWQgYnkgdGhlIHJlbWFpbmRlciBmdW5jdGlvbi4KKyAqIHJlbXF1byBhbHNvIGNhbGN1bGF0ZXMgdGhlIGxvd2VyIHNldmVuIGJpdHMgb2YgdGhlCisgKiBpbnRlZ3JhbCBxdW90aWVudCB4L3ksIGFuZCBnaXZlcyB0aGF0IHZhbHVlIHRoZSBzYW1lCisgKiBzaWduIGFzIHgveS4gSXQgc3RvcmVzIHRoaXMgc2lnbmVkIHZhbHVlIGluIHRoZSBvYmplY3QKKyAqIHBvaW50ZWQgdG8gYnkgcXVvLgorICovCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2Zsb2F0IF9fb3ZsZCByZW1xdW8oZmxvYXQgeCwgZmxvYXQgeSwgaW50ICpxdW8pOworZmxvYXQyIF9fb3ZsZCByZW1xdW8oZmxvYXQyIHgsIGZsb2F0MiB5LCBpbnQyICpxdW8pOworZmxvYXQzIF9fb3ZsZCByZW1xdW8oZmxvYXQzIHgsIGZsb2F0MyB5LCBpbnQzICpxdW8pOworZmxvYXQ0IF9fb3ZsZCByZW1xdW8oZmxvYXQ0IHgsIGZsb2F0NCB5LCBpbnQ0ICpxdW8pOworZmxvYXQ4IF9fb3ZsZCByZW1xdW8oZmxvYXQ4IHgsIGZsb2F0OCB5LCBpbnQ4ICpxdW8pOworZmxvYXQxNiBfX292bGQgcmVtcXVvKGZsb2F0MTYgeCwgZmxvYXQxNiB5LCBpbnQxNiAqcXVvKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCByZW1xdW8oZG91YmxlIHgsIGRvdWJsZSB5LCBpbnQgKnF1byk7Citkb3VibGUyIF9fb3ZsZCByZW1xdW8oZG91YmxlMiB4LCBkb3VibGUyIHksIGludDIgKnF1byk7Citkb3VibGUzIF9fb3ZsZCByZW1xdW8oZG91YmxlMyB4LCBkb3VibGUzIHksIGludDMgKnF1byk7Citkb3VibGU0IF9fb3ZsZCByZW1xdW8oZG91YmxlNCB4LCBkb3VibGU0IHksIGludDQgKnF1byk7Citkb3VibGU4IF9fb3ZsZCByZW1xdW8oZG91YmxlOCB4LCBkb3VibGU4IHksIGludDggKnF1byk7Citkb3VibGUxNiBfX292bGQgcmVtcXVvKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHksIGludDE2ICpxdW8pOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgcmVtcXVvKGhhbGYgeCwgaGFsZiB5LCBpbnQgKnF1byk7CitoYWxmMiBfX292bGQgcmVtcXVvKGhhbGYyIHgsIGhhbGYyIHksIGludDIgKnF1byk7CitoYWxmMyBfX292bGQgcmVtcXVvKGhhbGYzIHgsIGhhbGYzIHksIGludDMgKnF1byk7CitoYWxmNCBfX292bGQgcmVtcXVvKGhhbGY0IHgsIGhhbGY0IHksIGludDQgKnF1byk7CitoYWxmOCBfX292bGQgcmVtcXVvKGhhbGY4IHgsIGhhbGY4IHksIGludDggKnF1byk7CitoYWxmMTYgX19vdmxkIHJlbXF1byhoYWxmMTYgeCwgaGFsZjE2IHksIGludDE2ICpxdW8pOworCisjZW5kaWYgLy9jbF9raHJfZnAxNgorI2Vsc2UKK2Zsb2F0IF9fb3ZsZCByZW1xdW8oZmxvYXQgeCwgZmxvYXQgeSwgX19nbG9iYWwgaW50ICpxdW8pOworZmxvYXQyIF9fb3ZsZCByZW1xdW8oZmxvYXQyIHgsIGZsb2F0MiB5LCBfX2dsb2JhbCBpbnQyICpxdW8pOworZmxvYXQzIF9fb3ZsZCByZW1xdW8oZmxvYXQzIHgsIGZsb2F0MyB5LCBfX2dsb2JhbCBpbnQzICpxdW8pOworZmxvYXQ0IF9fb3ZsZCByZW1xdW8oZmxvYXQ0IHgsIGZsb2F0NCB5LCBfX2dsb2JhbCBpbnQ0ICpxdW8pOworZmxvYXQ4IF9fb3ZsZCByZW1xdW8oZmxvYXQ4IHgsIGZsb2F0OCB5LCBfX2dsb2JhbCBpbnQ4ICpxdW8pOworZmxvYXQxNiBfX292bGQgcmVtcXVvKGZsb2F0MTYgeCwgZmxvYXQxNiB5LCBfX2dsb2JhbCBpbnQxNiAqcXVvKTsKK2Zsb2F0IF9fb3ZsZCByZW1xdW8oZmxvYXQgeCwgZmxvYXQgeSwgX19sb2NhbCBpbnQgKnF1byk7CitmbG9hdDIgX19vdmxkIHJlbXF1byhmbG9hdDIgeCwgZmxvYXQyIHksIF9fbG9jYWwgaW50MiAqcXVvKTsKK2Zsb2F0MyBfX292bGQgcmVtcXVvKGZsb2F0MyB4LCBmbG9hdDMgeSwgX19sb2NhbCBpbnQzICpxdW8pOworZmxvYXQ0IF9fb3ZsZCByZW1xdW8oZmxvYXQ0IHgsIGZsb2F0NCB5LCBfX2xvY2FsIGludDQgKnF1byk7CitmbG9hdDggX19vdmxkIHJlbXF1byhmbG9hdDggeCwgZmxvYXQ4IHksIF9fbG9jYWwgaW50OCAqcXVvKTsKK2Zsb2F0MTYgX19vdmxkIHJlbXF1byhmbG9hdDE2IHgsIGZsb2F0MTYgeSwgX19sb2NhbCBpbnQxNiAqcXVvKTsKK2Zsb2F0IF9fb3ZsZCByZW1xdW8oZmxvYXQgeCwgZmxvYXQgeSwgX19wcml2YXRlIGludCAqcXVvKTsKK2Zsb2F0MiBfX292bGQgcmVtcXVvKGZsb2F0MiB4LCBmbG9hdDIgeSwgX19wcml2YXRlIGludDIgKnF1byk7CitmbG9hdDMgX19vdmxkIHJlbXF1byhmbG9hdDMgeCwgZmxvYXQzIHksIF9fcHJpdmF0ZSBpbnQzICpxdW8pOworZmxvYXQ0IF9fb3ZsZCByZW1xdW8oZmxvYXQ0IHgsIGZsb2F0NCB5LCBfX3ByaXZhdGUgaW50NCAqcXVvKTsKK2Zsb2F0OCBfX292bGQgcmVtcXVvKGZsb2F0OCB4LCBmbG9hdDggeSwgX19wcml2YXRlIGludDggKnF1byk7CitmbG9hdDE2IF9fb3ZsZCByZW1xdW8oZmxvYXQxNiB4LCBmbG9hdDE2IHksIF9fcHJpdmF0ZSBpbnQxNiAqcXVvKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCByZW1xdW8oZG91YmxlIHgsIGRvdWJsZSB5LCBfX2dsb2JhbCBpbnQgKnF1byk7Citkb3VibGUyIF9fb3ZsZCByZW1xdW8oZG91YmxlMiB4LCBkb3VibGUyIHksIF9fZ2xvYmFsIGludDIgKnF1byk7Citkb3VibGUzIF9fb3ZsZCByZW1xdW8oZG91YmxlMyB4LCBkb3VibGUzIHksIF9fZ2xvYmFsIGludDMgKnF1byk7Citkb3VibGU0IF9fb3ZsZCByZW1xdW8oZG91YmxlNCB4LCBkb3VibGU0IHksIF9fZ2xvYmFsIGludDQgKnF1byk7Citkb3VibGU4IF9fb3ZsZCByZW1xdW8oZG91YmxlOCB4LCBkb3VibGU4IHksIF9fZ2xvYmFsIGludDggKnF1byk7Citkb3VibGUxNiBfX292bGQgcmVtcXVvKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHksIF9fZ2xvYmFsIGludDE2ICpxdW8pOworZG91YmxlIF9fb3ZsZCByZW1xdW8oZG91YmxlIHgsIGRvdWJsZSB5LCBfX2xvY2FsIGludCAqcXVvKTsKK2RvdWJsZTIgX19vdmxkIHJlbXF1byhkb3VibGUyIHgsIGRvdWJsZTIgeSwgX19sb2NhbCBpbnQyICpxdW8pOworZG91YmxlMyBfX292bGQgcmVtcXVvKGRvdWJsZTMgeCwgZG91YmxlMyB5LCBfX2xvY2FsIGludDMgKnF1byk7Citkb3VibGU0IF9fb3ZsZCByZW1xdW8oZG91YmxlNCB4LCBkb3VibGU0IHksIF9fbG9jYWwgaW50NCAqcXVvKTsKK2RvdWJsZTggX19vdmxkIHJlbXF1byhkb3VibGU4IHgsIGRvdWJsZTggeSwgX19sb2NhbCBpbnQ4ICpxdW8pOworZG91YmxlMTYgX19vdmxkIHJlbXF1byhkb3VibGUxNiB4LCBkb3VibGUxNiB5LCBfX2xvY2FsIGludDE2ICpxdW8pOworZG91YmxlIF9fb3ZsZCByZW1xdW8oZG91YmxlIHgsIGRvdWJsZSB5LCBfX3ByaXZhdGUgaW50ICpxdW8pOworZG91YmxlMiBfX292bGQgcmVtcXVvKGRvdWJsZTIgeCwgZG91YmxlMiB5LCBfX3ByaXZhdGUgaW50MiAqcXVvKTsKK2RvdWJsZTMgX19vdmxkIHJlbXF1byhkb3VibGUzIHgsIGRvdWJsZTMgeSwgX19wcml2YXRlIGludDMgKnF1byk7Citkb3VibGU0IF9fb3ZsZCByZW1xdW8oZG91YmxlNCB4LCBkb3VibGU0IHksIF9fcHJpdmF0ZSBpbnQ0ICpxdW8pOworZG91YmxlOCBfX292bGQgcmVtcXVvKGRvdWJsZTggeCwgZG91YmxlOCB5LCBfX3ByaXZhdGUgaW50OCAqcXVvKTsKK2RvdWJsZTE2IF9fb3ZsZCByZW1xdW8oZG91YmxlMTYgeCwgZG91YmxlMTYgeSwgX19wcml2YXRlIGludDE2ICpxdW8pOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgcmVtcXVvKGhhbGYgeCwgaGFsZiB5LCBfX2dsb2JhbCBpbnQgKnF1byk7CitoYWxmMiBfX292bGQgcmVtcXVvKGhhbGYyIHgsIGhhbGYyIHksIF9fZ2xvYmFsIGludDIgKnF1byk7CitoYWxmMyBfX292bGQgcmVtcXVvKGhhbGYzIHgsIGhhbGYzIHksIF9fZ2xvYmFsIGludDMgKnF1byk7CitoYWxmNCBfX292bGQgcmVtcXVvKGhhbGY0IHgsIGhhbGY0IHksIF9fZ2xvYmFsIGludDQgKnF1byk7CitoYWxmOCBfX292bGQgcmVtcXVvKGhhbGY4IHgsIGhhbGY4IHksIF9fZ2xvYmFsIGludDggKnF1byk7CitoYWxmMTYgX19vdmxkIHJlbXF1byhoYWxmMTYgeCwgaGFsZjE2IHksIF9fZ2xvYmFsIGludDE2ICpxdW8pOworaGFsZiBfX292bGQgcmVtcXVvKGhhbGYgeCwgaGFsZiB5LCBfX2xvY2FsIGludCAqcXVvKTsKK2hhbGYyIF9fb3ZsZCByZW1xdW8oaGFsZjIgeCwgaGFsZjIgeSwgX19sb2NhbCBpbnQyICpxdW8pOworaGFsZjMgX19vdmxkIHJlbXF1byhoYWxmMyB4LCBoYWxmMyB5LCBfX2xvY2FsIGludDMgKnF1byk7CitoYWxmNCBfX292bGQgcmVtcXVvKGhhbGY0IHgsIGhhbGY0IHksIF9fbG9jYWwgaW50NCAqcXVvKTsKK2hhbGY4IF9fb3ZsZCByZW1xdW8oaGFsZjggeCwgaGFsZjggeSwgX19sb2NhbCBpbnQ4ICpxdW8pOworaGFsZjE2IF9fb3ZsZCByZW1xdW8oaGFsZjE2IHgsIGhhbGYxNiB5LCBfX2xvY2FsIGludDE2ICpxdW8pOworaGFsZiBfX292bGQgcmVtcXVvKGhhbGYgeCwgaGFsZiB5LCBfX3ByaXZhdGUgaW50ICpxdW8pOworaGFsZjIgX19vdmxkIHJlbXF1byhoYWxmMiB4LCBoYWxmMiB5LCBfX3ByaXZhdGUgaW50MiAqcXVvKTsKK2hhbGYzIF9fb3ZsZCByZW1xdW8oaGFsZjMgeCwgaGFsZjMgeSwgX19wcml2YXRlIGludDMgKnF1byk7CitoYWxmNCBfX292bGQgcmVtcXVvKGhhbGY0IHgsIGhhbGY0IHksIF9fcHJpdmF0ZSBpbnQ0ICpxdW8pOworaGFsZjggX19vdmxkIHJlbXF1byhoYWxmOCB4LCBoYWxmOCB5LCBfX3ByaXZhdGUgaW50OCAqcXVvKTsKK2hhbGYxNiBfX292bGQgcmVtcXVvKGhhbGYxNiB4LCBoYWxmMTYgeSwgX19wcml2YXRlIGludDE2ICpxdW8pOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisvKioKKyAqIFJvdW5kIHRvIGludGVncmFsIHZhbHVlICh1c2luZyByb3VuZCB0byBuZWFyZXN0CisgKiBldmVuIHJvdW5kaW5nIG1vZGUpIGluIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4KKyAqIFJlZmVyIHRvIHNlY3Rpb24gNy4xIGZvciBkZXNjcmlwdGlvbiBvZiByb3VuZGluZworICogbW9kZXMuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gcmludChmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiByaW50KGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiByaW50KGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiByaW50KGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiByaW50KGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gcmludChmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gcmludChkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIHJpbnQoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gcmludChkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiByaW50KGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIHJpbnQoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHJpbnQoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHJpbnQoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIHJpbnQoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiByaW50KGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gcmludChoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIHJpbnQoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gcmludChoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIHggdG8gdGhlIHBvd2VyIDEveS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiByb290bihmbG9hdCB4LCBpbnQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiByb290bihmbG9hdDIgeCwgaW50MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHJvb3RuKGZsb2F0MyB4LCBpbnQzIHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gcm9vdG4oZmxvYXQ0IHgsIGludDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiByb290bihmbG9hdDggeCwgaW50OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiByb290bihmbG9hdDE2IHgsIGludDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiByb290bihkb3VibGUgeCwgaW50IHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIHJvb3RuKGRvdWJsZTIgeCwgaW50MiB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiByb290bihkb3VibGUzIHgsIGludDMgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gcm9vdG4oZG91YmxlNCB4LCBpbnQ0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIHJvb3RuKGRvdWJsZTggeCwgaW50OCB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gcm9vdG4oZG91YmxlMTYgeCwgaW50MTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gcm9vdG4oaGFsZiB4LCBpbnQgeSk7CitoYWxmMiBfX292bGQgX19jbmZuIHJvb3RuKGhhbGYyIHgsIGludDIgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIHJvb3RuKGhhbGYzIHgsIGludDMgeSk7CitoYWxmNCBfX292bGQgX19jbmZuIHJvb3RuKGhhbGY0IHgsIGludDQgeSk7CitoYWxmOCBfX292bGQgX19jbmZuIHJvb3RuKGhhbGY4IHgsIGludDggeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiByb290bihoYWxmMTYgeCwgaW50MTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybiB0aGUgaW50ZWdyYWwgdmFsdWUgbmVhcmVzdCB0byB4IHJvdW5kaW5nCisgKiBoYWxmd2F5IGNhc2VzIGF3YXkgZnJvbSB6ZXJvLCByZWdhcmRsZXNzIG9mIHRoZQorICogY3VycmVudCByb3VuZGluZyBkaXJlY3Rpb24uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gcm91bmQoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiByb3VuZChmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiByb3VuZChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiByb3VuZChmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiByb3VuZChmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gcm91bmQoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gcm91bmQoZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIHJvdW5kKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gcm91bmQoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiByb3VuZChkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIHJvdW5kKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHJvdW5kKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHJvdW5kKGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIHJvdW5kKGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiByb3VuZChoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gcm91bmQoaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIHJvdW5kKGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gcm91bmQoaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIGludmVyc2Ugc3F1YXJlIHJvb3QuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gcnNxcnQoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gcnNxcnQoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHJzcXJ0KGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiByc3FydChmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gcnNxcnQoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiByc3FydChmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gcnNxcnQoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiByc3FydChkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiByc3FydChkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiByc3FydChkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiByc3FydChkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gcnNxcnQoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHJzcXJ0KGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiByc3FydChoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIHJzcXJ0KGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gcnNxcnQoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiByc3FydChoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiByc3FydChoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIHNpbmUuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gc2luKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNpbihmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gc2luKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzaW4oZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNpbihmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNpbihmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gc2luKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc2luKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIHNpbihkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzaW4oZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc2luKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzaW4oZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHNpbihoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2luKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gc2luKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2luKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gc2luKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHNpbihoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIHNpbmUgYW5kIGNvc2luZSBvZiB4LiBUaGUgY29tcHV0ZWQgc2luZQorICogaXMgdGhlIHJldHVybiB2YWx1ZSBhbmQgY29tcHV0ZWQgY29zaW5lIGlzIHJldHVybmVkCisgKiBpbiBjb3N2YWwuCisgKi8KKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorZmxvYXQgX19vdmxkIHNpbmNvcyhmbG9hdCB4LCBmbG9hdCAqY29zdmFsKTsKK2Zsb2F0MiBfX292bGQgc2luY29zKGZsb2F0MiB4LCBmbG9hdDIgKmNvc3ZhbCk7CitmbG9hdDMgX19vdmxkIHNpbmNvcyhmbG9hdDMgeCwgZmxvYXQzICpjb3N2YWwpOworZmxvYXQ0IF9fb3ZsZCBzaW5jb3MoZmxvYXQ0IHgsIGZsb2F0NCAqY29zdmFsKTsKK2Zsb2F0OCBfX292bGQgc2luY29zKGZsb2F0OCB4LCBmbG9hdDggKmNvc3ZhbCk7CitmbG9hdDE2IF9fb3ZsZCBzaW5jb3MoZmxvYXQxNiB4LCBmbG9hdDE2ICpjb3N2YWwpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIHNpbmNvcyhkb3VibGUgeCwgZG91YmxlICpjb3N2YWwpOworZG91YmxlMiBfX292bGQgc2luY29zKGRvdWJsZTIgeCwgZG91YmxlMiAqY29zdmFsKTsKK2RvdWJsZTMgX19vdmxkIHNpbmNvcyhkb3VibGUzIHgsIGRvdWJsZTMgKmNvc3ZhbCk7Citkb3VibGU0IF9fb3ZsZCBzaW5jb3MoZG91YmxlNCB4LCBkb3VibGU0ICpjb3N2YWwpOworZG91YmxlOCBfX292bGQgc2luY29zKGRvdWJsZTggeCwgZG91YmxlOCAqY29zdmFsKTsKK2RvdWJsZTE2IF9fb3ZsZCBzaW5jb3MoZG91YmxlMTYgeCwgZG91YmxlMTYgKmNvc3ZhbCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBzaW5jb3MoaGFsZiB4LCBoYWxmICpjb3N2YWwpOworaGFsZjIgX19vdmxkIHNpbmNvcyhoYWxmMiB4LCBoYWxmMiAqY29zdmFsKTsKK2hhbGYzIF9fb3ZsZCBzaW5jb3MoaGFsZjMgeCwgaGFsZjMgKmNvc3ZhbCk7CitoYWxmNCBfX292bGQgc2luY29zKGhhbGY0IHgsIGhhbGY0ICpjb3N2YWwpOworaGFsZjggX19vdmxkIHNpbmNvcyhoYWxmOCB4LCBoYWxmOCAqY29zdmFsKTsKK2hhbGYxNiBfX292bGQgc2luY29zKGhhbGYxNiB4LCBoYWxmMTYgKmNvc3ZhbCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorI2Vsc2UKK2Zsb2F0IF9fb3ZsZCBzaW5jb3MoZmxvYXQgeCwgX19nbG9iYWwgZmxvYXQgKmNvc3ZhbCk7CitmbG9hdDIgX19vdmxkIHNpbmNvcyhmbG9hdDIgeCwgX19nbG9iYWwgZmxvYXQyICpjb3N2YWwpOworZmxvYXQzIF9fb3ZsZCBzaW5jb3MoZmxvYXQzIHgsIF9fZ2xvYmFsIGZsb2F0MyAqY29zdmFsKTsKK2Zsb2F0NCBfX292bGQgc2luY29zKGZsb2F0NCB4LCBfX2dsb2JhbCBmbG9hdDQgKmNvc3ZhbCk7CitmbG9hdDggX19vdmxkIHNpbmNvcyhmbG9hdDggeCwgX19nbG9iYWwgZmxvYXQ4ICpjb3N2YWwpOworZmxvYXQxNiBfX292bGQgc2luY29zKGZsb2F0MTYgeCwgX19nbG9iYWwgZmxvYXQxNiAqY29zdmFsKTsKK2Zsb2F0IF9fb3ZsZCBzaW5jb3MoZmxvYXQgeCwgX19sb2NhbCBmbG9hdCAqY29zdmFsKTsKK2Zsb2F0MiBfX292bGQgc2luY29zKGZsb2F0MiB4LCBfX2xvY2FsIGZsb2F0MiAqY29zdmFsKTsKK2Zsb2F0MyBfX292bGQgc2luY29zKGZsb2F0MyB4LCBfX2xvY2FsIGZsb2F0MyAqY29zdmFsKTsKK2Zsb2F0NCBfX292bGQgc2luY29zKGZsb2F0NCB4LCBfX2xvY2FsIGZsb2F0NCAqY29zdmFsKTsKK2Zsb2F0OCBfX292bGQgc2luY29zKGZsb2F0OCB4LCBfX2xvY2FsIGZsb2F0OCAqY29zdmFsKTsKK2Zsb2F0MTYgX19vdmxkIHNpbmNvcyhmbG9hdDE2IHgsIF9fbG9jYWwgZmxvYXQxNiAqY29zdmFsKTsKK2Zsb2F0IF9fb3ZsZCBzaW5jb3MoZmxvYXQgeCwgX19wcml2YXRlIGZsb2F0ICpjb3N2YWwpOworZmxvYXQyIF9fb3ZsZCBzaW5jb3MoZmxvYXQyIHgsIF9fcHJpdmF0ZSBmbG9hdDIgKmNvc3ZhbCk7CitmbG9hdDMgX19vdmxkIHNpbmNvcyhmbG9hdDMgeCwgX19wcml2YXRlIGZsb2F0MyAqY29zdmFsKTsKK2Zsb2F0NCBfX292bGQgc2luY29zKGZsb2F0NCB4LCBfX3ByaXZhdGUgZmxvYXQ0ICpjb3N2YWwpOworZmxvYXQ4IF9fb3ZsZCBzaW5jb3MoZmxvYXQ4IHgsIF9fcHJpdmF0ZSBmbG9hdDggKmNvc3ZhbCk7CitmbG9hdDE2IF9fb3ZsZCBzaW5jb3MoZmxvYXQxNiB4LCBfX3ByaXZhdGUgZmxvYXQxNiAqY29zdmFsKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBzaW5jb3MoZG91YmxlIHgsIF9fZ2xvYmFsIGRvdWJsZSAqY29zdmFsKTsKK2RvdWJsZTIgX19vdmxkIHNpbmNvcyhkb3VibGUyIHgsIF9fZ2xvYmFsIGRvdWJsZTIgKmNvc3ZhbCk7Citkb3VibGUzIF9fb3ZsZCBzaW5jb3MoZG91YmxlMyB4LCBfX2dsb2JhbCBkb3VibGUzICpjb3N2YWwpOworZG91YmxlNCBfX292bGQgc2luY29zKGRvdWJsZTQgeCwgX19nbG9iYWwgZG91YmxlNCAqY29zdmFsKTsKK2RvdWJsZTggX19vdmxkIHNpbmNvcyhkb3VibGU4IHgsIF9fZ2xvYmFsIGRvdWJsZTggKmNvc3ZhbCk7Citkb3VibGUxNiBfX292bGQgc2luY29zKGRvdWJsZTE2IHgsIF9fZ2xvYmFsIGRvdWJsZTE2ICpjb3N2YWwpOworZG91YmxlIF9fb3ZsZCBzaW5jb3MoZG91YmxlIHgsIF9fbG9jYWwgZG91YmxlICpjb3N2YWwpOworZG91YmxlMiBfX292bGQgc2luY29zKGRvdWJsZTIgeCwgX19sb2NhbCBkb3VibGUyICpjb3N2YWwpOworZG91YmxlMyBfX292bGQgc2luY29zKGRvdWJsZTMgeCwgX19sb2NhbCBkb3VibGUzICpjb3N2YWwpOworZG91YmxlNCBfX292bGQgc2luY29zKGRvdWJsZTQgeCwgX19sb2NhbCBkb3VibGU0ICpjb3N2YWwpOworZG91YmxlOCBfX292bGQgc2luY29zKGRvdWJsZTggeCwgX19sb2NhbCBkb3VibGU4ICpjb3N2YWwpOworZG91YmxlMTYgX19vdmxkIHNpbmNvcyhkb3VibGUxNiB4LCBfX2xvY2FsIGRvdWJsZTE2ICpjb3N2YWwpOworZG91YmxlIF9fb3ZsZCBzaW5jb3MoZG91YmxlIHgsIF9fcHJpdmF0ZSBkb3VibGUgKmNvc3ZhbCk7Citkb3VibGUyIF9fb3ZsZCBzaW5jb3MoZG91YmxlMiB4LCBfX3ByaXZhdGUgZG91YmxlMiAqY29zdmFsKTsKK2RvdWJsZTMgX19vdmxkIHNpbmNvcyhkb3VibGUzIHgsIF9fcHJpdmF0ZSBkb3VibGUzICpjb3N2YWwpOworZG91YmxlNCBfX292bGQgc2luY29zKGRvdWJsZTQgeCwgX19wcml2YXRlIGRvdWJsZTQgKmNvc3ZhbCk7Citkb3VibGU4IF9fb3ZsZCBzaW5jb3MoZG91YmxlOCB4LCBfX3ByaXZhdGUgZG91YmxlOCAqY29zdmFsKTsKK2RvdWJsZTE2IF9fb3ZsZCBzaW5jb3MoZG91YmxlMTYgeCwgX19wcml2YXRlIGRvdWJsZTE2ICpjb3N2YWwpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgc2luY29zKGhhbGYgeCwgX19nbG9iYWwgaGFsZiAqY29zdmFsKTsKK2hhbGYyIF9fb3ZsZCBzaW5jb3MoaGFsZjIgeCwgX19nbG9iYWwgaGFsZjIgKmNvc3ZhbCk7CitoYWxmMyBfX292bGQgc2luY29zKGhhbGYzIHgsIF9fZ2xvYmFsIGhhbGYzICpjb3N2YWwpOworaGFsZjQgX19vdmxkIHNpbmNvcyhoYWxmNCB4LCBfX2dsb2JhbCBoYWxmNCAqY29zdmFsKTsKK2hhbGY4IF9fb3ZsZCBzaW5jb3MoaGFsZjggeCwgX19nbG9iYWwgaGFsZjggKmNvc3ZhbCk7CitoYWxmMTYgX19vdmxkIHNpbmNvcyhoYWxmMTYgeCwgX19nbG9iYWwgaGFsZjE2ICpjb3N2YWwpOworaGFsZiBfX292bGQgc2luY29zKGhhbGYgeCwgX19sb2NhbCBoYWxmICpjb3N2YWwpOworaGFsZjIgX19vdmxkIHNpbmNvcyhoYWxmMiB4LCBfX2xvY2FsIGhhbGYyICpjb3N2YWwpOworaGFsZjMgX19vdmxkIHNpbmNvcyhoYWxmMyB4LCBfX2xvY2FsIGhhbGYzICpjb3N2YWwpOworaGFsZjQgX19vdmxkIHNpbmNvcyhoYWxmNCB4LCBfX2xvY2FsIGhhbGY0ICpjb3N2YWwpOworaGFsZjggX19vdmxkIHNpbmNvcyhoYWxmOCB4LCBfX2xvY2FsIGhhbGY4ICpjb3N2YWwpOworaGFsZjE2IF9fb3ZsZCBzaW5jb3MoaGFsZjE2IHgsIF9fbG9jYWwgaGFsZjE2ICpjb3N2YWwpOworaGFsZiBfX292bGQgc2luY29zKGhhbGYgeCwgX19wcml2YXRlIGhhbGYgKmNvc3ZhbCk7CitoYWxmMiBfX292bGQgc2luY29zKGhhbGYyIHgsIF9fcHJpdmF0ZSBoYWxmMiAqY29zdmFsKTsKK2hhbGYzIF9fb3ZsZCBzaW5jb3MoaGFsZjMgeCwgX19wcml2YXRlIGhhbGYzICpjb3N2YWwpOworaGFsZjQgX19vdmxkIHNpbmNvcyhoYWxmNCB4LCBfX3ByaXZhdGUgaGFsZjQgKmNvc3ZhbCk7CitoYWxmOCBfX292bGQgc2luY29zKGhhbGY4IHgsIF9fcHJpdmF0ZSBoYWxmOCAqY29zdmFsKTsKK2hhbGYxNiBfX292bGQgc2luY29zKGhhbGYxNiB4LCBfX3ByaXZhdGUgaGFsZjE2ICpjb3N2YWwpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogQ29tcHV0ZSBoeXBlcmJvbGljIHNpbmUuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gc2luaChmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzaW5oKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzaW5oKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzaW5oKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzaW5oKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2luaChmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gc2luaChkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIHNpbmgoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gc2luaChkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzaW5oKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIHNpbmgoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHNpbmgoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHNpbmgoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIHNpbmgoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBzaW5oKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2luaChoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIHNpbmgoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc2luaChoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIHNpbiAoUEkgKiB4KS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBzaW5waShmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNpbnBpKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHNpbnBpKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNpbnBpKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNpbnBpKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzaW5waShmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBzaW5waShkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc2lucGkoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBzaW5waShkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIHNpbnBpKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc2lucGkoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc2lucGkoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gc2lucGkoaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2lucGkoaGFsZjIgeCk7CitoYWxmMyBfX292bGQgX19jbmZuIHNpbnBpKGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiBzaW5waShoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gc2lucGkoaGFsZjggeCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBzaW5waShoYWxmMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgc3F1YXJlIHJvb3QuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gc3FydChmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzcXJ0KGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzcXJ0KGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzcXJ0KGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzcXJ0KGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc3FydChmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gc3FydChkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIHNxcnQoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gc3FydChkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzcXJ0KGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIHNxcnQoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHNxcnQoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHNxcnQoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIHNxcnQoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBzcXJ0KGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc3FydChoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIHNxcnQoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc3FydChoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIHRhbmdlbnQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gdGFuKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHRhbihmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gdGFuKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiB0YW4oZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHRhbihmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHRhbihmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gdGFuKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gdGFuKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIHRhbihkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiB0YW4oZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gdGFuKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiB0YW4oZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHRhbihoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gdGFuKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gdGFuKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gdGFuKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gdGFuKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHRhbihoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIGh5cGVyYm9saWMgdGFuZ2VudC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiB0YW5oKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHRhbmgoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHRhbmgoZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHRhbmgoZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHRhbmgoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiB0YW5oKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiB0YW5oKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gdGFuaChkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiB0YW5oKGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIHRhbmgoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gdGFuaChkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gdGFuaChkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gdGFuaChoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gdGFuaChoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIHRhbmgoaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiB0YW5oKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gdGFuaChoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiB0YW5oKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgdGFuIChQSSAqIHgpLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHRhbnBpKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gdGFucGkoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gdGFucGkoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gdGFucGkoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gdGFucGkoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHRhbnBpKGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHRhbnBpKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiB0YW5waShkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIHRhbnBpKGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gdGFucGkoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiB0YW5waShkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiB0YW5waShkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiB0YW5waShoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiB0YW5waShoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gdGFucGkoaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIHRhbnBpKGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiB0YW5waShoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHRhbnBpKGhhbGYxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSB0aGUgZ2FtbWEgZnVuY3Rpb24uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHRnYW1tYShmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiB0Z2FtbWEoZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHRnYW1tYShmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHRnYW1tYShmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIHRnYW1tYShkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiB0Z2FtbWEoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiB0Z2FtbWEoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHRnYW1tYShoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHRnYW1tYShoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSb3VuZCB0byBpbnRlZ3JhbCB2YWx1ZSB1c2luZyB0aGUgcm91bmQgdG8gemVybworICogcm91bmRpbmcgbW9kZS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiB0cnVuYyhmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiB0cnVuYyhmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gdHJ1bmMoZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHRydW5jKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiB0cnVuYyhmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHRydW5jKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiB0cnVuYyhkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIHRydW5jKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIHRydW5jKGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIHRydW5jKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIHRydW5jKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiB0cnVuYyhkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gdHJ1bmMoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIHRydW5jKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gdHJ1bmMoaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiB0cnVuYyhoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIHRydW5jKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHRydW5jKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgY29zaW5lLiB4IG11c3QgYmUgaW4gdGhlIHJhbmdlIC0yXjE2IC4uLiArMl4xNi4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBoYWxmX2NvcyhmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGhhbGZfY29zKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGhhbGZfY29zKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGhhbGZfY29zKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGhhbGZfY29zKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoYWxmX2NvcyhmbG9hdDE2IHgpOworCisvKioKKyAqIENvbXB1dGUgeCAvIHkuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gaGFsZl9kaXZpZGUoZmxvYXQgeCwgZmxvYXQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBoYWxmX2RpdmlkZShmbG9hdDIgeCwgZmxvYXQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gaGFsZl9kaXZpZGUoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGhhbGZfZGl2aWRlKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBoYWxmX2RpdmlkZShmbG9hdDggeCwgZmxvYXQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGhhbGZfZGl2aWRlKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKworLyoqCisgKiBDb21wdXRlIHRoZSBiYXNlLSBlIGV4cG9uZW50aWFsIG9mIHguCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBoYWxmX2V4cChmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBoYWxmX2V4cChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBoYWxmX2V4cChmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBoYWxmX2V4cChmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIHRoZSBiYXNlLSAyIGV4cG9uZW50aWFsIG9mIHguCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAyKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAyKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGhhbGZfZXhwMihmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBoYWxmX2V4cDIoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAyKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoYWxmX2V4cDIoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIHRoZSBiYXNlLSAxMCBleHBvbmVudGlhbCBvZiB4LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGhhbGZfZXhwMTAoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBoYWxmX2V4cDEwKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGhhbGZfZXhwMTAoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAxMChmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBoYWxmX2V4cDEwKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoYWxmX2V4cDEwKGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSBuYXR1cmFsIGxvZ2FyaXRobS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBoYWxmX2xvZyhmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGhhbGZfbG9nKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGhhbGZfbG9nKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGhhbGZfbG9nKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGhhbGZfbG9nKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoYWxmX2xvZyhmbG9hdDE2IHgpOworCisvKioKKyAqIENvbXB1dGUgYSBiYXNlIDIgbG9nYXJpdGhtLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGhhbGZfbG9nMihmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGhhbGZfbG9nMihmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBoYWxmX2xvZzIoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gaGFsZl9sb2cyKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGhhbGZfbG9nMihmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gaGFsZl9sb2cyKGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSBhIGJhc2UgMTAgbG9nYXJpdGhtLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGhhbGZfbG9nMTAoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBoYWxmX2xvZzEwKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGhhbGZfbG9nMTAoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gaGFsZl9sb2cxMChmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBoYWxmX2xvZzEwKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoYWxmX2xvZzEwKGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSB4IHRvIHRoZSBwb3dlciB5LCB3aGVyZSB4IGlzID49IDAuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gaGFsZl9wb3dyKGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gaGFsZl9wb3dyKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBoYWxmX3Bvd3IoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGhhbGZfcG93cihmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gaGFsZl9wb3dyKGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gaGFsZl9wb3dyKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKworLyoqCisgKiBDb21wdXRlIHJlY2lwcm9jYWwuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gaGFsZl9yZWNpcChmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGhhbGZfcmVjaXAoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gaGFsZl9yZWNpcChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBoYWxmX3JlY2lwKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGhhbGZfcmVjaXAoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGhhbGZfcmVjaXAoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIGludmVyc2Ugc3F1YXJlIHJvb3QuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gaGFsZl9yc3FydChmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGhhbGZfcnNxcnQoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gaGFsZl9yc3FydChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBoYWxmX3JzcXJ0KGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGhhbGZfcnNxcnQoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGhhbGZfcnNxcnQoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIHNpbmUuIHggbXVzdCBiZSBpbiB0aGUgcmFuZ2UgLTJeMTYgLi4uICsyXjE2LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGhhbGZfc2luKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gaGFsZl9zaW4oZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gaGFsZl9zaW4oZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gaGFsZl9zaW4oZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gaGFsZl9zaW4oZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGhhbGZfc2luKGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSBzcXVhcmUgcm9vdC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBoYWxmX3NxcnQoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBoYWxmX3NxcnQoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gaGFsZl9zcXJ0KGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGhhbGZfc3FydChmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBoYWxmX3NxcnQoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGhhbGZfc3FydChmbG9hdDE2IHgpOworCisvKioKKyAqIENvbXB1dGUgdGFuZ2VudC4geCBtdXN0IGJlIGluIHRoZSByYW5nZSAtMjE2IC4uLiArMjE2LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGhhbGZfdGFuKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gaGFsZl90YW4oZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gaGFsZl90YW4oZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gaGFsZl90YW4oZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gaGFsZl90YW4oZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGhhbGZfdGFuKGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSBjb3NpbmUgb3ZlciBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJhbmdlLgorICogVGhlIG1heGltdW0gZXJyb3IgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBuYXRpdmVfY29zKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2NvcyhmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuYXRpdmVfY29zKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG5hdGl2ZV9jb3MoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2NvcyhmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2NvcyhmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBuYXRpdmVfY29zKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBuYXRpdmVfY29zKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2Nvcyhkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIG5hdGl2ZV9jb3MoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBuYXRpdmVfY29zKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG5hdGl2ZV9jb3MoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisvKioKKyAqIENvbXB1dGUgeCAvIHkgb3ZlciBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJhbmdlLgorICogVGhlIG1heGltdW0gZXJyb3IgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBuYXRpdmVfZGl2aWRlKGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2RpdmlkZShmbG9hdDIgeCwgZmxvYXQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2RpdmlkZShmbG9hdDMgeCwgZmxvYXQzIHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2RpdmlkZShmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2RpdmlkZShmbG9hdDggeCwgZmxvYXQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG5hdGl2ZV9kaXZpZGUoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBuYXRpdmVfZGl2aWRlKGRvdWJsZSB4LCBkb3VibGUgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2RpdmlkZShkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2RpdmlkZShkb3VibGUzIHgsIGRvdWJsZTMgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2RpdmlkZShkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2RpdmlkZShkb3VibGU4IHgsIGRvdWJsZTggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG5hdGl2ZV9kaXZpZGUoZG91YmxlMTYgeCwgZG91YmxlMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisvKioKKyAqIENvbXB1dGUgdGhlIGJhc2UtIGUgZXhwb25lbnRpYWwgb2YgeCBvdmVyIGFuCisgKiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJhbmdlLiBUaGUgbWF4aW11bSBlcnJvciBpcworICogaW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cChmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cChmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cChmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cChkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisvKioKKyAqIENvbXB1dGUgdGhlIGJhc2UtIDIgZXhwb25lbnRpYWwgb2YgeCBvdmVyIGFuCisgKiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJhbmdlLiBUaGUgbWF4aW11bSBlcnJvciBpcworICogaW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMihmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAyKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAyKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAyKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAyKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMihmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMihkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDIoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMihkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAyKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDIoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDIoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisvKioKKyAqIENvbXB1dGUgdGhlIGJhc2UtIDEwIGV4cG9uZW50aWFsIG9mIHggb3ZlciBhbgorICogaW1wbGVtZW50YXRpb24tZGVmaW5lZCByYW5nZS4gVGhlIG1heGltdW0gZXJyb3IgaXMKKyAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDEwKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDEwKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAxMChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMTAoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDEwKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMTAoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDEwKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMTAoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMTAoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMTAoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMTAoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDEwKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKworLyoqCisgKiBDb21wdXRlIG5hdHVyYWwgbG9nYXJpdGhtIG92ZXIgYW4gaW1wbGVtZW50YXRpb25kZWZpbmVkCisgKiByYW5nZS4gVGhlIG1heGltdW0gZXJyb3IgaXMgaW1wbGVtZW50YXRpb24KKyAqIGRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZyhmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2coZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZyhmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2coZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2coZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZyhkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZyhkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2coZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZyhkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKworLyoqCisgKiBDb21wdXRlIGEgYmFzZSAyIGxvZ2FyaXRobSBvdmVyIGFuIGltcGxlbWVudGF0aW9uZGVmaW5lZAorICogcmFuZ2UuIFRoZSBtYXhpbXVtIGVycm9yIGlzIGltcGxlbWVudGF0aW9uZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMihmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cyKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cyKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cyKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cyKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMihmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMihkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZzIoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMihkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cyKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZzIoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZzIoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisvKioKKyAqIENvbXB1dGUgYSBiYXNlIDEwIGxvZ2FyaXRobSBvdmVyIGFuIGltcGxlbWVudGF0aW9uZGVmaW5lZAorICogcmFuZ2UuIFRoZSBtYXhpbXVtIGVycm9yIGlzIGltcGxlbWVudGF0aW9uZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMTAoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMTAoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZzEwKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cxMChmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMTAoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cxMChmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMTAoZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cxMChkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cxMChkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cxMChkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cxMChkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMTAoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisvKioKKyAqIENvbXB1dGUgeCB0byB0aGUgcG93ZXIgeSwgd2hlcmUgeCBpcyA+PSAwLiBUaGUgcmFuZ2Ugb2YKKyAqIHggYW5kIHkgYXJlIGltcGxlbWVudGF0aW9uLWRlZmluZWQuIFRoZSBtYXhpbXVtIGVycm9yCisgKiBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG5hdGl2ZV9wb3dyKGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3Bvd3IoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hdGl2ZV9wb3dyKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfcG93cihmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3Bvd3IoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYXRpdmVfcG93cihmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIG5hdGl2ZV9wb3dyKGRvdWJsZSB4LCBkb3VibGUgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3Bvd3IoZG91YmxlMiB4LCBkb3VibGUyIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIG5hdGl2ZV9wb3dyKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBuYXRpdmVfcG93cihkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3Bvd3IoZG91YmxlOCB4LCBkb3VibGU4IHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBuYXRpdmVfcG93cihkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKy8qKgorICogQ29tcHV0ZSByZWNpcHJvY2FsIG92ZXIgYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZAorICogcmFuZ2UuIFRoZSBtYXhpbXVtIGVycm9yIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JlY2lwKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JlY2lwKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hdGl2ZV9yZWNpcChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfcmVjaXAoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JlY2lwKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYXRpdmVfcmVjaXAoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JlY2lwKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBuYXRpdmVfcmVjaXAoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBuYXRpdmVfcmVjaXAoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBuYXRpdmVfcmVjaXAoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBuYXRpdmVfcmVjaXAoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JlY2lwKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKworLyoqCisgKiBDb21wdXRlIGludmVyc2Ugc3F1YXJlIHJvb3Qgb3ZlciBhbiBpbXBsZW1lbnRhdGlvbmRlZmluZWQKKyAqIHJhbmdlLiBUaGUgbWF4aW11bSBlcnJvciBpcyBpbXBsZW1lbnRhdGlvbmRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JzcXJ0KGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JzcXJ0KGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hdGl2ZV9yc3FydChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfcnNxcnQoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JzcXJ0KGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYXRpdmVfcnNxcnQoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JzcXJ0KGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBuYXRpdmVfcnNxcnQoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBuYXRpdmVfcnNxcnQoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBuYXRpdmVfcnNxcnQoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBuYXRpdmVfcnNxcnQoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JzcXJ0KGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKworLyoqCisgKiBDb21wdXRlIHNpbmUgb3ZlciBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJhbmdlLgorICogVGhlIG1heGltdW0gZXJyb3IgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBuYXRpdmVfc2luKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3NpbihmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuYXRpdmVfc2luKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG5hdGl2ZV9zaW4oZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3NpbihmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3NpbihmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBuYXRpdmVfc2luKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBuYXRpdmVfc2luKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3Npbihkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIG5hdGl2ZV9zaW4oZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBuYXRpdmVfc2luKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG5hdGl2ZV9zaW4oZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisvKioKKyAqIENvbXB1dGUgc3F1YXJlIHJvb3Qgb3ZlciBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkCisgKiByYW5nZS4gVGhlIG1heGltdW0gZXJyb3IgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBuYXRpdmVfc3FydChmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9zcXJ0KGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hdGl2ZV9zcXJ0KGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG5hdGl2ZV9zcXJ0KGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9zcXJ0KGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYXRpdmVfc3FydChmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBuYXRpdmVfc3FydChkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3NxcnQoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBuYXRpdmVfc3FydChkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIG5hdGl2ZV9zcXJ0KGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3NxcnQoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3NxcnQoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisvKioKKyAqIENvbXB1dGUgdGFuZ2VudCBvdmVyIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcmFuZ2UuCisgKiBUaGUgbWF4aW11bSBlcnJvciBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG5hdGl2ZV90YW4oZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBuYXRpdmVfdGFuKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hdGl2ZV90YW4oZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3RhbihmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBuYXRpdmVfdGFuKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYXRpdmVfdGFuKGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIG5hdGl2ZV90YW4oZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIG5hdGl2ZV90YW4oZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBuYXRpdmVfdGFuKGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3Rhbihkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIG5hdGl2ZV90YW4oZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3Rhbihkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjMsIHYxLjIgczYuMTIuMywgdjIuMCBzNi4xMy4zIC0gSW50ZWdlciBGdW5jdGlvbnMKKworLyoqCisgKiBSZXR1cm5zIHwgeCB8LgorICovCit1Y2hhciBfX292bGQgX19jbmZuIGFicyhjaGFyIHgpOwordWNoYXIgX19vdmxkIF9fY25mbiBhYnModWNoYXIgeCk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBhYnMoY2hhcjIgeCk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBhYnModWNoYXIyIHgpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gYWJzKGNoYXIzIHgpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gYWJzKHVjaGFyMyB4KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFicyhjaGFyNCB4KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFicyh1Y2hhcjQgeCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhYnMoY2hhcjggeCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhYnModWNoYXI4IHgpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFicyhjaGFyMTYgeCk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYWJzKHVjaGFyMTYgeCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBhYnMoc2hvcnQgeCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBhYnModXNob3J0IHgpOwordXNob3J0MiBfX292bGQgX19jbmZuIGFicyhzaG9ydDIgeCk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gYWJzKHVzaG9ydDIgeCk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYWJzKHNob3J0MyB4KTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhYnModXNob3J0MyB4KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhYnMoc2hvcnQ0IHgpOwordXNob3J0NCBfX292bGQgX19jbmZuIGFicyh1c2hvcnQ0IHgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFicyhzaG9ydDggeCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYWJzKHVzaG9ydDggeCk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGFicyhzaG9ydDE2IHgpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhYnModXNob3J0MTYgeCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gYWJzKGludCB4KTsKK3VpbnQgX19vdmxkIF9fY25mbiBhYnModWludCB4KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYWJzKGludDIgeCk7Cit1aW50MiBfX292bGQgX19jbmZuIGFicyh1aW50MiB4KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYWJzKGludDMgeCk7Cit1aW50MyBfX292bGQgX19jbmZuIGFicyh1aW50MyB4KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gYWJzKGludDQgeCk7Cit1aW50NCBfX292bGQgX19jbmZuIGFicyh1aW50NCB4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gYWJzKGludDggeCk7Cit1aW50OCBfX292bGQgX19jbmZuIGFicyh1aW50OCB4KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGFicyhpbnQxNiB4KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGFicyh1aW50MTYgeCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGFicyhsb25nIHgpOwordWxvbmcgX19vdmxkIF9fY25mbiBhYnModWxvbmcgeCk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhYnMobG9uZzIgeCk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhYnModWxvbmcyIHgpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gYWJzKGxvbmczIHgpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gYWJzKHVsb25nMyB4KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFicyhsb25nNCB4KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFicyh1bG9uZzQgeCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBhYnMobG9uZzggeCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBhYnModWxvbmc4IHgpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGFicyhsb25nMTYgeCk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gYWJzKHVsb25nMTYgeCk7CisKKy8qKgorICogUmV0dXJucyB8IHggLSB5IHwgd2l0aG91dCBtb2R1bG8gb3ZlcmZsb3cuCisgKi8KK3VjaGFyIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoY2hhciB4LCBjaGFyIHkpOwordWNoYXIgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1Y2hhciB4LCB1Y2hhciB5KTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGFic19kaWZmKGNoYXIyIHgsIGNoYXIyIHkpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWNoYXIyIHgsIHVjaGFyMiB5KTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGFic19kaWZmKGNoYXIzIHgsIGNoYXIzIHkpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWNoYXIzIHgsIHVjaGFyMyB5KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFic19kaWZmKGNoYXI0IHgsIGNoYXI0IHkpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWNoYXI0IHgsIHVjaGFyNCB5KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFic19kaWZmKGNoYXI4IHgsIGNoYXI4IHkpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWNoYXI4IHgsIHVjaGFyOCB5KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBhYnNfZGlmZihjaGFyMTYgeCwgY2hhcjE2IHkpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFic19kaWZmKHVjaGFyMTYgeCwgdWNoYXIxNiB5KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGFic19kaWZmKHNob3J0IHgsIHNob3J0IHkpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodXNob3J0IHgsIHVzaG9ydCB5KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBhYnNfZGlmZihzaG9ydDIgeCwgc2hvcnQyIHkpOwordXNob3J0MiBfX292bGQgX19jbmZuIGFic19kaWZmKHVzaG9ydDIgeCwgdXNob3J0MiB5KTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhYnNfZGlmZihzaG9ydDMgeCwgc2hvcnQzIHkpOwordXNob3J0MyBfX292bGQgX19jbmZuIGFic19kaWZmKHVzaG9ydDMgeCwgdXNob3J0MyB5KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhYnNfZGlmZihzaG9ydDQgeCwgc2hvcnQ0IHkpOwordXNob3J0NCBfX292bGQgX19jbmZuIGFic19kaWZmKHVzaG9ydDQgeCwgdXNob3J0NCB5KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhYnNfZGlmZihzaG9ydDggeCwgc2hvcnQ4IHkpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFic19kaWZmKHVzaG9ydDggeCwgdXNob3J0OCB5KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoc2hvcnQxNiB4LCBzaG9ydDE2IHkpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1c2hvcnQxNiB4LCB1c2hvcnQxNiB5KTsKK3VpbnQgX19vdmxkIF9fY25mbiBhYnNfZGlmZihpbnQgeCwgaW50IHkpOwordWludCBfX292bGQgX19jbmZuIGFic19kaWZmKHVpbnQgeCwgdWludCB5KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoaW50MiB4LCBpbnQyIHkpOwordWludDIgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1aW50MiB4LCB1aW50MiB5KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoaW50MyB4LCBpbnQzIHkpOwordWludDMgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1aW50MyB4LCB1aW50MyB5KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoaW50NCB4LCBpbnQ0IHkpOwordWludDQgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1aW50NCB4LCB1aW50NCB5KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoaW50OCB4LCBpbnQ4IHkpOwordWludDggX19vdmxkIF9fY25mbiBhYnNfZGlmZih1aW50OCB4LCB1aW50OCB5KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGFic19kaWZmKGludDE2IHgsIGludDE2IHkpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWludDE2IHgsIHVpbnQxNiB5KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYobG9uZyB4LCBsb25nIHkpOwordWxvbmcgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1bG9uZyB4LCB1bG9uZyB5KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGFic19kaWZmKGxvbmcyIHgsIGxvbmcyIHkpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWxvbmcyIHgsIHVsb25nMiB5KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFic19kaWZmKGxvbmczIHgsIGxvbmczIHkpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWxvbmczIHgsIHVsb25nMyB5KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFic19kaWZmKGxvbmc0IHgsIGxvbmc0IHkpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWxvbmc0IHgsIHVsb25nNCB5KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGFic19kaWZmKGxvbmc4IHgsIGxvbmc4IHkpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWxvbmc4IHgsIHVsb25nOCB5KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBhYnNfZGlmZihsb25nMTYgeCwgbG9uZzE2IHkpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGFic19kaWZmKHVsb25nMTYgeCwgdWxvbmcxNiB5KTsKKworLyoqCisgKiBSZXR1cm5zIHggKyB5IGFuZCBzYXR1cmF0ZXMgdGhlIHJlc3VsdC4KKyAqLworY2hhciBfX292bGQgX19jbmZuIGFkZF9zYXQoY2hhciB4LCBjaGFyIHkpOwordWNoYXIgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVjaGFyIHgsIHVjaGFyIHkpOworY2hhcjIgX19vdmxkIF9fY25mbiBhZGRfc2F0KGNoYXIyIHgsIGNoYXIyIHkpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1Y2hhcjIgeCwgdWNoYXIyIHkpOworY2hhcjMgX19vdmxkIF9fY25mbiBhZGRfc2F0KGNoYXIzIHgsIGNoYXIzIHkpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1Y2hhcjMgeCwgdWNoYXIzIHkpOworY2hhcjQgX19vdmxkIF9fY25mbiBhZGRfc2F0KGNoYXI0IHgsIGNoYXI0IHkpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1Y2hhcjQgeCwgdWNoYXI0IHkpOworY2hhcjggX19vdmxkIF9fY25mbiBhZGRfc2F0KGNoYXI4IHgsIGNoYXI4IHkpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1Y2hhcjggeCwgdWNoYXI4IHkpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChjaGFyMTYgeCwgY2hhcjE2IHkpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFkZF9zYXQodWNoYXIxNiB4LCB1Y2hhcjE2IHkpOworc2hvcnQgX19vdmxkIF9fY25mbiBhZGRfc2F0KHNob3J0IHgsIHNob3J0IHkpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1c2hvcnQgeCwgdXNob3J0IHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChzaG9ydDIgeCwgc2hvcnQyIHkpOwordXNob3J0MiBfX292bGQgX19jbmZuIGFkZF9zYXQodXNob3J0MiB4LCB1c2hvcnQyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChzaG9ydDMgeCwgc2hvcnQzIHkpOwordXNob3J0MyBfX292bGQgX19jbmZuIGFkZF9zYXQodXNob3J0MyB4LCB1c2hvcnQzIHkpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChzaG9ydDQgeCwgc2hvcnQ0IHkpOwordXNob3J0NCBfX292bGQgX19jbmZuIGFkZF9zYXQodXNob3J0NCB4LCB1c2hvcnQ0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChzaG9ydDggeCwgc2hvcnQ4IHkpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFkZF9zYXQodXNob3J0OCB4LCB1c2hvcnQ4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGFkZF9zYXQoc2hvcnQxNiB4LCBzaG9ydDE2IHkpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVzaG9ydDE2IHgsIHVzaG9ydDE2IHkpOworaW50IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChpbnQgeCwgaW50IHkpOwordWludCBfX292bGQgX19jbmZuIGFkZF9zYXQodWludCB4LCB1aW50IHkpOworaW50MiBfX292bGQgX19jbmZuIGFkZF9zYXQoaW50MiB4LCBpbnQyIHkpOwordWludDIgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVpbnQyIHgsIHVpbnQyIHkpOworaW50MyBfX292bGQgX19jbmZuIGFkZF9zYXQoaW50MyB4LCBpbnQzIHkpOwordWludDMgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVpbnQzIHgsIHVpbnQzIHkpOworaW50NCBfX292bGQgX19jbmZuIGFkZF9zYXQoaW50NCB4LCBpbnQ0IHkpOwordWludDQgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVpbnQ0IHgsIHVpbnQ0IHkpOworaW50OCBfX292bGQgX19jbmZuIGFkZF9zYXQoaW50OCB4LCBpbnQ4IHkpOwordWludDggX19vdmxkIF9fY25mbiBhZGRfc2F0KHVpbnQ4IHgsIHVpbnQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBhZGRfc2F0KGludDE2IHgsIGludDE2IHkpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1aW50MTYgeCwgdWludDE2IHkpOworbG9uZyBfX292bGQgX19jbmZuIGFkZF9zYXQobG9uZyB4LCBsb25nIHkpOwordWxvbmcgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVsb25nIHgsIHVsb25nIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBhZGRfc2F0KGxvbmcyIHgsIGxvbmcyIHkpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1bG9uZzIgeCwgdWxvbmcyIHkpOworbG9uZzMgX19vdmxkIF9fY25mbiBhZGRfc2F0KGxvbmczIHgsIGxvbmczIHkpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1bG9uZzMgeCwgdWxvbmczIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiBhZGRfc2F0KGxvbmc0IHgsIGxvbmc0IHkpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1bG9uZzQgeCwgdWxvbmc0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBhZGRfc2F0KGxvbmc4IHgsIGxvbmc4IHkpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1bG9uZzggeCwgdWxvbmc4IHkpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChsb25nMTYgeCwgbG9uZzE2IHkpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGFkZF9zYXQodWxvbmcxNiB4LCB1bG9uZzE2IHkpOworCisvKioKKyAqIFJldHVybnMgKHggKyB5KSA+PiAxLiBUaGUgaW50ZXJtZWRpYXRlIHN1bSBkb2VzCisgKiBub3QgbW9kdWxvIG92ZXJmbG93LgorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gaGFkZChjaGFyIHgsIGNoYXIgeSk7Cit1Y2hhciBfX292bGQgX19jbmZuIGhhZGQodWNoYXIgeCwgdWNoYXIgeSk7CitjaGFyMiBfX292bGQgX19jbmZuIGhhZGQoY2hhcjIgeCwgY2hhcjIgeSk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBoYWRkKHVjaGFyMiB4LCB1Y2hhcjIgeSk7CitjaGFyMyBfX292bGQgX19jbmZuIGhhZGQoY2hhcjMgeCwgY2hhcjMgeSk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBoYWRkKHVjaGFyMyB4LCB1Y2hhcjMgeSk7CitjaGFyNCBfX292bGQgX19jbmZuIGhhZGQoY2hhcjQgeCwgY2hhcjQgeSk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBoYWRkKHVjaGFyNCB4LCB1Y2hhcjQgeSk7CitjaGFyOCBfX292bGQgX19jbmZuIGhhZGQoY2hhcjggeCwgY2hhcjggeSk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBoYWRkKHVjaGFyOCB4LCB1Y2hhcjggeSk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBoYWRkKGNoYXIxNiB4LCBjaGFyMTYgeSk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gaGFkZCh1Y2hhcjE2IHgsIHVjaGFyMTYgeSk7CitzaG9ydCBfX292bGQgX19jbmZuIGhhZGQoc2hvcnQgeCwgc2hvcnQgeSk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBoYWRkKHVzaG9ydCB4LCB1c2hvcnQgeSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBoYWRkKHNob3J0MiB4LCBzaG9ydDIgeSk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gaGFkZCh1c2hvcnQyIHgsIHVzaG9ydDIgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBoYWRkKHNob3J0MyB4LCBzaG9ydDMgeSk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gaGFkZCh1c2hvcnQzIHgsIHVzaG9ydDMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBoYWRkKHNob3J0NCB4LCBzaG9ydDQgeSk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gaGFkZCh1c2hvcnQ0IHgsIHVzaG9ydDQgeSk7CitzaG9ydDggX19vdmxkIF9fY25mbiBoYWRkKHNob3J0OCB4LCBzaG9ydDggeSk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaGFkZCh1c2hvcnQ4IHgsIHVzaG9ydDggeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gaGFkZChzaG9ydDE2IHgsIHNob3J0MTYgeSk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGhhZGQodXNob3J0MTYgeCwgdXNob3J0MTYgeSk7CitpbnQgX19vdmxkIF9fY25mbiBoYWRkKGludCB4LCBpbnQgeSk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gaGFkZCh1aW50IHgsIHVpbnQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gaGFkZChpbnQyIHgsIGludDIgeSk7Cit1aW50MiBfX292bGQgX19jbmZuIGhhZGQodWludDIgeCwgdWludDIgeSk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gaGFkZChpbnQzIHgsIGludDMgeSk7Cit1aW50MyBfX292bGQgX19jbmZuIGhhZGQodWludDMgeCwgdWludDMgeSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaGFkZChpbnQ0IHgsIGludDQgeSk7Cit1aW50NCBfX292bGQgX19jbmZuIGhhZGQodWludDQgeCwgdWludDQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gaGFkZChpbnQ4IHgsIGludDggeSk7Cit1aW50OCBfX292bGQgX19jbmZuIGhhZGQodWludDggeCwgdWludDggeSk7CitpbnQxNiBfX292bGQgX19jbmZuIGhhZGQoaW50MTYgeCwgaW50MTYgeSk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBoYWRkKHVpbnQxNiB4LCB1aW50MTYgeSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gaGFkZChsb25nIHgsIGxvbmcgeSk7Cit1bG9uZyBfX292bGQgX19jbmZuIGhhZGQodWxvbmcgeCwgdWxvbmcgeSk7Citsb25nMiBfX292bGQgX19jbmZuIGhhZGQobG9uZzIgeCwgbG9uZzIgeSk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBoYWRkKHVsb25nMiB4LCB1bG9uZzIgeSk7Citsb25nMyBfX292bGQgX19jbmZuIGhhZGQobG9uZzMgeCwgbG9uZzMgeSk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBoYWRkKHVsb25nMyB4LCB1bG9uZzMgeSk7Citsb25nNCBfX292bGQgX19jbmZuIGhhZGQobG9uZzQgeCwgbG9uZzQgeSk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBoYWRkKHVsb25nNCB4LCB1bG9uZzQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIGhhZGQobG9uZzggeCwgbG9uZzggeSk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBoYWRkKHVsb25nOCB4LCB1bG9uZzggeSk7Citsb25nMTYgX19vdmxkIF9fY25mbiBoYWRkKGxvbmcxNiB4LCBsb25nMTYgeSk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gaGFkZCh1bG9uZzE2IHgsIHVsb25nMTYgeSk7CisKKy8qKgorICogUmV0dXJucyAoeCArIHkgKyAxKSA+PiAxLiBUaGUgaW50ZXJtZWRpYXRlIHN1bQorICogZG9lcyBub3QgbW9kdWxvIG92ZXJmbG93LgorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gcmhhZGQoY2hhciB4LCBjaGFyIHkpOwordWNoYXIgX19vdmxkIF9fY25mbiByaGFkZCh1Y2hhciB4LCB1Y2hhciB5KTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gcmhhZGQoY2hhcjIgeCwgY2hhcjIgeSk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiByaGFkZCh1Y2hhcjIgeCwgdWNoYXIyIHkpOworY2hhcjMgX19vdmxkIF9fY25mbiByaGFkZChjaGFyMyB4LCBjaGFyMyB5KTsKK3VjaGFyMyBfX292bGQgX19jbmZuIHJoYWRkKHVjaGFyMyB4LCB1Y2hhcjMgeSk7CitjaGFyNCBfX292bGQgX19jbmZuIHJoYWRkKGNoYXI0IHgsIGNoYXI0IHkpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gcmhhZGQodWNoYXI0IHgsIHVjaGFyNCB5KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gcmhhZGQoY2hhcjggeCwgY2hhcjggeSk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiByaGFkZCh1Y2hhcjggeCwgdWNoYXI4IHkpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gcmhhZGQoY2hhcjE2IHgsIGNoYXIxNiB5KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiByaGFkZCh1Y2hhcjE2IHgsIHVjaGFyMTYgeSk7CitzaG9ydCBfX292bGQgX19jbmZuIHJoYWRkKHNob3J0IHgsIHNob3J0IHkpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gcmhhZGQodXNob3J0IHgsIHVzaG9ydCB5KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHJoYWRkKHNob3J0MiB4LCBzaG9ydDIgeSk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gcmhhZGQodXNob3J0MiB4LCB1c2hvcnQyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gcmhhZGQoc2hvcnQzIHgsIHNob3J0MyB5KTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiByaGFkZCh1c2hvcnQzIHgsIHVzaG9ydDMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiByaGFkZChzaG9ydDQgeCwgc2hvcnQ0IHkpOwordXNob3J0NCBfX292bGQgX19jbmZuIHJoYWRkKHVzaG9ydDQgeCwgdXNob3J0NCB5KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHJoYWRkKHNob3J0OCB4LCBzaG9ydDggeSk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gcmhhZGQodXNob3J0OCB4LCB1c2hvcnQ4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIHJoYWRkKHNob3J0MTYgeCwgc2hvcnQxNiB5KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gcmhhZGQodXNob3J0MTYgeCwgdXNob3J0MTYgeSk7CitpbnQgX19vdmxkIF9fY25mbiByaGFkZChpbnQgeCwgaW50IHkpOwordWludCBfX292bGQgX19jbmZuIHJoYWRkKHVpbnQgeCwgdWludCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiByaGFkZChpbnQyIHgsIGludDIgeSk7Cit1aW50MiBfX292bGQgX19jbmZuIHJoYWRkKHVpbnQyIHgsIHVpbnQyIHkpOworaW50MyBfX292bGQgX19jbmZuIHJoYWRkKGludDMgeCwgaW50MyB5KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gcmhhZGQodWludDMgeCwgdWludDMgeSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gcmhhZGQoaW50NCB4LCBpbnQ0IHkpOwordWludDQgX19vdmxkIF9fY25mbiByaGFkZCh1aW50NCB4LCB1aW50NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiByaGFkZChpbnQ4IHgsIGludDggeSk7Cit1aW50OCBfX292bGQgX19jbmZuIHJoYWRkKHVpbnQ4IHgsIHVpbnQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiByaGFkZChpbnQxNiB4LCBpbnQxNiB5KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIHJoYWRkKHVpbnQxNiB4LCB1aW50MTYgeSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gcmhhZGQobG9uZyB4LCBsb25nIHkpOwordWxvbmcgX19vdmxkIF9fY25mbiByaGFkZCh1bG9uZyB4LCB1bG9uZyB5KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gcmhhZGQobG9uZzIgeCwgbG9uZzIgeSk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiByaGFkZCh1bG9uZzIgeCwgdWxvbmcyIHkpOworbG9uZzMgX19vdmxkIF9fY25mbiByaGFkZChsb25nMyB4LCBsb25nMyB5KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIHJoYWRkKHVsb25nMyB4LCB1bG9uZzMgeSk7Citsb25nNCBfX292bGQgX19jbmZuIHJoYWRkKGxvbmc0IHgsIGxvbmc0IHkpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gcmhhZGQodWxvbmc0IHgsIHVsb25nNCB5KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gcmhhZGQobG9uZzggeCwgbG9uZzggeSk7Cit1bG9uZzggX19vdmxkIF9fY25mbiByaGFkZCh1bG9uZzggeCwgdWxvbmc4IHkpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gcmhhZGQobG9uZzE2IHgsIGxvbmcxNiB5KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiByaGFkZCh1bG9uZzE2IHgsIHVsb25nMTYgeSk7CisKKy8qKgorICogUmV0dXJucyBtaW4obWF4KHgsIG1pbnZhbCksIG1heHZhbCkuCisgKiBSZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYgbWludmFsID4gbWF4dmFsLgorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gY2xhbXAoY2hhciB4LCBjaGFyIG1pbnZhbCwgY2hhciBtYXh2YWwpOwordWNoYXIgX19vdmxkIF9fY25mbiBjbGFtcCh1Y2hhciB4LCB1Y2hhciBtaW52YWwsIHVjaGFyIG1heHZhbCk7CitjaGFyMiBfX292bGQgX19jbmZuIGNsYW1wKGNoYXIyIHgsIGNoYXIyIG1pbnZhbCwgY2hhcjIgbWF4dmFsKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNsYW1wKHVjaGFyMiB4LCB1Y2hhcjIgbWludmFsLCB1Y2hhcjIgbWF4dmFsKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY2xhbXAoY2hhcjMgeCwgY2hhcjMgbWludmFsLCBjaGFyMyBtYXh2YWwpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWNoYXIzIHgsIHVjaGFyMyBtaW52YWwsIHVjaGFyMyBtYXh2YWwpOworY2hhcjQgX19vdmxkIF9fY25mbiBjbGFtcChjaGFyNCB4LCBjaGFyNCBtaW52YWwsIGNoYXI0IG1heHZhbCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjbGFtcCh1Y2hhcjQgeCwgdWNoYXI0IG1pbnZhbCwgdWNoYXI0IG1heHZhbCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNsYW1wKGNoYXI4IHgsIGNoYXI4IG1pbnZhbCwgY2hhcjggbWF4dmFsKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNsYW1wKHVjaGFyOCB4LCB1Y2hhcjggbWludmFsLCB1Y2hhcjggbWF4dmFsKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNsYW1wKGNoYXIxNiB4LCBjaGFyMTYgbWludmFsLCBjaGFyMTYgbWF4dmFsKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjbGFtcCh1Y2hhcjE2IHgsIHVjaGFyMTYgbWludmFsLCB1Y2hhcjE2IG1heHZhbCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNsYW1wKHNob3J0IHgsIHNob3J0IG1pbnZhbCwgc2hvcnQgbWF4dmFsKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNsYW1wKHVzaG9ydCB4LCB1c2hvcnQgbWludmFsLCB1c2hvcnQgbWF4dmFsKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNsYW1wKHNob3J0MiB4LCBzaG9ydDIgbWludmFsLCBzaG9ydDIgbWF4dmFsKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjbGFtcCh1c2hvcnQyIHgsIHVzaG9ydDIgbWludmFsLCB1c2hvcnQyIG1heHZhbCk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjbGFtcChzaG9ydDMgeCwgc2hvcnQzIG1pbnZhbCwgc2hvcnQzIG1heHZhbCk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY2xhbXAodXNob3J0MyB4LCB1c2hvcnQzIG1pbnZhbCwgdXNob3J0MyBtYXh2YWwpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY2xhbXAoc2hvcnQ0IHgsIHNob3J0NCBtaW52YWwsIHNob3J0NCBtYXh2YWwpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNsYW1wKHVzaG9ydDQgeCwgdXNob3J0NCBtaW52YWwsIHVzaG9ydDQgbWF4dmFsKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNsYW1wKHNob3J0OCB4LCBzaG9ydDggbWludmFsLCBzaG9ydDggbWF4dmFsKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjbGFtcCh1c2hvcnQ4IHgsIHVzaG9ydDggbWludmFsLCB1c2hvcnQ4IG1heHZhbCk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAoc2hvcnQxNiB4LCBzaG9ydDE2IG1pbnZhbCwgc2hvcnQxNiBtYXh2YWwpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjbGFtcCh1c2hvcnQxNiB4LCB1c2hvcnQxNiBtaW52YWwsIHVzaG9ydDE2IG1heHZhbCk7CitpbnQgX19vdmxkIF9fY25mbiBjbGFtcChpbnQgeCwgaW50IG1pbnZhbCwgaW50IG1heHZhbCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWludCB4LCB1aW50IG1pbnZhbCwgdWludCBtYXh2YWwpOworaW50MiBfX292bGQgX19jbmZuIGNsYW1wKGludDIgeCwgaW50MiBtaW52YWwsIGludDIgbWF4dmFsKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWludDIgeCwgdWludDIgbWludmFsLCB1aW50MiBtYXh2YWwpOworaW50MyBfX292bGQgX19jbmZuIGNsYW1wKGludDMgeCwgaW50MyBtaW52YWwsIGludDMgbWF4dmFsKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWludDMgeCwgdWludDMgbWludmFsLCB1aW50MyBtYXh2YWwpOworaW50NCBfX292bGQgX19jbmZuIGNsYW1wKGludDQgeCwgaW50NCBtaW52YWwsIGludDQgbWF4dmFsKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWludDQgeCwgdWludDQgbWludmFsLCB1aW50NCBtYXh2YWwpOworaW50OCBfX292bGQgX19jbmZuIGNsYW1wKGludDggeCwgaW50OCBtaW52YWwsIGludDggbWF4dmFsKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWludDggeCwgdWludDggbWludmFsLCB1aW50OCBtYXh2YWwpOworaW50MTYgX19vdmxkIF9fY25mbiBjbGFtcChpbnQxNiB4LCBpbnQxNiBtaW52YWwsIGludDE2IG1heHZhbCk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjbGFtcCh1aW50MTYgeCwgdWludDE2IG1pbnZhbCwgdWludDE2IG1heHZhbCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY2xhbXAobG9uZyB4LCBsb25nIG1pbnZhbCwgbG9uZyBtYXh2YWwpOwordWxvbmcgX19vdmxkIF9fY25mbiBjbGFtcCh1bG9uZyB4LCB1bG9uZyBtaW52YWwsIHVsb25nIG1heHZhbCk7Citsb25nMiBfX292bGQgX19jbmZuIGNsYW1wKGxvbmcyIHgsIGxvbmcyIG1pbnZhbCwgbG9uZzIgbWF4dmFsKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNsYW1wKHVsb25nMiB4LCB1bG9uZzIgbWludmFsLCB1bG9uZzIgbWF4dmFsKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY2xhbXAobG9uZzMgeCwgbG9uZzMgbWludmFsLCBsb25nMyBtYXh2YWwpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWxvbmczIHgsIHVsb25nMyBtaW52YWwsIHVsb25nMyBtYXh2YWwpOworbG9uZzQgX19vdmxkIF9fY25mbiBjbGFtcChsb25nNCB4LCBsb25nNCBtaW52YWwsIGxvbmc0IG1heHZhbCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjbGFtcCh1bG9uZzQgeCwgdWxvbmc0IG1pbnZhbCwgdWxvbmc0IG1heHZhbCk7Citsb25nOCBfX292bGQgX19jbmZuIGNsYW1wKGxvbmc4IHgsIGxvbmc4IG1pbnZhbCwgbG9uZzggbWF4dmFsKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNsYW1wKHVsb25nOCB4LCB1bG9uZzggbWludmFsLCB1bG9uZzggbWF4dmFsKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNsYW1wKGxvbmcxNiB4LCBsb25nMTYgbWludmFsLCBsb25nMTYgbWF4dmFsKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjbGFtcCh1bG9uZzE2IHgsIHVsb25nMTYgbWludmFsLCB1bG9uZzE2IG1heHZhbCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY2xhbXAoY2hhciB4LCBjaGFyIG1pbnZhbCwgY2hhciBtYXh2YWwpOwordWNoYXIgX19vdmxkIF9fY25mbiBjbGFtcCh1Y2hhciB4LCB1Y2hhciBtaW52YWwsIHVjaGFyIG1heHZhbCk7CitjaGFyMiBfX292bGQgX19jbmZuIGNsYW1wKGNoYXIyIHgsIGNoYXIgbWludmFsLCBjaGFyIG1heHZhbCk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjbGFtcCh1Y2hhcjIgeCwgdWNoYXIgbWludmFsLCB1Y2hhciBtYXh2YWwpOworY2hhcjMgX19vdmxkIF9fY25mbiBjbGFtcChjaGFyMyB4LCBjaGFyIG1pbnZhbCwgY2hhciBtYXh2YWwpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWNoYXIzIHgsIHVjaGFyIG1pbnZhbCwgdWNoYXIgbWF4dmFsKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY2xhbXAoY2hhcjQgeCwgY2hhciBtaW52YWwsIGNoYXIgbWF4dmFsKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNsYW1wKHVjaGFyNCB4LCB1Y2hhciBtaW52YWwsIHVjaGFyIG1heHZhbCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNsYW1wKGNoYXI4IHgsIGNoYXIgbWludmFsLCBjaGFyIG1heHZhbCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjbGFtcCh1Y2hhcjggeCwgdWNoYXIgbWludmFsLCB1Y2hhciBtYXh2YWwpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAoY2hhcjE2IHgsIGNoYXIgbWludmFsLCBjaGFyIG1heHZhbCk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWNoYXIxNiB4LCB1Y2hhciBtaW52YWwsIHVjaGFyIG1heHZhbCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNsYW1wKHNob3J0IHgsIHNob3J0IG1pbnZhbCwgc2hvcnQgbWF4dmFsKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNsYW1wKHVzaG9ydCB4LCB1c2hvcnQgbWludmFsLCB1c2hvcnQgbWF4dmFsKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNsYW1wKHNob3J0MiB4LCBzaG9ydCBtaW52YWwsIHNob3J0IG1heHZhbCk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY2xhbXAodXNob3J0MiB4LCB1c2hvcnQgbWludmFsLCB1c2hvcnQgbWF4dmFsKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNsYW1wKHNob3J0MyB4LCBzaG9ydCBtaW52YWwsIHNob3J0IG1heHZhbCk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY2xhbXAodXNob3J0MyB4LCB1c2hvcnQgbWludmFsLCB1c2hvcnQgbWF4dmFsKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNsYW1wKHNob3J0NCB4LCBzaG9ydCBtaW52YWwsIHNob3J0IG1heHZhbCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY2xhbXAodXNob3J0NCB4LCB1c2hvcnQgbWludmFsLCB1c2hvcnQgbWF4dmFsKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNsYW1wKHNob3J0OCB4LCBzaG9ydCBtaW52YWwsIHNob3J0IG1heHZhbCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY2xhbXAodXNob3J0OCB4LCB1c2hvcnQgbWludmFsLCB1c2hvcnQgbWF4dmFsKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjbGFtcChzaG9ydDE2IHgsIHNob3J0IG1pbnZhbCwgc2hvcnQgbWF4dmFsKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAodXNob3J0MTYgeCwgdXNob3J0IG1pbnZhbCwgdXNob3J0IG1heHZhbCk7CitpbnQgX19vdmxkIF9fY25mbiBjbGFtcChpbnQgeCwgaW50IG1pbnZhbCwgaW50IG1heHZhbCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWludCB4LCB1aW50IG1pbnZhbCwgdWludCBtYXh2YWwpOworaW50MiBfX292bGQgX19jbmZuIGNsYW1wKGludDIgeCwgaW50IG1pbnZhbCwgaW50IG1heHZhbCk7Cit1aW50MiBfX292bGQgX19jbmZuIGNsYW1wKHVpbnQyIHgsIHVpbnQgbWludmFsLCB1aW50IG1heHZhbCk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY2xhbXAoaW50MyB4LCBpbnQgbWludmFsLCBpbnQgbWF4dmFsKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWludDMgeCwgdWludCBtaW52YWwsIHVpbnQgbWF4dmFsKTsKK2ludDQgX19vdmxkIF9fY25mbiBjbGFtcChpbnQ0IHgsIGludCBtaW52YWwsIGludCBtYXh2YWwpOwordWludDQgX19vdmxkIF9fY25mbiBjbGFtcCh1aW50NCB4LCB1aW50IG1pbnZhbCwgdWludCBtYXh2YWwpOworaW50OCBfX292bGQgX19jbmZuIGNsYW1wKGludDggeCwgaW50IG1pbnZhbCwgaW50IG1heHZhbCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNsYW1wKHVpbnQ4IHgsIHVpbnQgbWludmFsLCB1aW50IG1heHZhbCk7CitpbnQxNiBfX292bGQgX19jbmZuIGNsYW1wKGludDE2IHgsIGludCBtaW52YWwsIGludCBtYXh2YWwpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWludDE2IHgsIHVpbnQgbWludmFsLCB1aW50IG1heHZhbCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY2xhbXAobG9uZyB4LCBsb25nIG1pbnZhbCwgbG9uZyBtYXh2YWwpOwordWxvbmcgX19vdmxkIF9fY25mbiBjbGFtcCh1bG9uZyB4LCB1bG9uZyBtaW52YWwsIHVsb25nIG1heHZhbCk7Citsb25nMiBfX292bGQgX19jbmZuIGNsYW1wKGxvbmcyIHgsIGxvbmcgbWludmFsLCBsb25nIG1heHZhbCk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjbGFtcCh1bG9uZzIgeCwgdWxvbmcgbWludmFsLCB1bG9uZyBtYXh2YWwpOworbG9uZzMgX19vdmxkIF9fY25mbiBjbGFtcChsb25nMyB4LCBsb25nIG1pbnZhbCwgbG9uZyBtYXh2YWwpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWxvbmczIHgsIHVsb25nIG1pbnZhbCwgdWxvbmcgbWF4dmFsKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY2xhbXAobG9uZzQgeCwgbG9uZyBtaW52YWwsIGxvbmcgbWF4dmFsKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNsYW1wKHVsb25nNCB4LCB1bG9uZyBtaW52YWwsIHVsb25nIG1heHZhbCk7Citsb25nOCBfX292bGQgX19jbmZuIGNsYW1wKGxvbmc4IHgsIGxvbmcgbWludmFsLCBsb25nIG1heHZhbCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjbGFtcCh1bG9uZzggeCwgdWxvbmcgbWludmFsLCB1bG9uZyBtYXh2YWwpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAobG9uZzE2IHgsIGxvbmcgbWludmFsLCBsb25nIG1heHZhbCk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWxvbmcxNiB4LCB1bG9uZyBtaW52YWwsIHVsb25nIG1heHZhbCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgMC1iaXRzIGluIHgsIHN0YXJ0aW5nCisgKiBhdCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgcG9zaXRpb24uCisgKi8KK2NoYXIgX19vdmxkIF9fY25mbiBjbHooY2hhciB4KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY2x6KHVjaGFyIHgpOworY2hhcjIgX19vdmxkIF9fY25mbiBjbHooY2hhcjIgeCk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjbHoodWNoYXIyIHgpOworY2hhcjMgX19vdmxkIF9fY25mbiBjbHooY2hhcjMgeCk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjbHoodWNoYXIzIHgpOworY2hhcjQgX19vdmxkIF9fY25mbiBjbHooY2hhcjQgeCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjbHoodWNoYXI0IHgpOworY2hhcjggX19vdmxkIF9fY25mbiBjbHooY2hhcjggeCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjbHoodWNoYXI4IHgpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY2x6KGNoYXIxNiB4KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjbHoodWNoYXIxNiB4KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY2x6KHNob3J0IHgpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY2x6KHVzaG9ydCB4KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNseihzaG9ydDIgeCk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY2x6KHVzaG9ydDIgeCk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjbHooc2hvcnQzIHgpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNseih1c2hvcnQzIHgpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY2x6KHNob3J0NCB4KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjbHoodXNob3J0NCB4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNseihzaG9ydDggeCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY2x6KHVzaG9ydDggeCk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY2x6KHNob3J0MTYgeCk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNseih1c2hvcnQxNiB4KTsKK2ludCBfX292bGQgX19jbmZuIGNseihpbnQgeCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY2x6KHVpbnQgeCk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY2x6KGludDIgeCk7Cit1aW50MiBfX292bGQgX19jbmZuIGNseih1aW50MiB4KTsKK2ludDMgX19vdmxkIF9fY25mbiBjbHooaW50MyB4KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY2x6KHVpbnQzIHgpOworaW50NCBfX292bGQgX19jbmZuIGNseihpbnQ0IHgpOwordWludDQgX19vdmxkIF9fY25mbiBjbHoodWludDQgeCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY2x6KGludDggeCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNseih1aW50OCB4KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY2x6KGludDE2IHgpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY2x6KHVpbnQxNiB4KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjbHoobG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY2x6KHVsb25nIHgpOworbG9uZzIgX19vdmxkIF9fY25mbiBjbHoobG9uZzIgeCk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjbHoodWxvbmcyIHgpOworbG9uZzMgX19vdmxkIF9fY25mbiBjbHoobG9uZzMgeCk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjbHoodWxvbmczIHgpOworbG9uZzQgX19vdmxkIF9fY25mbiBjbHoobG9uZzQgeCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjbHoodWxvbmc0IHgpOworbG9uZzggX19vdmxkIF9fY25mbiBjbHoobG9uZzggeCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjbHoodWxvbmc4IHgpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY2x6KGxvbmcxNiB4KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjbHoodWxvbmcxNiB4KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjb3VudCBvZiB0cmFpbGluZyAwLWJpdHMgaW4geC4gSWYgeCBpcyAwLAorICogcmV0dXJucyB0aGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB0eXBlIG9mIHggb3IKKyAqIGNvbXBvbmVudCB0eXBlIG9mIHgsIGlmIHggaXMgYSB2ZWN0b3IuCisgKi8KKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorY2hhciBfX292bGQgY3R6KGNoYXIgeCk7Cit1Y2hhciBfX292bGQgY3R6KHVjaGFyIHgpOworY2hhcjIgX19vdmxkIGN0eihjaGFyMiB4KTsKK3VjaGFyMiBfX292bGQgY3R6KHVjaGFyMiB4KTsKK2NoYXIzIF9fb3ZsZCBjdHooY2hhcjMgeCk7Cit1Y2hhcjMgX19vdmxkIGN0eih1Y2hhcjMgeCk7CitjaGFyNCBfX292bGQgY3R6KGNoYXI0IHgpOwordWNoYXI0IF9fb3ZsZCBjdHoodWNoYXI0IHgpOworY2hhcjggX19vdmxkIGN0eihjaGFyOCB4KTsKK3VjaGFyOCBfX292bGQgY3R6KHVjaGFyOCB4KTsKK2NoYXIxNiBfX292bGQgY3R6KGNoYXIxNiB4KTsKK3VjaGFyMTYgX19vdmxkIGN0eih1Y2hhcjE2IHgpOworc2hvcnQgX19vdmxkIGN0eihzaG9ydCB4KTsKK3VzaG9ydCBfX292bGQgY3R6KHVzaG9ydCB4KTsKK3Nob3J0MiBfX292bGQgY3R6KHNob3J0MiB4KTsKK3VzaG9ydDIgX19vdmxkIGN0eih1c2hvcnQyIHgpOworc2hvcnQzIF9fb3ZsZCBjdHooc2hvcnQzIHgpOwordXNob3J0MyBfX292bGQgY3R6KHVzaG9ydDMgeCk7CitzaG9ydDQgX19vdmxkIGN0eihzaG9ydDQgeCk7Cit1c2hvcnQ0IF9fb3ZsZCBjdHoodXNob3J0NCB4KTsKK3Nob3J0OCBfX292bGQgY3R6KHNob3J0OCB4KTsKK3VzaG9ydDggX19vdmxkIGN0eih1c2hvcnQ4IHgpOworc2hvcnQxNiBfX292bGQgY3R6KHNob3J0MTYgeCk7Cit1c2hvcnQxNiBfX292bGQgY3R6KHVzaG9ydDE2IHgpOworaW50IF9fb3ZsZCBjdHooaW50IHgpOwordWludCBfX292bGQgY3R6KHVpbnQgeCk7CitpbnQyIF9fb3ZsZCBjdHooaW50MiB4KTsKK3VpbnQyIF9fb3ZsZCBjdHoodWludDIgeCk7CitpbnQzIF9fb3ZsZCBjdHooaW50MyB4KTsKK3VpbnQzIF9fb3ZsZCBjdHoodWludDMgeCk7CitpbnQ0IF9fb3ZsZCBjdHooaW50NCB4KTsKK3VpbnQ0IF9fb3ZsZCBjdHoodWludDQgeCk7CitpbnQ4IF9fb3ZsZCBjdHooaW50OCB4KTsKK3VpbnQ4IF9fb3ZsZCBjdHoodWludDggeCk7CitpbnQxNiBfX292bGQgY3R6KGludDE2IHgpOwordWludDE2IF9fb3ZsZCBjdHoodWludDE2IHgpOworbG9uZyBfX292bGQgY3R6KGxvbmcgeCk7Cit1bG9uZyBfX292bGQgY3R6KHVsb25nIHgpOworbG9uZzIgX19vdmxkIGN0eihsb25nMiB4KTsKK3Vsb25nMiBfX292bGQgY3R6KHVsb25nMiB4KTsKK2xvbmczIF9fb3ZsZCBjdHoobG9uZzMgeCk7Cit1bG9uZzMgX19vdmxkIGN0eih1bG9uZzMgeCk7Citsb25nNCBfX292bGQgY3R6KGxvbmc0IHgpOwordWxvbmc0IF9fb3ZsZCBjdHoodWxvbmc0IHgpOworbG9uZzggX19vdmxkIGN0eihsb25nOCB4KTsKK3Vsb25nOCBfX292bGQgY3R6KHVsb25nOCB4KTsKK2xvbmcxNiBfX292bGQgY3R6KGxvbmcxNiB4KTsKK3Vsb25nMTYgX19vdmxkIGN0eih1bG9uZzE2IHgpOworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBSZXR1cm5zIG11bF9oaShhLCBiKSArIGMuCisgKi8KK2NoYXIgX19vdmxkIF9fY25mbiBtYWRfaGkoY2hhciBhLCBjaGFyIGIsIGNoYXIgYyk7Cit1Y2hhciBfX292bGQgX19jbmZuIG1hZF9oaSh1Y2hhciBhLCB1Y2hhciBiLCB1Y2hhciBjKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGNoYXIyIGEsIGNoYXIyIGIsIGNoYXIyIGMpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVjaGFyMiBhLCB1Y2hhcjIgYiwgdWNoYXIyIGMpOworY2hhcjMgX19vdmxkIF9fY25mbiBtYWRfaGkoY2hhcjMgYSwgY2hhcjMgYiwgY2hhcjMgYyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBtYWRfaGkodWNoYXIzIGEsIHVjaGFyMyBiLCB1Y2hhcjMgYyk7CitjaGFyNCBfX292bGQgX19jbmZuIG1hZF9oaShjaGFyNCBhLCBjaGFyNCBiLCBjaGFyNCBjKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIG1hZF9oaSh1Y2hhcjQgYSwgdWNoYXI0IGIsIHVjaGFyNCBjKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGNoYXI4IGEsIGNoYXI4IGIsIGNoYXI4IGMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVjaGFyOCBhLCB1Y2hhcjggYiwgdWNoYXI4IGMpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGNoYXIxNiBhLCBjaGFyMTYgYiwgY2hhcjE2IGMpOwordWNoYXIxNiBfX292bGQgX19jbmZuIG1hZF9oaSh1Y2hhcjE2IGEsIHVjaGFyMTYgYiwgdWNoYXIxNiBjKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHNob3J0IGEsIHNob3J0IGIsIHNob3J0IGMpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVzaG9ydCBhLCB1c2hvcnQgYiwgdXNob3J0IGMpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHNob3J0MiBhLCBzaG9ydDIgYiwgc2hvcnQyIGMpOwordXNob3J0MiBfX292bGQgX19jbmZuIG1hZF9oaSh1c2hvcnQyIGEsIHVzaG9ydDIgYiwgdXNob3J0MiBjKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIG1hZF9oaShzaG9ydDMgYSwgc2hvcnQzIGIsIHNob3J0MyBjKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBtYWRfaGkodXNob3J0MyBhLCB1c2hvcnQzIGIsIHVzaG9ydDMgYyk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBtYWRfaGkoc2hvcnQ0IGEsIHNob3J0NCBiLCBzaG9ydDQgYyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVzaG9ydDQgYSwgdXNob3J0NCBiLCB1c2hvcnQ0IGMpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHNob3J0OCBhLCBzaG9ydDggYiwgc2hvcnQ4IGMpOwordXNob3J0OCBfX292bGQgX19jbmZuIG1hZF9oaSh1c2hvcnQ4IGEsIHVzaG9ydDggYiwgdXNob3J0OCBjKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBtYWRfaGkoc2hvcnQxNiBhLCBzaG9ydDE2IGIsIHNob3J0MTYgYyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIG1hZF9oaSh1c2hvcnQxNiBhLCB1c2hvcnQxNiBiLCB1c2hvcnQxNiBjKTsKK2ludCBfX292bGQgX19jbmZuIG1hZF9oaShpbnQgYSwgaW50IGIsIGludCBjKTsKK3VpbnQgX19vdmxkIF9fY25mbiBtYWRfaGkodWludCBhLCB1aW50IGIsIHVpbnQgYyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGludDIgYSwgaW50MiBiLCBpbnQyIGMpOwordWludDIgX19vdmxkIF9fY25mbiBtYWRfaGkodWludDIgYSwgdWludDIgYiwgdWludDIgYyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGludDMgYSwgaW50MyBiLCBpbnQzIGMpOwordWludDMgX19vdmxkIF9fY25mbiBtYWRfaGkodWludDMgYSwgdWludDMgYiwgdWludDMgYyk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGludDQgYSwgaW50NCBiLCBpbnQ0IGMpOwordWludDQgX19vdmxkIF9fY25mbiBtYWRfaGkodWludDQgYSwgdWludDQgYiwgdWludDQgYyk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGludDggYSwgaW50OCBiLCBpbnQ4IGMpOwordWludDggX19vdmxkIF9fY25mbiBtYWRfaGkodWludDggYSwgdWludDggYiwgdWludDggYyk7CitpbnQxNiBfX292bGQgX19jbmZuIG1hZF9oaShpbnQxNiBhLCBpbnQxNiBiLCBpbnQxNiBjKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIG1hZF9oaSh1aW50MTYgYSwgdWludDE2IGIsIHVpbnQxNiBjKTsKK2xvbmcgX19vdmxkIF9fY25mbiBtYWRfaGkobG9uZyBhLCBsb25nIGIsIGxvbmcgYyk7Cit1bG9uZyBfX292bGQgX19jbmZuIG1hZF9oaSh1bG9uZyBhLCB1bG9uZyBiLCB1bG9uZyBjKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGxvbmcyIGEsIGxvbmcyIGIsIGxvbmcyIGMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVsb25nMiBhLCB1bG9uZzIgYiwgdWxvbmcyIGMpOworbG9uZzMgX19vdmxkIF9fY25mbiBtYWRfaGkobG9uZzMgYSwgbG9uZzMgYiwgbG9uZzMgYyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBtYWRfaGkodWxvbmczIGEsIHVsb25nMyBiLCB1bG9uZzMgYyk7Citsb25nNCBfX292bGQgX19jbmZuIG1hZF9oaShsb25nNCBhLCBsb25nNCBiLCBsb25nNCBjKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIG1hZF9oaSh1bG9uZzQgYSwgdWxvbmc0IGIsIHVsb25nNCBjKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGxvbmc4IGEsIGxvbmc4IGIsIGxvbmc4IGMpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVsb25nOCBhLCB1bG9uZzggYiwgdWxvbmc4IGMpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGxvbmcxNiBhLCBsb25nMTYgYiwgbG9uZzE2IGMpOwordWxvbmcxNiBfX292bGQgX19jbmZuIG1hZF9oaSh1bG9uZzE2IGEsIHVsb25nMTYgYiwgdWxvbmcxNiBjKTsKKworLyoqCisgKiBSZXR1cm5zIGEgKiBiICsgYyBhbmQgc2F0dXJhdGVzIHRoZSByZXN1bHQuCisgKi8KK2NoYXIgX19vdmxkIF9fY25mbiBtYWRfc2F0KGNoYXIgYSwgY2hhciBiLCBjaGFyIGMpOwordWNoYXIgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVjaGFyIGEsIHVjaGFyIGIsIHVjaGFyIGMpOworY2hhcjIgX19vdmxkIF9fY25mbiBtYWRfc2F0KGNoYXIyIGEsIGNoYXIyIGIsIGNoYXIyIGMpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1Y2hhcjIgYSwgdWNoYXIyIGIsIHVjaGFyMiBjKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChjaGFyMyBhLCBjaGFyMyBiLCBjaGFyMyBjKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIG1hZF9zYXQodWNoYXIzIGEsIHVjaGFyMyBiLCB1Y2hhcjMgYyk7CitjaGFyNCBfX292bGQgX19jbmZuIG1hZF9zYXQoY2hhcjQgYSwgY2hhcjQgYiwgY2hhcjQgYyk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVjaGFyNCBhLCB1Y2hhcjQgYiwgdWNoYXI0IGMpOworY2hhcjggX19vdmxkIF9fY25mbiBtYWRfc2F0KGNoYXI4IGEsIGNoYXI4IGIsIGNoYXI4IGMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1Y2hhcjggYSwgdWNoYXI4IGIsIHVjaGFyOCBjKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIG1hZF9zYXQoY2hhcjE2IGEsIGNoYXIxNiBiLCBjaGFyMTYgYyk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1Y2hhcjE2IGEsIHVjaGFyMTYgYiwgdWNoYXIxNiBjKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChzaG9ydCBhLCBzaG9ydCBiLCBzaG9ydCBjKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIG1hZF9zYXQodXNob3J0IGEsIHVzaG9ydCBiLCB1c2hvcnQgYyk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBtYWRfc2F0KHNob3J0MiBhLCBzaG9ydDIgYiwgc2hvcnQyIGMpOwordXNob3J0MiBfX292bGQgX19jbmZuIG1hZF9zYXQodXNob3J0MiBhLCB1c2hvcnQyIGIsIHVzaG9ydDIgYyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBtYWRfc2F0KHNob3J0MyBhLCBzaG9ydDMgYiwgc2hvcnQzIGMpOwordXNob3J0MyBfX292bGQgX19jbmZuIG1hZF9zYXQodXNob3J0MyBhLCB1c2hvcnQzIGIsIHVzaG9ydDMgYyk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBtYWRfc2F0KHNob3J0NCBhLCBzaG9ydDQgYiwgc2hvcnQ0IGMpOwordXNob3J0NCBfX292bGQgX19jbmZuIG1hZF9zYXQodXNob3J0NCBhLCB1c2hvcnQ0IGIsIHVzaG9ydDQgYyk7CitzaG9ydDggX19vdmxkIF9fY25mbiBtYWRfc2F0KHNob3J0OCBhLCBzaG9ydDggYiwgc2hvcnQ4IGMpOwordXNob3J0OCBfX292bGQgX19jbmZuIG1hZF9zYXQodXNob3J0OCBhLCB1c2hvcnQ4IGIsIHVzaG9ydDggYyk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChzaG9ydDE2IGEsIHNob3J0MTYgYiwgc2hvcnQxNiBjKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1c2hvcnQxNiBhLCB1c2hvcnQxNiBiLCB1c2hvcnQxNiBjKTsKK2ludCBfX292bGQgX19jbmZuIG1hZF9zYXQoaW50IGEsIGludCBiLCBpbnQgYyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1aW50IGEsIHVpbnQgYiwgdWludCBjKTsKK2ludDIgX19vdmxkIF9fY25mbiBtYWRfc2F0KGludDIgYSwgaW50MiBiLCBpbnQyIGMpOwordWludDIgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVpbnQyIGEsIHVpbnQyIGIsIHVpbnQyIGMpOworaW50MyBfX292bGQgX19jbmZuIG1hZF9zYXQoaW50MyBhLCBpbnQzIGIsIGludDMgYyk7Cit1aW50MyBfX292bGQgX19jbmZuIG1hZF9zYXQodWludDMgYSwgdWludDMgYiwgdWludDMgYyk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChpbnQ0IGEsIGludDQgYiwgaW50NCBjKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1aW50NCBhLCB1aW50NCBiLCB1aW50NCBjKTsKK2ludDggX19vdmxkIF9fY25mbiBtYWRfc2F0KGludDggYSwgaW50OCBiLCBpbnQ4IGMpOwordWludDggX19vdmxkIF9fY25mbiBtYWRfc2F0KHVpbnQ4IGEsIHVpbnQ4IGIsIHVpbnQ4IGMpOworaW50MTYgX19vdmxkIF9fY25mbiBtYWRfc2F0KGludDE2IGEsIGludDE2IGIsIGludDE2IGMpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1aW50MTYgYSwgdWludDE2IGIsIHVpbnQxNiBjKTsKK2xvbmcgX19vdmxkIF9fY25mbiBtYWRfc2F0KGxvbmcgYSwgbG9uZyBiLCBsb25nIGMpOwordWxvbmcgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVsb25nIGEsIHVsb25nIGIsIHVsb25nIGMpOworbG9uZzIgX19vdmxkIF9fY25mbiBtYWRfc2F0KGxvbmcyIGEsIGxvbmcyIGIsIGxvbmcyIGMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1bG9uZzIgYSwgdWxvbmcyIGIsIHVsb25nMiBjKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChsb25nMyBhLCBsb25nMyBiLCBsb25nMyBjKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIG1hZF9zYXQodWxvbmczIGEsIHVsb25nMyBiLCB1bG9uZzMgYyk7Citsb25nNCBfX292bGQgX19jbmZuIG1hZF9zYXQobG9uZzQgYSwgbG9uZzQgYiwgbG9uZzQgYyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVsb25nNCBhLCB1bG9uZzQgYiwgdWxvbmc0IGMpOworbG9uZzggX19vdmxkIF9fY25mbiBtYWRfc2F0KGxvbmc4IGEsIGxvbmc4IGIsIGxvbmc4IGMpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1bG9uZzggYSwgdWxvbmc4IGIsIHVsb25nOCBjKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIG1hZF9zYXQobG9uZzE2IGEsIGxvbmcxNiBiLCBsb25nMTYgYyk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1bG9uZzE2IGEsIHVsb25nMTYgYiwgdWxvbmcxNiBjKTsKKworLyoqCisgKiBSZXR1cm5zIHkgaWYgeCA8IHksIG90aGVyd2lzZSBpdCByZXR1cm5zIHguCisgKi8KK2NoYXIgX19vdmxkIF9fY25mbiBtYXgoY2hhciB4LCBjaGFyIHkpOwordWNoYXIgX19vdmxkIF9fY25mbiBtYXgodWNoYXIgeCwgdWNoYXIgeSk7CitjaGFyMiBfX292bGQgX19jbmZuIG1heChjaGFyMiB4LCBjaGFyMiB5KTsKK3VjaGFyMiBfX292bGQgX19jbmZuIG1heCh1Y2hhcjIgeCwgdWNoYXIyIHkpOworY2hhcjMgX19vdmxkIF9fY25mbiBtYXgoY2hhcjMgeCwgY2hhcjMgeSk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBtYXgodWNoYXIzIHgsIHVjaGFyMyB5KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gbWF4KGNoYXI0IHgsIGNoYXI0IHkpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gbWF4KHVjaGFyNCB4LCB1Y2hhcjQgeSk7CitjaGFyOCBfX292bGQgX19jbmZuIG1heChjaGFyOCB4LCBjaGFyOCB5KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIG1heCh1Y2hhcjggeCwgdWNoYXI4IHkpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gbWF4KGNoYXIxNiB4LCBjaGFyMTYgeSk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gbWF4KHVjaGFyMTYgeCwgdWNoYXIxNiB5KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gbWF4KHNob3J0IHgsIHNob3J0IHkpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gbWF4KHVzaG9ydCB4LCB1c2hvcnQgeSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBtYXgoc2hvcnQyIHgsIHNob3J0MiB5KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBtYXgodXNob3J0MiB4LCB1c2hvcnQyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gbWF4KHNob3J0MyB4LCBzaG9ydDMgeSk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gbWF4KHVzaG9ydDMgeCwgdXNob3J0MyB5KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIG1heChzaG9ydDQgeCwgc2hvcnQ0IHkpOwordXNob3J0NCBfX292bGQgX19jbmZuIG1heCh1c2hvcnQ0IHgsIHVzaG9ydDQgeSk7CitzaG9ydDggX19vdmxkIF9fY25mbiBtYXgoc2hvcnQ4IHgsIHNob3J0OCB5KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBtYXgodXNob3J0OCB4LCB1c2hvcnQ4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIG1heChzaG9ydDE2IHgsIHNob3J0MTYgeSk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIG1heCh1c2hvcnQxNiB4LCB1c2hvcnQxNiB5KTsKK2ludCBfX292bGQgX19jbmZuIG1heChpbnQgeCwgaW50IHkpOwordWludCBfX292bGQgX19jbmZuIG1heCh1aW50IHgsIHVpbnQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gbWF4KGludDIgeCwgaW50MiB5KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gbWF4KHVpbnQyIHgsIHVpbnQyIHkpOworaW50MyBfX292bGQgX19jbmZuIG1heChpbnQzIHgsIGludDMgeSk7Cit1aW50MyBfX292bGQgX19jbmZuIG1heCh1aW50MyB4LCB1aW50MyB5KTsKK2ludDQgX19vdmxkIF9fY25mbiBtYXgoaW50NCB4LCBpbnQ0IHkpOwordWludDQgX19vdmxkIF9fY25mbiBtYXgodWludDQgeCwgdWludDQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gbWF4KGludDggeCwgaW50OCB5KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gbWF4KHVpbnQ4IHgsIHVpbnQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBtYXgoaW50MTYgeCwgaW50MTYgeSk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBtYXgodWludDE2IHgsIHVpbnQxNiB5KTsKK2xvbmcgX19vdmxkIF9fY25mbiBtYXgobG9uZyB4LCBsb25nIHkpOwordWxvbmcgX19vdmxkIF9fY25mbiBtYXgodWxvbmcgeCwgdWxvbmcgeSk7Citsb25nMiBfX292bGQgX19jbmZuIG1heChsb25nMiB4LCBsb25nMiB5KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIG1heCh1bG9uZzIgeCwgdWxvbmcyIHkpOworbG9uZzMgX19vdmxkIF9fY25mbiBtYXgobG9uZzMgeCwgbG9uZzMgeSk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBtYXgodWxvbmczIHgsIHVsb25nMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gbWF4KGxvbmc0IHgsIGxvbmc0IHkpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gbWF4KHVsb25nNCB4LCB1bG9uZzQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIG1heChsb25nOCB4LCBsb25nOCB5KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIG1heCh1bG9uZzggeCwgdWxvbmc4IHkpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gbWF4KGxvbmcxNiB4LCBsb25nMTYgeSk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gbWF4KHVsb25nMTYgeCwgdWxvbmcxNiB5KTsKK2NoYXIgX19vdmxkIF9fY25mbiBtYXgoY2hhciB4LCBjaGFyIHkpOwordWNoYXIgX19vdmxkIF9fY25mbiBtYXgodWNoYXIgeCwgdWNoYXIgeSk7CitjaGFyMiBfX292bGQgX19jbmZuIG1heChjaGFyMiB4LCBjaGFyIHkpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gbWF4KHVjaGFyMiB4LCB1Y2hhciB5KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gbWF4KGNoYXIzIHgsIGNoYXIgeSk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBtYXgodWNoYXIzIHgsIHVjaGFyIHkpOworY2hhcjQgX19vdmxkIF9fY25mbiBtYXgoY2hhcjQgeCwgY2hhciB5KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIG1heCh1Y2hhcjQgeCwgdWNoYXIgeSk7CitjaGFyOCBfX292bGQgX19jbmZuIG1heChjaGFyOCB4LCBjaGFyIHkpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gbWF4KHVjaGFyOCB4LCB1Y2hhciB5KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIG1heChjaGFyMTYgeCwgY2hhciB5KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBtYXgodWNoYXIxNiB4LCB1Y2hhciB5KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gbWF4KHNob3J0IHgsIHNob3J0IHkpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gbWF4KHVzaG9ydCB4LCB1c2hvcnQgeSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBtYXgoc2hvcnQyIHgsIHNob3J0IHkpOwordXNob3J0MiBfX292bGQgX19jbmZuIG1heCh1c2hvcnQyIHgsIHVzaG9ydCB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIG1heChzaG9ydDMgeCwgc2hvcnQgeSk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gbWF4KHVzaG9ydDMgeCwgdXNob3J0IHkpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gbWF4KHNob3J0NCB4LCBzaG9ydCB5KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBtYXgodXNob3J0NCB4LCB1c2hvcnQgeSk7CitzaG9ydDggX19vdmxkIF9fY25mbiBtYXgoc2hvcnQ4IHgsIHNob3J0IHkpOwordXNob3J0OCBfX292bGQgX19jbmZuIG1heCh1c2hvcnQ4IHgsIHVzaG9ydCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBtYXgoc2hvcnQxNiB4LCBzaG9ydCB5KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gbWF4KHVzaG9ydDE2IHgsIHVzaG9ydCB5KTsKK2ludCBfX292bGQgX19jbmZuIG1heChpbnQgeCwgaW50IHkpOwordWludCBfX292bGQgX19jbmZuIG1heCh1aW50IHgsIHVpbnQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gbWF4KGludDIgeCwgaW50IHkpOwordWludDIgX19vdmxkIF9fY25mbiBtYXgodWludDIgeCwgdWludCB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBtYXgoaW50MyB4LCBpbnQgeSk7Cit1aW50MyBfX292bGQgX19jbmZuIG1heCh1aW50MyB4LCB1aW50IHkpOworaW50NCBfX292bGQgX19jbmZuIG1heChpbnQ0IHgsIGludCB5KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gbWF4KHVpbnQ0IHgsIHVpbnQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gbWF4KGludDggeCwgaW50IHkpOwordWludDggX19vdmxkIF9fY25mbiBtYXgodWludDggeCwgdWludCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gbWF4KGludDE2IHgsIGludCB5KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIG1heCh1aW50MTYgeCwgdWludCB5KTsKK2xvbmcgX19vdmxkIF9fY25mbiBtYXgobG9uZyB4LCBsb25nIHkpOwordWxvbmcgX19vdmxkIF9fY25mbiBtYXgodWxvbmcgeCwgdWxvbmcgeSk7Citsb25nMiBfX292bGQgX19jbmZuIG1heChsb25nMiB4LCBsb25nIHkpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gbWF4KHVsb25nMiB4LCB1bG9uZyB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gbWF4KGxvbmczIHgsIGxvbmcgeSk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBtYXgodWxvbmczIHgsIHVsb25nIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiBtYXgobG9uZzQgeCwgbG9uZyB5KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIG1heCh1bG9uZzQgeCwgdWxvbmcgeSk7Citsb25nOCBfX292bGQgX19jbmZuIG1heChsb25nOCB4LCBsb25nIHkpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gbWF4KHVsb25nOCB4LCB1bG9uZyB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIG1heChsb25nMTYgeCwgbG9uZyB5KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBtYXgodWxvbmcxNiB4LCB1bG9uZyB5KTsKKworLyoqCisgKiBSZXR1cm5zIHkgaWYgeSA8IHgsIG90aGVyd2lzZSBpdCByZXR1cm5zIHguCisgKi8KK2NoYXIgX19vdmxkIF9fY25mbiBtaW4oY2hhciB4LCBjaGFyIHkpOwordWNoYXIgX19vdmxkIF9fY25mbiBtaW4odWNoYXIgeCwgdWNoYXIgeSk7CitjaGFyMiBfX292bGQgX19jbmZuIG1pbihjaGFyMiB4LCBjaGFyMiB5KTsKK3VjaGFyMiBfX292bGQgX19jbmZuIG1pbih1Y2hhcjIgeCwgdWNoYXIyIHkpOworY2hhcjMgX19vdmxkIF9fY25mbiBtaW4oY2hhcjMgeCwgY2hhcjMgeSk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBtaW4odWNoYXIzIHgsIHVjaGFyMyB5KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gbWluKGNoYXI0IHgsIGNoYXI0IHkpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gbWluKHVjaGFyNCB4LCB1Y2hhcjQgeSk7CitjaGFyOCBfX292bGQgX19jbmZuIG1pbihjaGFyOCB4LCBjaGFyOCB5KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIG1pbih1Y2hhcjggeCwgdWNoYXI4IHkpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gbWluKGNoYXIxNiB4LCBjaGFyMTYgeSk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gbWluKHVjaGFyMTYgeCwgdWNoYXIxNiB5KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gbWluKHNob3J0IHgsIHNob3J0IHkpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gbWluKHVzaG9ydCB4LCB1c2hvcnQgeSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBtaW4oc2hvcnQyIHgsIHNob3J0MiB5KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBtaW4odXNob3J0MiB4LCB1c2hvcnQyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gbWluKHNob3J0MyB4LCBzaG9ydDMgeSk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gbWluKHVzaG9ydDMgeCwgdXNob3J0MyB5KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIG1pbihzaG9ydDQgeCwgc2hvcnQ0IHkpOwordXNob3J0NCBfX292bGQgX19jbmZuIG1pbih1c2hvcnQ0IHgsIHVzaG9ydDQgeSk7CitzaG9ydDggX19vdmxkIF9fY25mbiBtaW4oc2hvcnQ4IHgsIHNob3J0OCB5KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBtaW4odXNob3J0OCB4LCB1c2hvcnQ4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIG1pbihzaG9ydDE2IHgsIHNob3J0MTYgeSk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIG1pbih1c2hvcnQxNiB4LCB1c2hvcnQxNiB5KTsKK2ludCBfX292bGQgX19jbmZuIG1pbihpbnQgeCwgaW50IHkpOwordWludCBfX292bGQgX19jbmZuIG1pbih1aW50IHgsIHVpbnQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gbWluKGludDIgeCwgaW50MiB5KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gbWluKHVpbnQyIHgsIHVpbnQyIHkpOworaW50MyBfX292bGQgX19jbmZuIG1pbihpbnQzIHgsIGludDMgeSk7Cit1aW50MyBfX292bGQgX19jbmZuIG1pbih1aW50MyB4LCB1aW50MyB5KTsKK2ludDQgX19vdmxkIF9fY25mbiBtaW4oaW50NCB4LCBpbnQ0IHkpOwordWludDQgX19vdmxkIF9fY25mbiBtaW4odWludDQgeCwgdWludDQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gbWluKGludDggeCwgaW50OCB5KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gbWluKHVpbnQ4IHgsIHVpbnQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBtaW4oaW50MTYgeCwgaW50MTYgeSk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBtaW4odWludDE2IHgsIHVpbnQxNiB5KTsKK2xvbmcgX19vdmxkIF9fY25mbiBtaW4obG9uZyB4LCBsb25nIHkpOwordWxvbmcgX19vdmxkIF9fY25mbiBtaW4odWxvbmcgeCwgdWxvbmcgeSk7Citsb25nMiBfX292bGQgX19jbmZuIG1pbihsb25nMiB4LCBsb25nMiB5KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIG1pbih1bG9uZzIgeCwgdWxvbmcyIHkpOworbG9uZzMgX19vdmxkIF9fY25mbiBtaW4obG9uZzMgeCwgbG9uZzMgeSk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBtaW4odWxvbmczIHgsIHVsb25nMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gbWluKGxvbmc0IHgsIGxvbmc0IHkpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gbWluKHVsb25nNCB4LCB1bG9uZzQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIG1pbihsb25nOCB4LCBsb25nOCB5KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIG1pbih1bG9uZzggeCwgdWxvbmc4IHkpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gbWluKGxvbmcxNiB4LCBsb25nMTYgeSk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gbWluKHVsb25nMTYgeCwgdWxvbmcxNiB5KTsKK2NoYXIgX19vdmxkIF9fY25mbiBtaW4oY2hhciB4LCBjaGFyIHkpOwordWNoYXIgX19vdmxkIF9fY25mbiBtaW4odWNoYXIgeCwgdWNoYXIgeSk7CitjaGFyMiBfX292bGQgX19jbmZuIG1pbihjaGFyMiB4LCBjaGFyIHkpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gbWluKHVjaGFyMiB4LCB1Y2hhciB5KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gbWluKGNoYXIzIHgsIGNoYXIgeSk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBtaW4odWNoYXIzIHgsIHVjaGFyIHkpOworY2hhcjQgX19vdmxkIF9fY25mbiBtaW4oY2hhcjQgeCwgY2hhciB5KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIG1pbih1Y2hhcjQgeCwgdWNoYXIgeSk7CitjaGFyOCBfX292bGQgX19jbmZuIG1pbihjaGFyOCB4LCBjaGFyIHkpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gbWluKHVjaGFyOCB4LCB1Y2hhciB5KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIG1pbihjaGFyMTYgeCwgY2hhciB5KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBtaW4odWNoYXIxNiB4LCB1Y2hhciB5KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gbWluKHNob3J0IHgsIHNob3J0IHkpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gbWluKHVzaG9ydCB4LCB1c2hvcnQgeSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBtaW4oc2hvcnQyIHgsIHNob3J0IHkpOwordXNob3J0MiBfX292bGQgX19jbmZuIG1pbih1c2hvcnQyIHgsIHVzaG9ydCB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIG1pbihzaG9ydDMgeCwgc2hvcnQgeSk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gbWluKHVzaG9ydDMgeCwgdXNob3J0IHkpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gbWluKHNob3J0NCB4LCBzaG9ydCB5KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBtaW4odXNob3J0NCB4LCB1c2hvcnQgeSk7CitzaG9ydDggX19vdmxkIF9fY25mbiBtaW4oc2hvcnQ4IHgsIHNob3J0IHkpOwordXNob3J0OCBfX292bGQgX19jbmZuIG1pbih1c2hvcnQ4IHgsIHVzaG9ydCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBtaW4oc2hvcnQxNiB4LCBzaG9ydCB5KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gbWluKHVzaG9ydDE2IHgsIHVzaG9ydCB5KTsKK2ludCBfX292bGQgX19jbmZuIG1pbihpbnQgeCwgaW50IHkpOwordWludCBfX292bGQgX19jbmZuIG1pbih1aW50IHgsIHVpbnQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gbWluKGludDIgeCwgaW50IHkpOwordWludDIgX19vdmxkIF9fY25mbiBtaW4odWludDIgeCwgdWludCB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBtaW4oaW50MyB4LCBpbnQgeSk7Cit1aW50MyBfX292bGQgX19jbmZuIG1pbih1aW50MyB4LCB1aW50IHkpOworaW50NCBfX292bGQgX19jbmZuIG1pbihpbnQ0IHgsIGludCB5KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gbWluKHVpbnQ0IHgsIHVpbnQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gbWluKGludDggeCwgaW50IHkpOwordWludDggX19vdmxkIF9fY25mbiBtaW4odWludDggeCwgdWludCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gbWluKGludDE2IHgsIGludCB5KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIG1pbih1aW50MTYgeCwgdWludCB5KTsKK2xvbmcgX19vdmxkIF9fY25mbiBtaW4obG9uZyB4LCBsb25nIHkpOwordWxvbmcgX19vdmxkIF9fY25mbiBtaW4odWxvbmcgeCwgdWxvbmcgeSk7Citsb25nMiBfX292bGQgX19jbmZuIG1pbihsb25nMiB4LCBsb25nIHkpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gbWluKHVsb25nMiB4LCB1bG9uZyB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gbWluKGxvbmczIHgsIGxvbmcgeSk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBtaW4odWxvbmczIHgsIHVsb25nIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiBtaW4obG9uZzQgeCwgbG9uZyB5KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIG1pbih1bG9uZzQgeCwgdWxvbmcgeSk7Citsb25nOCBfX292bGQgX19jbmZuIG1pbihsb25nOCB4LCBsb25nIHkpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gbWluKHVsb25nOCB4LCB1bG9uZyB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIG1pbihsb25nMTYgeCwgbG9uZyB5KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBtaW4odWxvbmcxNiB4LCB1bG9uZyB5KTsKKworLyoqCisgKiBDb21wdXRlcyB4ICogeSBhbmQgcmV0dXJucyB0aGUgaGlnaCBoYWxmIG9mIHRoZQorICogcHJvZHVjdCBvZiB4IGFuZCB5LgorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGNoYXIgeCwgY2hhciB5KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVjaGFyIHgsIHVjaGFyIHkpOworY2hhcjIgX19vdmxkIF9fY25mbiBtdWxfaGkoY2hhcjIgeCwgY2hhcjIgeSk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBtdWxfaGkodWNoYXIyIHgsIHVjaGFyMiB5KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGNoYXIzIHgsIGNoYXIzIHkpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVjaGFyMyB4LCB1Y2hhcjMgeSk7CitjaGFyNCBfX292bGQgX19jbmZuIG11bF9oaShjaGFyNCB4LCBjaGFyNCB5KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIG11bF9oaSh1Y2hhcjQgeCwgdWNoYXI0IHkpOworY2hhcjggX19vdmxkIF9fY25mbiBtdWxfaGkoY2hhcjggeCwgY2hhcjggeSk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBtdWxfaGkodWNoYXI4IHgsIHVjaGFyOCB5KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIG11bF9oaShjaGFyMTYgeCwgY2hhcjE2IHkpOwordWNoYXIxNiBfX292bGQgX19jbmZuIG11bF9oaSh1Y2hhcjE2IHgsIHVjaGFyMTYgeSk7CitzaG9ydCBfX292bGQgX19jbmZuIG11bF9oaShzaG9ydCB4LCBzaG9ydCB5KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIG11bF9oaSh1c2hvcnQgeCwgdXNob3J0IHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHNob3J0MiB4LCBzaG9ydDIgeSk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVzaG9ydDIgeCwgdXNob3J0MiB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIG11bF9oaShzaG9ydDMgeCwgc2hvcnQzIHkpOwordXNob3J0MyBfX292bGQgX19jbmZuIG11bF9oaSh1c2hvcnQzIHgsIHVzaG9ydDMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBtdWxfaGkoc2hvcnQ0IHgsIHNob3J0NCB5KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBtdWxfaGkodXNob3J0NCB4LCB1c2hvcnQ0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHNob3J0OCB4LCBzaG9ydDggeSk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVzaG9ydDggeCwgdXNob3J0OCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBtdWxfaGkoc2hvcnQxNiB4LCBzaG9ydDE2IHkpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBtdWxfaGkodXNob3J0MTYgeCwgdXNob3J0MTYgeSk7CitpbnQgX19vdmxkIF9fY25mbiBtdWxfaGkoaW50IHgsIGludCB5KTsKK3VpbnQgX19vdmxkIF9fY25mbiBtdWxfaGkodWludCB4LCB1aW50IHkpOworaW50MiBfX292bGQgX19jbmZuIG11bF9oaShpbnQyIHgsIGludDIgeSk7Cit1aW50MiBfX292bGQgX19jbmZuIG11bF9oaSh1aW50MiB4LCB1aW50MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBtdWxfaGkoaW50MyB4LCBpbnQzIHkpOwordWludDMgX19vdmxkIF9fY25mbiBtdWxfaGkodWludDMgeCwgdWludDMgeSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGludDQgeCwgaW50NCB5KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVpbnQ0IHgsIHVpbnQ0IHkpOworaW50OCBfX292bGQgX19jbmZuIG11bF9oaShpbnQ4IHgsIGludDggeSk7Cit1aW50OCBfX292bGQgX19jbmZuIG11bF9oaSh1aW50OCB4LCB1aW50OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGludDE2IHgsIGludDE2IHkpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVpbnQxNiB4LCB1aW50MTYgeSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGxvbmcgeCwgbG9uZyB5KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVsb25nIHgsIHVsb25nIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBtdWxfaGkobG9uZzIgeCwgbG9uZzIgeSk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBtdWxfaGkodWxvbmcyIHgsIHVsb25nMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGxvbmczIHgsIGxvbmczIHkpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVsb25nMyB4LCB1bG9uZzMgeSk7Citsb25nNCBfX292bGQgX19jbmZuIG11bF9oaShsb25nNCB4LCBsb25nNCB5KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIG11bF9oaSh1bG9uZzQgeCwgdWxvbmc0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBtdWxfaGkobG9uZzggeCwgbG9uZzggeSk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBtdWxfaGkodWxvbmc4IHgsIHVsb25nOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIG11bF9oaShsb25nMTYgeCwgbG9uZzE2IHkpOwordWxvbmcxNiBfX292bGQgX19jbmZuIG11bF9oaSh1bG9uZzE2IHgsIHVsb25nMTYgeSk7CisKKy8qKgorICogRm9yIGVhY2ggZWxlbWVudCBpbiB2LCB0aGUgYml0cyBhcmUgc2hpZnRlZCBsZWZ0IGJ5CisgKiB0aGUgbnVtYmVyIG9mIGJpdHMgZ2l2ZW4gYnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGVsZW1lbnQgaW4gaSAoc3ViamVjdCB0byB1c3VhbCBzaGlmdCBtb2R1bG8gcnVsZXMKKyAqIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDYuMykuIEJpdHMgc2hpZnRlZCBvZmYgdGhlIGxlZnQKKyAqIHNpZGUgb2YgdGhlIGVsZW1lbnQgYXJlIHNoaWZ0ZWQgYmFjayBpbiBmcm9tIHRoZQorICogcmlnaHQuCisgKi8KK2NoYXIgX19vdmxkIF9fY25mbiByb3RhdGUoY2hhciB2LCBjaGFyIGkpOwordWNoYXIgX19vdmxkIF9fY25mbiByb3RhdGUodWNoYXIgdiwgdWNoYXIgaSk7CitjaGFyMiBfX292bGQgX19jbmZuIHJvdGF0ZShjaGFyMiB2LCBjaGFyMiBpKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHJvdGF0ZSh1Y2hhcjIgdiwgdWNoYXIyIGkpOworY2hhcjMgX19vdmxkIF9fY25mbiByb3RhdGUoY2hhcjMgdiwgY2hhcjMgaSk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiByb3RhdGUodWNoYXIzIHYsIHVjaGFyMyBpKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gcm90YXRlKGNoYXI0IHYsIGNoYXI0IGkpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVjaGFyNCB2LCB1Y2hhcjQgaSk7CitjaGFyOCBfX292bGQgX19jbmZuIHJvdGF0ZShjaGFyOCB2LCBjaGFyOCBpKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHJvdGF0ZSh1Y2hhcjggdiwgdWNoYXI4IGkpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gcm90YXRlKGNoYXIxNiB2LCBjaGFyMTYgaSk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVjaGFyMTYgdiwgdWNoYXIxNiBpKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gcm90YXRlKHNob3J0IHYsIHNob3J0IGkpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVzaG9ydCB2LCB1c2hvcnQgaSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiByb3RhdGUoc2hvcnQyIHYsIHNob3J0MiBpKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiByb3RhdGUodXNob3J0MiB2LCB1c2hvcnQyIGkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gcm90YXRlKHNob3J0MyB2LCBzaG9ydDMgaSk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVzaG9ydDMgdiwgdXNob3J0MyBpKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHJvdGF0ZShzaG9ydDQgdiwgc2hvcnQ0IGkpOwordXNob3J0NCBfX292bGQgX19jbmZuIHJvdGF0ZSh1c2hvcnQ0IHYsIHVzaG9ydDQgaSk7CitzaG9ydDggX19vdmxkIF9fY25mbiByb3RhdGUoc2hvcnQ4IHYsIHNob3J0OCBpKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiByb3RhdGUodXNob3J0OCB2LCB1c2hvcnQ4IGkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIHJvdGF0ZShzaG9ydDE2IHYsIHNob3J0MTYgaSk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHJvdGF0ZSh1c2hvcnQxNiB2LCB1c2hvcnQxNiBpKTsKK2ludCBfX292bGQgX19jbmZuIHJvdGF0ZShpbnQgdiwgaW50IGkpOwordWludCBfX292bGQgX19jbmZuIHJvdGF0ZSh1aW50IHYsIHVpbnQgaSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gcm90YXRlKGludDIgdiwgaW50MiBpKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVpbnQyIHYsIHVpbnQyIGkpOworaW50MyBfX292bGQgX19jbmZuIHJvdGF0ZShpbnQzIHYsIGludDMgaSk7Cit1aW50MyBfX292bGQgX19jbmZuIHJvdGF0ZSh1aW50MyB2LCB1aW50MyBpKTsKK2ludDQgX19vdmxkIF9fY25mbiByb3RhdGUoaW50NCB2LCBpbnQ0IGkpOwordWludDQgX19vdmxkIF9fY25mbiByb3RhdGUodWludDQgdiwgdWludDQgaSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gcm90YXRlKGludDggdiwgaW50OCBpKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVpbnQ4IHYsIHVpbnQ4IGkpOworaW50MTYgX19vdmxkIF9fY25mbiByb3RhdGUoaW50MTYgdiwgaW50MTYgaSk7Cit1aW50MTYgX19vdmxkIF9fY25mbiByb3RhdGUodWludDE2IHYsIHVpbnQxNiBpKTsKK2xvbmcgX19vdmxkIF9fY25mbiByb3RhdGUobG9uZyB2LCBsb25nIGkpOwordWxvbmcgX19vdmxkIF9fY25mbiByb3RhdGUodWxvbmcgdiwgdWxvbmcgaSk7Citsb25nMiBfX292bGQgX19jbmZuIHJvdGF0ZShsb25nMiB2LCBsb25nMiBpKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHJvdGF0ZSh1bG9uZzIgdiwgdWxvbmcyIGkpOworbG9uZzMgX19vdmxkIF9fY25mbiByb3RhdGUobG9uZzMgdiwgbG9uZzMgaSk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiByb3RhdGUodWxvbmczIHYsIHVsb25nMyBpKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gcm90YXRlKGxvbmc0IHYsIGxvbmc0IGkpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVsb25nNCB2LCB1bG9uZzQgaSk7Citsb25nOCBfX292bGQgX19jbmZuIHJvdGF0ZShsb25nOCB2LCBsb25nOCBpKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHJvdGF0ZSh1bG9uZzggdiwgdWxvbmc4IGkpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gcm90YXRlKGxvbmcxNiB2LCBsb25nMTYgaSk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVsb25nMTYgdiwgdWxvbmcxNiBpKTsKKworLyoqCisgKiBSZXR1cm5zIHggLSB5IGFuZCBzYXR1cmF0ZXMgdGhlIHJlc3VsdC4KKyAqLworY2hhciBfX292bGQgX19jbmZuIHN1Yl9zYXQoY2hhciB4LCBjaGFyIHkpOwordWNoYXIgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVjaGFyIHgsIHVjaGFyIHkpOworY2hhcjIgX19vdmxkIF9fY25mbiBzdWJfc2F0KGNoYXIyIHgsIGNoYXIyIHkpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1Y2hhcjIgeCwgdWNoYXIyIHkpOworY2hhcjMgX19vdmxkIF9fY25mbiBzdWJfc2F0KGNoYXIzIHgsIGNoYXIzIHkpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1Y2hhcjMgeCwgdWNoYXIzIHkpOworY2hhcjQgX19vdmxkIF9fY25mbiBzdWJfc2F0KGNoYXI0IHgsIGNoYXI0IHkpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1Y2hhcjQgeCwgdWNoYXI0IHkpOworY2hhcjggX19vdmxkIF9fY25mbiBzdWJfc2F0KGNoYXI4IHgsIGNoYXI4IHkpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1Y2hhcjggeCwgdWNoYXI4IHkpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChjaGFyMTYgeCwgY2hhcjE2IHkpOwordWNoYXIxNiBfX292bGQgX19jbmZuIHN1Yl9zYXQodWNoYXIxNiB4LCB1Y2hhcjE2IHkpOworc2hvcnQgX19vdmxkIF9fY25mbiBzdWJfc2F0KHNob3J0IHgsIHNob3J0IHkpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1c2hvcnQgeCwgdXNob3J0IHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChzaG9ydDIgeCwgc2hvcnQyIHkpOwordXNob3J0MiBfX292bGQgX19jbmZuIHN1Yl9zYXQodXNob3J0MiB4LCB1c2hvcnQyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChzaG9ydDMgeCwgc2hvcnQzIHkpOwordXNob3J0MyBfX292bGQgX19jbmZuIHN1Yl9zYXQodXNob3J0MyB4LCB1c2hvcnQzIHkpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChzaG9ydDQgeCwgc2hvcnQ0IHkpOwordXNob3J0NCBfX292bGQgX19jbmZuIHN1Yl9zYXQodXNob3J0NCB4LCB1c2hvcnQ0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChzaG9ydDggeCwgc2hvcnQ4IHkpOwordXNob3J0OCBfX292bGQgX19jbmZuIHN1Yl9zYXQodXNob3J0OCB4LCB1c2hvcnQ4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIHN1Yl9zYXQoc2hvcnQxNiB4LCBzaG9ydDE2IHkpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVzaG9ydDE2IHgsIHVzaG9ydDE2IHkpOworaW50IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChpbnQgeCwgaW50IHkpOwordWludCBfX292bGQgX19jbmZuIHN1Yl9zYXQodWludCB4LCB1aW50IHkpOworaW50MiBfX292bGQgX19jbmZuIHN1Yl9zYXQoaW50MiB4LCBpbnQyIHkpOwordWludDIgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVpbnQyIHgsIHVpbnQyIHkpOworaW50MyBfX292bGQgX19jbmZuIHN1Yl9zYXQoaW50MyB4LCBpbnQzIHkpOwordWludDMgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVpbnQzIHgsIHVpbnQzIHkpOworaW50NCBfX292bGQgX19jbmZuIHN1Yl9zYXQoaW50NCB4LCBpbnQ0IHkpOwordWludDQgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVpbnQ0IHgsIHVpbnQ0IHkpOworaW50OCBfX292bGQgX19jbmZuIHN1Yl9zYXQoaW50OCB4LCBpbnQ4IHkpOwordWludDggX19vdmxkIF9fY25mbiBzdWJfc2F0KHVpbnQ4IHgsIHVpbnQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBzdWJfc2F0KGludDE2IHgsIGludDE2IHkpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1aW50MTYgeCwgdWludDE2IHkpOworbG9uZyBfX292bGQgX19jbmZuIHN1Yl9zYXQobG9uZyB4LCBsb25nIHkpOwordWxvbmcgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVsb25nIHgsIHVsb25nIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBzdWJfc2F0KGxvbmcyIHgsIGxvbmcyIHkpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1bG9uZzIgeCwgdWxvbmcyIHkpOworbG9uZzMgX19vdmxkIF9fY25mbiBzdWJfc2F0KGxvbmczIHgsIGxvbmczIHkpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1bG9uZzMgeCwgdWxvbmczIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiBzdWJfc2F0KGxvbmc0IHgsIGxvbmc0IHkpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1bG9uZzQgeCwgdWxvbmc0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBzdWJfc2F0KGxvbmc4IHgsIGxvbmc4IHkpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1bG9uZzggeCwgdWxvbmc4IHkpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChsb25nMTYgeCwgbG9uZzE2IHkpOwordWxvbmcxNiBfX292bGQgX19jbmZuIHN1Yl9zYXQodWxvbmcxNiB4LCB1bG9uZzE2IHkpOworCisvKioKKyAqIHJlc3VsdFtpXSA9ICgoc2hvcnQpaGlbaV0gPDwgOCkgfCBsb1tpXQorICogcmVzdWx0W2ldID0gKCh1c2hvcnQpaGlbaV0gPDwgOCkgfCBsb1tpXQorICovCitzaG9ydCBfX292bGQgX19jbmZuIHVwc2FtcGxlKGNoYXIgaGksIHVjaGFyIGxvKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVjaGFyIGhpLCB1Y2hhciBsbyk7CitzaG9ydDIgX19vdmxkIF9fY25mbiB1cHNhbXBsZShjaGFyMiBoaSwgdWNoYXIyIGxvKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIHVwc2FtcGxlKGNoYXIzIGhpLCB1Y2hhcjMgbG8pOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoY2hhcjQgaGksIHVjaGFyNCBsbyk7CitzaG9ydDggX19vdmxkIF9fY25mbiB1cHNhbXBsZShjaGFyOCBoaSwgdWNoYXI4IGxvKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiB1cHNhbXBsZShjaGFyMTYgaGksIHVjaGFyMTYgbG8pOwordXNob3J0MiBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVjaGFyMiBoaSwgdWNoYXIyIGxvKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1Y2hhcjMgaGksIHVjaGFyMyBsbyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodWNoYXI0IGhpLCB1Y2hhcjQgbG8pOwordXNob3J0OCBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVjaGFyOCBoaSwgdWNoYXI4IGxvKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodWNoYXIxNiBoaSwgdWNoYXIxNiBsbyk7CisKKy8qKgorICogcmVzdWx0W2ldID0gKChpbnQpaGlbaV0gPDwgMTYpIHwgbG9baV0KKyAqIHJlc3VsdFtpXSA9ICgodWludCloaVtpXSA8PCAxNikgfCBsb1tpXQorICovCitpbnQgX19vdmxkIF9fY25mbiB1cHNhbXBsZShzaG9ydCBoaSwgdXNob3J0IGxvKTsKK3VpbnQgX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1c2hvcnQgaGksIHVzaG9ydCBsbyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoc2hvcnQyIGhpLCB1c2hvcnQyIGxvKTsKK2ludDMgX19vdmxkIF9fY25mbiB1cHNhbXBsZShzaG9ydDMgaGksIHVzaG9ydDMgbG8pOworaW50NCBfX292bGQgX19jbmZuIHVwc2FtcGxlKHNob3J0NCBoaSwgdXNob3J0NCBsbyk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoc2hvcnQ4IGhpLCB1c2hvcnQ4IGxvKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoc2hvcnQxNiBoaSwgdXNob3J0MTYgbG8pOwordWludDIgX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1c2hvcnQyIGhpLCB1c2hvcnQyIGxvKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodXNob3J0MyBoaSwgdXNob3J0MyBsbyk7Cit1aW50NCBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVzaG9ydDQgaGksIHVzaG9ydDQgbG8pOwordWludDggX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1c2hvcnQ4IGhpLCB1c2hvcnQ4IGxvKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVzaG9ydDE2IGhpLCB1c2hvcnQxNiBsbyk7CisvKioKKyAqIHJlc3VsdFtpXSA9ICgobG9uZyloaVtpXSA8PCAzMikgfCBsb1tpXQorICogcmVzdWx0W2ldID0gKCh1bG9uZyloaVtpXSA8PCAzMikgfCBsb1tpXQorICovCitsb25nIF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoaW50IGhpLCB1aW50IGxvKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodWludCBoaSwgdWludCBsbyk7Citsb25nMiBfX292bGQgX19jbmZuIHVwc2FtcGxlKGludDIgaGksIHVpbnQyIGxvKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoaW50MyBoaSwgdWludDMgbG8pOworbG9uZzQgX19vdmxkIF9fY25mbiB1cHNhbXBsZShpbnQ0IGhpLCB1aW50NCBsbyk7Citsb25nOCBfX292bGQgX19jbmZuIHVwc2FtcGxlKGludDggaGksIHVpbnQ4IGxvKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHVwc2FtcGxlKGludDE2IGhpLCB1aW50MTYgbG8pOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodWludDIgaGksIHVpbnQyIGxvKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVpbnQzIGhpLCB1aW50MyBsbyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1aW50NCBoaSwgdWludDQgbG8pOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodWludDggaGksIHVpbnQ4IGxvKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1aW50MTYgaGksIHVpbnQxNiBsbyk7CisKKy8qCisgKiBwb3Bjb3VudCh4KTogcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNldCBiaXQgaW4geAorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoY2hhciB4KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWNoYXIgeCk7CitjaGFyMiBfX292bGQgX19jbmZuIHBvcGNvdW50KGNoYXIyIHgpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWNoYXIyIHgpOworY2hhcjMgX19vdmxkIF9fY25mbiBwb3Bjb3VudChjaGFyMyB4KTsKK3VjaGFyMyBfX292bGQgX19jbmZuIHBvcGNvdW50KHVjaGFyMyB4KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoY2hhcjQgeCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1Y2hhcjQgeCk7CitjaGFyOCBfX292bGQgX19jbmZuIHBvcGNvdW50KGNoYXI4IHgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWNoYXI4IHgpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoY2hhcjE2IHgpOwordWNoYXIxNiBfX292bGQgX19jbmZuIHBvcGNvdW50KHVjaGFyMTYgeCk7CitzaG9ydCBfX292bGQgX19jbmZuIHBvcGNvdW50KHNob3J0IHgpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodXNob3J0IHgpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoc2hvcnQyIHgpOwordXNob3J0MiBfX292bGQgX19jbmZuIHBvcGNvdW50KHVzaG9ydDIgeCk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBwb3Bjb3VudChzaG9ydDMgeCk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodXNob3J0MyB4KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHBvcGNvdW50KHNob3J0NCB4KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1c2hvcnQ0IHgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoc2hvcnQ4IHgpOwordXNob3J0OCBfX292bGQgX19jbmZuIHBvcGNvdW50KHVzaG9ydDggeCk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoc2hvcnQxNiB4KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodXNob3J0MTYgeCk7CitpbnQgX19vdmxkIF9fY25mbiBwb3Bjb3VudChpbnQgeCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWludCB4KTsKK2ludDIgX19vdmxkIF9fY25mbiBwb3Bjb3VudChpbnQyIHgpOwordWludDIgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1aW50MiB4KTsKK2ludDMgX19vdmxkIF9fY25mbiBwb3Bjb3VudChpbnQzIHgpOwordWludDMgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1aW50MyB4KTsKK2ludDQgX19vdmxkIF9fY25mbiBwb3Bjb3VudChpbnQ0IHgpOwordWludDQgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1aW50NCB4KTsKK2ludDggX19vdmxkIF9fY25mbiBwb3Bjb3VudChpbnQ4IHgpOwordWludDggX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1aW50OCB4KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoaW50MTYgeCk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1aW50MTYgeCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQobG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWxvbmcgeCk7Citsb25nMiBfX292bGQgX19jbmZuIHBvcGNvdW50KGxvbmcyIHgpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWxvbmcyIHgpOworbG9uZzMgX19vdmxkIF9fY25mbiBwb3Bjb3VudChsb25nMyB4KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIHBvcGNvdW50KHVsb25nMyB4KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQobG9uZzQgeCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1bG9uZzQgeCk7Citsb25nOCBfX292bGQgX19jbmZuIHBvcGNvdW50KGxvbmc4IHgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWxvbmc4IHgpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQobG9uZzE2IHgpOwordWxvbmcxNiBfX292bGQgX19jbmZuIHBvcGNvdW50KHVsb25nMTYgeCk7CisKKy8qKgorICogTXVsdGlwbHkgdHdvIDI0LWJpdCBpbnRlZ2VyIHZhbHVlcyB4IGFuZCB5IGFuZCBhZGQKKyAqIHRoZSAzMi1iaXQgaW50ZWdlciByZXN1bHQgdG8gdGhlIDMyLWJpdCBpbnRlZ2VyIHouCisgKiBSZWZlciB0byBkZWZpbml0aW9uIG9mIG11bDI0IHRvIHNlZSBob3cgdGhlIDI0LWJpdAorICogaW50ZWdlciBtdWx0aXBsaWNhdGlvbiBpcyBwZXJmb3JtZWQuCisgKi8KK2ludCBfX292bGQgX19jbmZuIG1hZDI0KGludCB4LCBpbnQgeSwgaW50IHopOwordWludCBfX292bGQgX19jbmZuIG1hZDI0KHVpbnQgeCwgdWludCB5LCB1aW50IHopOworaW50MiBfX292bGQgX19jbmZuIG1hZDI0KGludDIgeCwgaW50MiB5LCBpbnQyIHopOwordWludDIgX19vdmxkIF9fY25mbiBtYWQyNCh1aW50MiB4LCB1aW50MiB5LCB1aW50MiB6KTsKK2ludDMgX19vdmxkIF9fY25mbiBtYWQyNChpbnQzIHgsIGludDMgeSwgaW50MyB6KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gbWFkMjQodWludDMgeCwgdWludDMgeSwgdWludDMgeik7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gbWFkMjQoaW50NCB4LCBpbnQ0IHksIGludDQgeik7Cit1aW50NCBfX292bGQgX19jbmZuIG1hZDI0KHVpbnQ0IHgsIHVpbnQ0IHksIHVpbnQ0IHopOworaW50OCBfX292bGQgX19jbmZuIG1hZDI0KGludDggeCwgaW50OCB5LCBpbnQ4IHopOwordWludDggX19vdmxkIF9fY25mbiBtYWQyNCh1aW50OCB4LCB1aW50OCB5LCB1aW50OCB6KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gbWFkMjQoaW50MTYgeCwgaW50MTYgeSwgaW50MTYgeik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBtYWQyNCh1aW50MTYgeCwgdWludDE2IHksIHVpbnQxNiB6KTsKKworLyoqCisgKiBNdWx0aXBseSB0d28gMjQtYml0IGludGVnZXIgdmFsdWVzIHggYW5kIHkuIHggYW5kIHkKKyAqIGFyZSAzMi1iaXQgaW50ZWdlcnMgYnV0IG9ubHkgdGhlIGxvdyAyNC1iaXRzIGFyZSB1c2VkCisgKiB0byBwZXJmb3JtIHRoZSBtdWx0aXBsaWNhdGlvbi4gbXVsMjQgc2hvdWxkIG9ubHkKKyAqIGJlIHVzZWQgd2hlbiB2YWx1ZXMgaW4geCBhbmQgeSBhcmUgaW4gdGhlIHJhbmdlIFstCisgKiAyXjIzLCAyXjIzLTFdIGlmIHggYW5kIHkgYXJlIHNpZ25lZCBpbnRlZ2VycyBhbmQgaW4gdGhlCisgKiByYW5nZSBbMCwgMl4yNC0xXSBpZiB4IGFuZCB5IGFyZSB1bnNpZ25lZCBpbnRlZ2Vycy4gSWYKKyAqIHggYW5kIHkgYXJlIG5vdCBpbiB0aGlzIHJhbmdlLCB0aGUgbXVsdGlwbGljYXRpb24KKyAqIHJlc3VsdCBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICovCitpbnQgX19vdmxkIF9fY25mbiBtdWwyNChpbnQgeCwgaW50IHkpOwordWludCBfX292bGQgX19jbmZuIG11bDI0KHVpbnQgeCwgdWludCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBtdWwyNChpbnQyIHgsIGludDIgeSk7Cit1aW50MiBfX292bGQgX19jbmZuIG11bDI0KHVpbnQyIHgsIHVpbnQyIHkpOworaW50MyBfX292bGQgX19jbmZuIG11bDI0KGludDMgeCwgaW50MyB5KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gbXVsMjQodWludDMgeCwgdWludDMgeSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gbXVsMjQoaW50NCB4LCBpbnQ0IHkpOwordWludDQgX19vdmxkIF9fY25mbiBtdWwyNCh1aW50NCB4LCB1aW50NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBtdWwyNChpbnQ4IHgsIGludDggeSk7Cit1aW50OCBfX292bGQgX19jbmZuIG11bDI0KHVpbnQ4IHgsIHVpbnQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBtdWwyNChpbnQxNiB4LCBpbnQxNiB5KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIG11bDI0KHVpbnQxNiB4LCB1aW50MTYgeSk7CisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjQsIHYxLjIgczYuMTIuNCwgdjIuMCBzNi4xMy40IC0gQ29tbW9uIEZ1bmN0aW9ucworCisvKioKKyAqIFJldHVybnMgZm1pbihmbWF4KHgsIG1pbnZhbCksIG1heHZhbCkuCisgKiBSZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYgbWludmFsID4gbWF4dmFsLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGNsYW1wKGZsb2F0IHgsIGZsb2F0IG1pbnZhbCwgZmxvYXQgbWF4dmFsKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNsYW1wKGZsb2F0MiB4LCBmbG9hdDIgbWludmFsLCBmbG9hdDIgbWF4dmFsKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNsYW1wKGZsb2F0MyB4LCBmbG9hdDMgbWludmFsLCBmbG9hdDMgbWF4dmFsKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNsYW1wKGZsb2F0NCB4LCBmbG9hdDQgbWludmFsLCBmbG9hdDQgbWF4dmFsKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNsYW1wKGZsb2F0OCB4LCBmbG9hdDggbWludmFsLCBmbG9hdDggbWF4dmFsKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjbGFtcChmbG9hdDE2IHgsIGZsb2F0MTYgbWludmFsLCBmbG9hdDE2IG1heHZhbCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjbGFtcChmbG9hdDIgeCwgZmxvYXQgbWludmFsLCBmbG9hdCBtYXh2YWwpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY2xhbXAoZmxvYXQzIHgsIGZsb2F0IG1pbnZhbCwgZmxvYXQgbWF4dmFsKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNsYW1wKGZsb2F0NCB4LCBmbG9hdCBtaW52YWwsIGZsb2F0IG1heHZhbCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjbGFtcChmbG9hdDggeCwgZmxvYXQgbWludmFsLCBmbG9hdCBtYXh2YWwpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNsYW1wKGZsb2F0MTYgeCwgZmxvYXQgbWludmFsLCBmbG9hdCBtYXh2YWwpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBjbGFtcChkb3VibGUgeCwgZG91YmxlIG1pbnZhbCwgZG91YmxlIG1heHZhbCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY2xhbXAoZG91YmxlMiB4LCBkb3VibGUyIG1pbnZhbCwgZG91YmxlMiBtYXh2YWwpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNsYW1wKGRvdWJsZTMgeCwgZG91YmxlMyBtaW52YWwsIGRvdWJsZTMgbWF4dmFsKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjbGFtcChkb3VibGU0IHgsIGRvdWJsZTQgbWludmFsLCBkb3VibGU0IG1heHZhbCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY2xhbXAoZG91YmxlOCB4LCBkb3VibGU4IG1pbnZhbCwgZG91YmxlOCBtYXh2YWwpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjbGFtcChkb3VibGUxNiB4LCBkb3VibGUxNiBtaW52YWwsIGRvdWJsZTE2IG1heHZhbCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY2xhbXAoZG91YmxlMiB4LCBkb3VibGUgbWludmFsLCBkb3VibGUgbWF4dmFsKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjbGFtcChkb3VibGUzIHgsIGRvdWJsZSBtaW52YWwsIGRvdWJsZSBtYXh2YWwpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNsYW1wKGRvdWJsZTQgeCwgZG91YmxlIG1pbnZhbCwgZG91YmxlIG1heHZhbCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY2xhbXAoZG91YmxlOCB4LCBkb3VibGUgbWludmFsLCBkb3VibGUgbWF4dmFsKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAoZG91YmxlMTYgeCwgZG91YmxlIG1pbnZhbCwgZG91YmxlIG1heHZhbCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gY2xhbXAoaGFsZiB4LCBoYWxmIG1pbnZhbCwgaGFsZiBtYXh2YWwpOworaGFsZjIgX19vdmxkIF9fY25mbiBjbGFtcChoYWxmMiB4LCBoYWxmMiBtaW52YWwsIGhhbGYyIG1heHZhbCk7CitoYWxmMyBfX292bGQgX19jbmZuIGNsYW1wKGhhbGYzIHgsIGhhbGYzIG1pbnZhbCwgaGFsZjMgbWF4dmFsKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY2xhbXAoaGFsZjQgeCwgaGFsZjQgbWludmFsLCBoYWxmNCBtYXh2YWwpOworaGFsZjggX19vdmxkIF9fY25mbiBjbGFtcChoYWxmOCB4LCBoYWxmOCBtaW52YWwsIGhhbGY4IG1heHZhbCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjbGFtcChoYWxmMTYgeCwgaGFsZjE2IG1pbnZhbCwgaGFsZjE2IG1heHZhbCk7CitoYWxmMiBfX292bGQgX19jbmZuIGNsYW1wKGhhbGYyIHgsIGhhbGYgbWludmFsLCBoYWxmIG1heHZhbCk7CitoYWxmMyBfX292bGQgX19jbmZuIGNsYW1wKGhhbGYzIHgsIGhhbGYgbWludmFsLCBoYWxmIG1heHZhbCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNsYW1wKGhhbGY0IHgsIGhhbGYgbWludmFsLCBoYWxmIG1heHZhbCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNsYW1wKGhhbGY4IHgsIGhhbGYgbWludmFsLCBoYWxmIG1heHZhbCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjbGFtcChoYWxmMTYgeCwgaGFsZiBtaW52YWwsIGhhbGYgbWF4dmFsKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29udmVydHMgcmFkaWFucyB0byBkZWdyZWVzLCBpLmUuICgxODAgLyBQSSkgKgorICogcmFkaWFucy4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBkZWdyZWVzKGZsb2F0IHJhZGlhbnMpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhmbG9hdDIgcmFkaWFucyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBkZWdyZWVzKGZsb2F0MyByYWRpYW5zKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGRlZ3JlZXMoZmxvYXQ0IHJhZGlhbnMpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhmbG9hdDggcmFkaWFucyk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhmbG9hdDE2IHJhZGlhbnMpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBkZWdyZWVzKGRvdWJsZSByYWRpYW5zKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBkZWdyZWVzKGRvdWJsZTIgcmFkaWFucyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhkb3VibGUzIHJhZGlhbnMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGRlZ3JlZXMoZG91YmxlNCByYWRpYW5zKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBkZWdyZWVzKGRvdWJsZTggcmFkaWFucyk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGRlZ3JlZXMoZG91YmxlMTYgcmFkaWFucyk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhoYWxmIHJhZGlhbnMpOworaGFsZjIgX19vdmxkIF9fY25mbiBkZWdyZWVzKGhhbGYyIHJhZGlhbnMpOworaGFsZjMgX19vdmxkIF9fY25mbiBkZWdyZWVzKGhhbGYzIHJhZGlhbnMpOworaGFsZjQgX19vdmxkIF9fY25mbiBkZWdyZWVzKGhhbGY0IHJhZGlhbnMpOworaGFsZjggX19vdmxkIF9fY25mbiBkZWdyZWVzKGhhbGY4IHJhZGlhbnMpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhoYWxmMTYgcmFkaWFucyk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgeSBpZiB4IDwgeSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgeC4gSWYgeCBhbmQgeQorICogYXJlIGluZmluaXRlIG9yIE5hTiwgdGhlIHJldHVybiB2YWx1ZXMgYXJlIHVuZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBtYXgoZmxvYXQgeCwgZmxvYXQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBtYXgoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG1heChmbG9hdDMgeCwgZmxvYXQzIHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbWF4KGZsb2F0NCB4LCBmbG9hdDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBtYXgoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBtYXgoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbWF4KGZsb2F0MiB4LCBmbG9hdCB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG1heChmbG9hdDMgeCwgZmxvYXQgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBtYXgoZmxvYXQ0IHgsIGZsb2F0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbWF4KGZsb2F0OCB4LCBmbG9hdCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBtYXgoZmxvYXQxNiB4LCBmbG9hdCB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbWF4KGRvdWJsZSB4LCBkb3VibGUgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbWF4KGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBtYXgoZG91YmxlMyB4LCBkb3VibGUzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIG1heChkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbWF4KGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbWF4KGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIG1heChkb3VibGUyIHgsIGRvdWJsZSB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBtYXgoZG91YmxlMyB4LCBkb3VibGUgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbWF4KGRvdWJsZTQgeCwgZG91YmxlIHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIG1heChkb3VibGU4IHgsIGRvdWJsZSB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbWF4KGRvdWJsZTE2IHgsIGRvdWJsZSB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBtYXgoaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBtYXgoaGFsZjIgeCwgaGFsZjIgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIG1heChoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbWF4KGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiBtYXgoaGFsZjggeCwgaGFsZjggeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBtYXgoaGFsZjE2IHgsIGhhbGYxNiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbWF4KGhhbGYyIHgsIGhhbGYgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIG1heChoYWxmMyB4LCBoYWxmIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiBtYXgoaGFsZjQgeCwgaGFsZiB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbWF4KGhhbGY4IHgsIGhhbGYgeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBtYXgoaGFsZjE2IHgsIGhhbGYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgeSBpZiB5IDwgeCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgeC4gSWYgeCBhbmQgeQorICogYXJlIGluZmluaXRlIG9yIE5hTiwgdGhlIHJldHVybiB2YWx1ZXMgYXJlIHVuZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBtaW4oZmxvYXQgeCwgZmxvYXQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBtaW4oZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG1pbihmbG9hdDMgeCwgZmxvYXQzIHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbWluKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBtaW4oZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBtaW4oZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbWluKGZsb2F0MiB4LCBmbG9hdCB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG1pbihmbG9hdDMgeCwgZmxvYXQgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBtaW4oZmxvYXQ0IHgsIGZsb2F0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbWluKGZsb2F0OCB4LCBmbG9hdCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBtaW4oZmxvYXQxNiB4LCBmbG9hdCB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbWluKGRvdWJsZSB4LCBkb3VibGUgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbWluKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBtaW4oZG91YmxlMyB4LCBkb3VibGUzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIG1pbihkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbWluKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbWluKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIG1pbihkb3VibGUyIHgsIGRvdWJsZSB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBtaW4oZG91YmxlMyB4LCBkb3VibGUgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbWluKGRvdWJsZTQgeCwgZG91YmxlIHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIG1pbihkb3VibGU4IHgsIGRvdWJsZSB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbWluKGRvdWJsZTE2IHgsIGRvdWJsZSB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBtaW4oaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBtaW4oaGFsZjIgeCwgaGFsZjIgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIG1pbihoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbWluKGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiBtaW4oaGFsZjggeCwgaGFsZjggeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBtaW4oaGFsZjE2IHgsIGhhbGYxNiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbWluKGhhbGYyIHgsIGhhbGYgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIG1pbihoYWxmMyB4LCBoYWxmIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiBtaW4oaGFsZjQgeCwgaGFsZiB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbWluKGhhbGY4IHgsIGhhbGYgeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBtaW4oaGFsZjE2IHgsIGhhbGYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgdGhlIGxpbmVhciBibGVuZCBvZiB4ICYgeSBpbXBsZW1lbnRlZCBhczoKKyAqIHggKyAoeSAtIHgpICogYQorICogYSBtdXN0IGJlIGEgdmFsdWUgaW4gdGhlIHJhbmdlIDAuMCAuLi4gMS4wLiBJZiBhIGlzIG5vdAorICogaW4gdGhlIHJhbmdlIDAuMCAuLi4gMS4wLCB0aGUgcmV0dXJuIHZhbHVlcyBhcmUKKyAqIHVuZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBtaXgoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgYSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBtaXgoZmxvYXQyIHgsIGZsb2F0MiB5LCBmbG9hdDIgYSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBtaXgoZmxvYXQzIHgsIGZsb2F0MyB5LCBmbG9hdDMgYSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBtaXgoZmxvYXQ0IHgsIGZsb2F0NCB5LCBmbG9hdDQgYSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBtaXgoZmxvYXQ4IHgsIGZsb2F0OCB5LCBmbG9hdDggYSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbWl4KGZsb2F0MTYgeCwgZmxvYXQxNiB5LCBmbG9hdDE2IGEpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbWl4KGZsb2F0MiB4LCBmbG9hdDIgeSwgZmxvYXQgYSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBtaXgoZmxvYXQzIHgsIGZsb2F0MyB5LCBmbG9hdCBhKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG1peChmbG9hdDQgeCwgZmxvYXQ0IHksIGZsb2F0IGEpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbWl4KGZsb2F0OCB4LCBmbG9hdDggeSwgZmxvYXQgYSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbWl4KGZsb2F0MTYgeCwgZmxvYXQxNiB5LCBmbG9hdCBhKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbWl4KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIGEpOworZG91YmxlMiBfX292bGQgX19jbmZuIG1peChkb3VibGUyIHgsIGRvdWJsZTIgeSwgZG91YmxlMiBhKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBtaXgoZG91YmxlMyB4LCBkb3VibGUzIHksIGRvdWJsZTMgYSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbWl4KGRvdWJsZTQgeCwgZG91YmxlNCB5LCBkb3VibGU0IGEpOworZG91YmxlOCBfX292bGQgX19jbmZuIG1peChkb3VibGU4IHgsIGRvdWJsZTggeSwgZG91YmxlOCBhKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbWl4KGRvdWJsZTE2IHgsIGRvdWJsZTE2IHksIGRvdWJsZTE2IGEpOworZG91YmxlMiBfX292bGQgX19jbmZuIG1peChkb3VibGUyIHgsIGRvdWJsZTIgeSwgZG91YmxlIGEpOworZG91YmxlMyBfX292bGQgX19jbmZuIG1peChkb3VibGUzIHgsIGRvdWJsZTMgeSwgZG91YmxlIGEpOworZG91YmxlNCBfX292bGQgX19jbmZuIG1peChkb3VibGU0IHgsIGRvdWJsZTQgeSwgZG91YmxlIGEpOworZG91YmxlOCBfX292bGQgX19jbmZuIG1peChkb3VibGU4IHgsIGRvdWJsZTggeSwgZG91YmxlIGEpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBtaXgoZG91YmxlMTYgeCwgZG91YmxlMTYgeSwgZG91YmxlIGEpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIG1peChoYWxmIHgsIGhhbGYgeSwgaGFsZiBhKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbWl4KGhhbGYyIHgsIGhhbGYyIHksIGhhbGYyIGEpOworaGFsZjMgX19vdmxkIF9fY25mbiBtaXgoaGFsZjMgeCwgaGFsZjMgeSwgaGFsZjMgYSk7CitoYWxmNCBfX292bGQgX19jbmZuIG1peChoYWxmNCB4LCBoYWxmNCB5LCBoYWxmNCBhKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbWl4KGhhbGY4IHgsIGhhbGY4IHksIGhhbGY4IGEpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbWl4KGhhbGYxNiB4LCBoYWxmMTYgeSwgaGFsZjE2IGEpOworaGFsZjIgX19vdmxkIF9fY25mbiBtaXgoaGFsZjIgeCwgaGFsZjIgeSwgaGFsZiBhKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gbWl4KGhhbGYzIHgsIGhhbGYzIHksIGhhbGYgYSk7CitoYWxmNCBfX292bGQgX19jbmZuIG1peChoYWxmNCB4LCBoYWxmNCB5LCBoYWxmIGEpOworaGFsZjggX19vdmxkIF9fY25mbiBtaXgoaGFsZjggeCwgaGFsZjggeSwgaGFsZiBhKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIG1peChoYWxmMTYgeCwgaGFsZjE2IHksIGhhbGYgYSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbnZlcnRzIGRlZ3JlZXMgdG8gcmFkaWFucywgaS5lLiAoUEkgLyAxODApICoKKyAqIGRlZ3JlZXMuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhmbG9hdCBkZWdyZWVzKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHJhZGlhbnMoZmxvYXQyIGRlZ3JlZXMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhmbG9hdDMgZGVncmVlcyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiByYWRpYW5zKGZsb2F0NCBkZWdyZWVzKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHJhZGlhbnMoZmxvYXQ4IGRlZ3JlZXMpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHJhZGlhbnMoZmxvYXQxNiBkZWdyZWVzKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhkb3VibGUgZGVncmVlcyk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhkb3VibGUyIGRlZ3JlZXMpOworZG91YmxlMyBfX292bGQgX19jbmZuIHJhZGlhbnMoZG91YmxlMyBkZWdyZWVzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiByYWRpYW5zKGRvdWJsZTQgZGVncmVlcyk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhkb3VibGU4IGRlZ3JlZXMpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiByYWRpYW5zKGRvdWJsZTE2IGRlZ3JlZXMpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHJhZGlhbnMoaGFsZiBkZWdyZWVzKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhoYWxmMiBkZWdyZWVzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhoYWxmMyBkZWdyZWVzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhoYWxmNCBkZWdyZWVzKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhoYWxmOCBkZWdyZWVzKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHJhZGlhbnMoaGFsZjE2IGRlZ3JlZXMpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIDAuMCBpZiB4IDwgZWRnZSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgMS4wLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHN0ZXAoZmxvYXQgZWRnZSwgZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzdGVwKGZsb2F0MiBlZGdlLCBmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzdGVwKGZsb2F0MyBlZGdlLCBmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzdGVwKGZsb2F0NCBlZGdlLCBmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzdGVwKGZsb2F0OCBlZGdlLCBmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc3RlcChmbG9hdDE2IGVkZ2UsIGZsb2F0MTYgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzdGVwKGZsb2F0IGVkZ2UsIGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHN0ZXAoZmxvYXQgZWRnZSwgZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gc3RlcChmbG9hdCBlZGdlLCBmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzdGVwKGZsb2F0IGVkZ2UsIGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzdGVwKGZsb2F0IGVkZ2UsIGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHN0ZXAoZG91YmxlIGVkZ2UsIGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzdGVwKGRvdWJsZTIgZWRnZSwgZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBzdGVwKGRvdWJsZTMgZWRnZSwgZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzdGVwKGRvdWJsZTQgZWRnZSwgZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzdGVwKGRvdWJsZTggZWRnZSwgZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc3RlcChkb3VibGUxNiBlZGdlLCBkb3VibGUxNiB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzdGVwKGRvdWJsZSBlZGdlLCBkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIHN0ZXAoZG91YmxlIGVkZ2UsIGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc3RlcChkb3VibGUgZWRnZSwgZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzdGVwKGRvdWJsZSBlZGdlLCBkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzdGVwKGRvdWJsZSBlZGdlLCBkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBzdGVwKGhhbGYgZWRnZSwgaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc3RlcChoYWxmMiBlZGdlLCBoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gc3RlcChoYWxmMyBlZGdlLCBoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc3RlcChoYWxmNCBlZGdlLCBoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gc3RlcChoYWxmOCBlZGdlLCBoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHN0ZXAoaGFsZjE2IGVkZ2UsIGhhbGYxNiB4KTsKK2hhbGYgX19vdmxkIF9fY25mbiBzdGVwKGhhbGYgZWRnZSwgaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc3RlcChoYWxmIGVkZ2UsIGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBzdGVwKGhhbGYgZWRnZSwgaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIHN0ZXAoaGFsZiBlZGdlLCBoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gc3RlcChoYWxmIGVkZ2UsIGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc3RlcChoYWxmIGVkZ2UsIGhhbGYxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyAwLjAgaWYgeCA8PSBlZGdlMCBhbmQgMS4wIGlmIHggPj0gZWRnZTEgYW5kCisgKiBwZXJmb3JtcyBzbW9vdGggSGVybWl0ZSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gMAorICogYW5kIDF3aGVuIGVkZ2UwIDwgeCA8IGVkZ2UxLiBUaGlzIGlzIHVzZWZ1bCBpbgorICogY2FzZXMgd2hlcmUgeW91IHdvdWxkIHdhbnQgYSB0aHJlc2hvbGQgZnVuY3Rpb24KKyAqIHdpdGggYSBzbW9vdGggdHJhbnNpdGlvbi4KKyAqIFRoaXMgaXMgZXF1aXZhbGVudCB0bzoKKyAqIGdlbnR5cGUgdDsKKyAqIHQgPSBjbGFtcCAoKHggLSBlZGdlMCkgLyAoZWRnZTEgLSBlZGdlMCksIDAsIDEpOworICogcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7CisgKiBSZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYgZWRnZTAgPj0gZWRnZTEgb3IgaWYgeCwKKyAqIGVkZ2UwIG9yIGVkZ2UxIGlzIGEgTmFOLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCBmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZmxvYXQyIGVkZ2UwLCBmbG9hdDIgZWRnZTEsIGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZmxvYXQzIGVkZ2UwLCBmbG9hdDMgZWRnZTEsIGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZmxvYXQ0IGVkZ2UwLCBmbG9hdDQgZWRnZTEsIGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZmxvYXQ4IGVkZ2UwLCBmbG9hdDggZWRnZTEsIGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGZsb2F0MTYgZWRnZTAsIGZsb2F0MTYgZWRnZTEsIGZsb2F0MTYgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCBmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCBmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGRvdWJsZSBlZGdlMCwgZG91YmxlIGVkZ2UxLCBkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChkb3VibGUyIGVkZ2UwLCBkb3VibGUyIGVkZ2UxLCBkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZG91YmxlMyBlZGdlMCwgZG91YmxlMyBlZGdlMSwgZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGRvdWJsZTQgZWRnZTAsIGRvdWJsZTQgZWRnZTEsIGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChkb3VibGU4IGVkZ2UwLCBkb3VibGU4IGVkZ2UxLCBkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGRvdWJsZTE2IGVkZ2UwLCBkb3VibGUxNiBlZGdlMSwgZG91YmxlMTYgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChkb3VibGUgZWRnZTAsIGRvdWJsZSBlZGdlMSwgZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGRvdWJsZSBlZGdlMCwgZG91YmxlIGVkZ2UxLCBkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZG91YmxlIGVkZ2UwLCBkb3VibGUgZWRnZTEsIGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChkb3VibGUgZWRnZTAsIGRvdWJsZSBlZGdlMSwgZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChkb3VibGUgZWRnZTAsIGRvdWJsZSBlZGdlMSwgZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChoYWxmIGVkZ2UwLCBoYWxmIGVkZ2UxLCBoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGhhbGYyIGVkZ2UwLCBoYWxmMiBlZGdlMSwgaGFsZjIgeCk7CitoYWxmMyBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoaGFsZjMgZWRnZTAsIGhhbGYzIGVkZ2UxLCBoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChoYWxmNCBlZGdlMCwgaGFsZjQgZWRnZTEsIGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGhhbGY4IGVkZ2UwLCBoYWxmOCBlZGdlMSwgaGFsZjggeCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGhhbGYxNiBlZGdlMCwgaGFsZjE2IGVkZ2UxLCBoYWxmMTYgeCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChoYWxmIGVkZ2UwLCBoYWxmIGVkZ2UxLCBoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGhhbGYgZWRnZTAsIGhhbGYgZWRnZTEsIGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGhhbGYgZWRnZTAsIGhhbGYgZWRnZTEsIGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGhhbGYgZWRnZTAsIGhhbGYgZWRnZTEsIGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGhhbGYgZWRnZTAsIGhhbGYgZWRnZTEsIGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChoYWxmIGVkZ2UwLCBoYWxmIGVkZ2UxLCBoYWxmMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgMS4wIGlmIHggPiAwLCAtMC4wIGlmIHggPSAtMC4wLCArMC4wIGlmIHggPQorICogKzAuMCwgb3IgLTEuMCBpZiB4IDwgMC4gUmV0dXJucyAwLjAgaWYgeCBpcyBhIE5hTi4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBzaWduKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2lnbihmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzaWduKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNpZ24oZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2lnbihmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2lnbihmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBzaWduKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzaWduKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gc2lnbihkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIHNpZ24oZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzaWduKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHNpZ24oZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gc2lnbihoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiBzaWduKGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBzaWduKGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiBzaWduKGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiBzaWduKGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc2lnbihoYWxmMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvLyBPcGVuQ0wgdjEuMSBzNi4xMS41LCB2MS4yIHM2LjEyLjUsIHYyLjAgczYuMTMuNSAtIEdlb21ldHJpYyBGdW5jdGlvbnMKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHAwLnh5eiBhbmQgcDEueHl6LiBUaGUKKyAqIHcgY29tcG9uZW50IG9mIGZsb2F0NCByZXN1bHQgcmV0dXJuZWQgd2lsbCBiZSAwLjAuCisgKi8KK2Zsb2F0NCBfX292bGQgX19jbmZuIGNyb3NzKGZsb2F0NCBwMCwgZmxvYXQ0IHAxKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNyb3NzKGZsb2F0MyBwMCwgZmxvYXQzIHAxKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlNCBfX292bGQgX19jbmZuIGNyb3NzKGRvdWJsZTQgcDAsIGRvdWJsZTQgcDEpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNyb3NzKGRvdWJsZTMgcDAsIGRvdWJsZTMgcDEpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZjQgX19vdmxkIF9fY25mbiBjcm9zcyhoYWxmNCBwMCwgaGFsZjQgcDEpOworaGFsZjMgX19vdmxkIF9fY25mbiBjcm9zcyhoYWxmMyBwMCwgaGFsZjMgcDEpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIGRvdCBwcm9kdWN0LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGRvdChmbG9hdCBwMCwgZmxvYXQgcDEpOworZmxvYXQgX19vdmxkIF9fY25mbiBkb3QoZmxvYXQyIHAwLCBmbG9hdDIgcDEpOworZmxvYXQgX19vdmxkIF9fY25mbiBkb3QoZmxvYXQzIHAwLCBmbG9hdDMgcDEpOworZmxvYXQgX19vdmxkIF9fY25mbiBkb3QoZmxvYXQ0IHAwLCBmbG9hdDQgcDEpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBkb3QoZG91YmxlIHAwLCBkb3VibGUgcDEpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gZG90KGRvdWJsZTIgcDAsIGRvdWJsZTIgcDEpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gZG90KGRvdWJsZTMgcDAsIGRvdWJsZTMgcDEpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gZG90KGRvdWJsZTQgcDAsIGRvdWJsZTQgcDEpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGRvdChoYWxmIHAwLCBoYWxmIHAxKTsKK2hhbGYgX19vdmxkIF9fY25mbiBkb3QoaGFsZjIgcDAsIGhhbGYyIHAxKTsKK2hhbGYgX19vdmxkIF9fY25mbiBkb3QoaGFsZjMgcDAsIGhhbGYzIHAxKTsKK2hhbGYgX19vdmxkIF9fY25mbiBkb3QoaGFsZjQgcDAsIGhhbGY0IHAxKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBwMCBhbmQgcDEuIFRoaXMgaXMKKyAqIGNhbGN1bGF0ZWQgYXMgbGVuZ3RoKHAwIC0gcDEpLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGRpc3RhbmNlKGZsb2F0IHAwLCBmbG9hdCBwMSk7CitmbG9hdCBfX292bGQgX19jbmZuIGRpc3RhbmNlKGZsb2F0MiBwMCwgZmxvYXQyIHAxKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZGlzdGFuY2UoZmxvYXQzIHAwLCBmbG9hdDMgcDEpOworZmxvYXQgX19vdmxkIF9fY25mbiBkaXN0YW5jZShmbG9hdDQgcDAsIGZsb2F0NCBwMSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGRpc3RhbmNlKGRvdWJsZSBwMCwgZG91YmxlIHAxKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGRpc3RhbmNlKGRvdWJsZTIgcDAsIGRvdWJsZTIgcDEpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gZGlzdGFuY2UoZG91YmxlMyBwMCwgZG91YmxlMyBwMSk7Citkb3VibGUgX19vdmxkIF9fY25mbiBkaXN0YW5jZShkb3VibGU0IHAwLCBkb3VibGU0IHAxKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBkaXN0YW5jZShoYWxmIHAwLCBoYWxmIHAxKTsKK2hhbGYgX19vdmxkIF9fY25mbiBkaXN0YW5jZShoYWxmMiBwMCwgaGFsZjIgcDEpOworaGFsZiBfX292bGQgX19jbmZuIGRpc3RhbmNlKGhhbGYzIHAwLCBoYWxmMyBwMSk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gZGlzdGFuY2UoaGFsZjQgcDAsIGhhbGY0IHAxKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdmVjdG9yIHAsIGkuZS4sCisgKiBzcXJ0KHAueDIgKyBwLnkgMiArIC4uLikKKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBsZW5ndGgoZmxvYXQgcCk7CitmbG9hdCBfX292bGQgX19jbmZuIGxlbmd0aChmbG9hdDIgcCk7CitmbG9hdCBfX292bGQgX19jbmZuIGxlbmd0aChmbG9hdDMgcCk7CitmbG9hdCBfX292bGQgX19jbmZuIGxlbmd0aChmbG9hdDQgcCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGxlbmd0aChkb3VibGUgcCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBsZW5ndGgoZG91YmxlMiBwKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGxlbmd0aChkb3VibGUzIHApOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gbGVuZ3RoKGRvdWJsZTQgcCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gbGVuZ3RoKGhhbGYgcCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gbGVuZ3RoKGhhbGYyIHApOworaGFsZiBfX292bGQgX19jbmZuIGxlbmd0aChoYWxmMyBwKTsKK2hhbGYgX19vdmxkIF9fY25mbiBsZW5ndGgoaGFsZjQgcCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgYSB2ZWN0b3IgaW4gdGhlIHNhbWUgZGlyZWN0aW9uIGFzIHAgYnV0IHdpdGggYQorICogbGVuZ3RoIG9mIDEuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbm9ybWFsaXplKGZsb2F0IHApOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbm9ybWFsaXplKGZsb2F0MiBwKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5vcm1hbGl6ZShmbG9hdDMgcCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBub3JtYWxpemUoZmxvYXQ0IHApOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBub3JtYWxpemUoZG91YmxlIHApOworZG91YmxlMiBfX292bGQgX19jbmZuIG5vcm1hbGl6ZShkb3VibGUyIHApOworZG91YmxlMyBfX292bGQgX19jbmZuIG5vcm1hbGl6ZShkb3VibGUzIHApOworZG91YmxlNCBfX292bGQgX19jbmZuIG5vcm1hbGl6ZShkb3VibGU0IHApOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIG5vcm1hbGl6ZShoYWxmIHApOworaGFsZjIgX19vdmxkIF9fY25mbiBub3JtYWxpemUoaGFsZjIgcCk7CitoYWxmMyBfX292bGQgX19jbmZuIG5vcm1hbGl6ZShoYWxmMyBwKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbm9ybWFsaXplKGhhbGY0IHApOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIGZhc3RfbGVuZ3RoKHAwIC0gcDEpLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGZhc3RfZGlzdGFuY2UoZmxvYXQgcDAsIGZsb2F0IHAxKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZmFzdF9kaXN0YW5jZShmbG9hdDIgcDAsIGZsb2F0MiBwMSk7CitmbG9hdCBfX292bGQgX19jbmZuIGZhc3RfZGlzdGFuY2UoZmxvYXQzIHAwLCBmbG9hdDMgcDEpOworZmxvYXQgX19vdmxkIF9fY25mbiBmYXN0X2Rpc3RhbmNlKGZsb2F0NCBwMCwgZmxvYXQ0IHAxKTsKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGZhc3RfZGlzdGFuY2UoaGFsZiBwMCwgaGFsZiBwMSk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gZmFzdF9kaXN0YW5jZShoYWxmMiBwMCwgaGFsZjIgcDEpOworaGFsZiBfX292bGQgX19jbmZuIGZhc3RfZGlzdGFuY2UoaGFsZjMgcDAsIGhhbGYzIHAxKTsKK2hhbGYgX19vdmxkIF9fY25mbiBmYXN0X2Rpc3RhbmNlKGhhbGY0IHAwLCBoYWxmNCBwMSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB2ZWN0b3IgcCBjb21wdXRlZCBhczoKKyAqIGhhbGZfc3FydChwLngyICsgcC55MiArIC4uLikKKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBmYXN0X2xlbmd0aChmbG9hdCBwKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZmFzdF9sZW5ndGgoZmxvYXQyIHApOworZmxvYXQgX19vdmxkIF9fY25mbiBmYXN0X2xlbmd0aChmbG9hdDMgcCk7CitmbG9hdCBfX292bGQgX19jbmZuIGZhc3RfbGVuZ3RoKGZsb2F0NCBwKTsKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGZhc3RfbGVuZ3RoKGhhbGYgcCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gZmFzdF9sZW5ndGgoaGFsZjIgcCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gZmFzdF9sZW5ndGgoaGFsZjMgcCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gZmFzdF9sZW5ndGgoaGFsZjQgcCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgYSB2ZWN0b3IgaW4gdGhlIHNhbWUgZGlyZWN0aW9uIGFzIHAgYnV0IHdpdGggYQorICogbGVuZ3RoIG9mIDEuIGZhc3Rfbm9ybWFsaXplIGlzIGNvbXB1dGVkIGFzOgorICogcCAqIGhhbGZfcnNxcnQgKHAueF4yICsgcC55XjIgKyAuLi4gKQorICogVGhlIHJlc3VsdCBzaGFsbCBiZSB3aXRoaW4gODE5MiB1bHBzIGVycm9yIGZyb20gdGhlCisgKiBpbmZpbml0ZWx5IHByZWNpc2UgcmVzdWx0IG9mCisgKiBpZiAoYWxsKHAgPT0gMC4wZikpCisgKiByZXN1bHQgPSBwOworICogZWxzZQorICogcmVzdWx0ID0gcCAvIHNxcnQgKHAueF4yICsgcC55XjIgKyAuLi4pOworICogd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnM6CisgKiAxKSBJZiB0aGUgc3VtIG9mIHNxdWFyZXMgaXMgZ3JlYXRlciB0aGFuIEZMVF9NQVgKKyAqIHRoZW4gdGhlIHZhbHVlIG9mIHRoZSBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gdGhlCisgKiByZXN1bHQgdmVjdG9yIGFyZSB1bmRlZmluZWQuCisgKiAyKSBJZiB0aGUgc3VtIG9mIHNxdWFyZXMgaXMgbGVzcyB0aGFuIEZMVF9NSU4gdGhlbgorICogdGhlIGltcGxlbWVudGF0aW9uIG1heSByZXR1cm4gYmFjayBwLgorICogMykgSWYgdGhlIGRldmljZSBpcyBpbiAiZGVub3JtcyBhcmUgZmx1c2hlZCB0byB6ZXJvIgorICogbW9kZSwgaW5kaXZpZHVhbCBvcGVyYW5kIGVsZW1lbnRzIHdpdGggbWFnbml0dWRlCisgKiBsZXNzIHRoYW4gc3FydChGTFRfTUlOKSBtYXkgYmUgZmx1c2hlZCB0byB6ZXJvCisgKiBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIHRoZSBjYWxjdWxhdGlvbi4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBmYXN0X25vcm1hbGl6ZShmbG9hdCBwKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGZhc3Rfbm9ybWFsaXplKGZsb2F0MiBwKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGZhc3Rfbm9ybWFsaXplKGZsb2F0MyBwKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGZhc3Rfbm9ybWFsaXplKGZsb2F0NCBwKTsKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGZhc3Rfbm9ybWFsaXplKGhhbGYgcCk7CitoYWxmMiBfX292bGQgX19jbmZuIGZhc3Rfbm9ybWFsaXplKGhhbGYyIHApOworaGFsZjMgX19vdmxkIF9fY25mbiBmYXN0X25vcm1hbGl6ZShoYWxmMyBwKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZmFzdF9ub3JtYWxpemUoaGFsZjQgcCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvLyBPcGVuQ0wgdjEuMSBzNi4xMS42LCB2MS4yIHM2LjEyLjYsIHYyLjAgczYuMTMuNiAtIFJlbGF0aW9uYWwgRnVuY3Rpb25zCisKKy8qKgorICogaW50biBpc2VxdWFsIChmbG9hdG4geCwgZmxvYXRuIHkpCisgKiBSZXR1cm5zIHRoZSBjb21wb25lbnQtd2lzZSBjb21wYXJlIG9mIHggPT0geS4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChmbG9hdCB4LCBmbG9hdCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBpc2VxdWFsKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChmbG9hdDMgeCwgZmxvYXQzIHkpOworaW50NCBfX292bGQgX19jbmZuIGlzZXF1YWwoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBpc2VxdWFsKGZsb2F0OCB4LCBmbG9hdDggeSk7CitpbnQxNiBfX292bGQgX19jbmZuIGlzZXF1YWwoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc2VxdWFsKGRvdWJsZSB4LCBkb3VibGUgeSk7Citsb25nMiBfX292bGQgX19jbmZuIGlzZXF1YWwoZG91YmxlMiB4LCBkb3VibGUyIHkpOworbG9uZzMgX19vdmxkIF9fY25mbiBpc2VxdWFsKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIGlzZXF1YWwoZG91YmxlOCB4LCBkb3VibGU4IHkpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzZXF1YWwoaGFsZiB4LCBoYWxmIHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChoYWxmMiB4LCBoYWxmMiB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGlzZXF1YWwoaGFsZjMgeCwgaGFsZjMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBpc2VxdWFsKGhhbGY0IHgsIGhhbGY0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChoYWxmOCB4LCBoYWxmOCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBpc2VxdWFsKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgdGhlIGNvbXBvbmVudC13aXNlIGNvbXBhcmUgb2YgeCAhPSB5LgorICovCitpbnQgX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGZsb2F0IHgsIGZsb2F0IHkpOworaW50MiBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChmbG9hdDQgeCwgZmxvYXQ0IHkpOworaW50OCBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2ludCBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoZG91YmxlIHgsIGRvdWJsZSB5KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citsb25nMyBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoZG91YmxlMyB4LCBkb3VibGUzIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGRvdWJsZTQgeCwgZG91YmxlNCB5KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChkb3VibGU4IHgsIGRvdWJsZTggeSk7Citsb25nMTYgX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraW50IF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChoYWxmIHgsIGhhbGYgeSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGhhbGYyIHgsIGhhbGYyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChoYWxmMyB4LCBoYWxmMyB5KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoaGFsZjQgeCwgaGFsZjQgeSk7CitzaG9ydDggX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGhhbGY4IHgsIGhhbGY4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyB0aGUgY29tcG9uZW50LXdpc2UgY29tcGFyZSBvZiB4ID4geS4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGZsb2F0IHgsIGZsb2F0IHkpOworaW50MiBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihmbG9hdDIgeCwgZmxvYXQyIHkpOworaW50MyBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihmbG9hdDMgeCwgZmxvYXQzIHkpOworaW50NCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihmbG9hdDQgeCwgZmxvYXQ0IHkpOworaW50OCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihmbG9hdDggeCwgZmxvYXQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoZG91YmxlIHgsIGRvdWJsZSB5KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGRvdWJsZTQgeCwgZG91YmxlNCB5KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihoYWxmIHgsIGhhbGYgeSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoaGFsZjIgeCwgaGFsZjIgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoaGFsZjMgeCwgaGFsZjMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoaGFsZjQgeCwgaGFsZjQgeSk7CitzaG9ydDggX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoaGFsZjggeCwgaGFsZjggeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgdGhlIGNvbXBvbmVudC13aXNlIGNvbXBhcmUgb2YgeCA+PSB5LgorICovCitpbnQgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChmbG9hdCB4LCBmbG9hdCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChmbG9hdDIgeCwgZmxvYXQyIHkpOworaW50MyBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChmbG9hdDggeCwgZmxvYXQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2ludCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGRvdWJsZSB4LCBkb3VibGUgeSk7Citsb25nMiBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoZG91YmxlMyB4LCBkb3VibGUzIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraW50IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoaGFsZiB4LCBoYWxmIHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoaGFsZjIgeCwgaGFsZjIgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChoYWxmMyB4LCBoYWxmMyB5KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGhhbGY0IHgsIGhhbGY0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoaGFsZjggeCwgaGFsZjggeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyB0aGUgY29tcG9uZW50LXdpc2UgY29tcGFyZSBvZiB4IDwgeS4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGZsb2F0IHgsIGZsb2F0IHkpOworaW50MiBfX292bGQgX19jbmZuIGlzbGVzcyhmbG9hdDIgeCwgZmxvYXQyIHkpOworaW50MyBfX292bGQgX19jbmZuIGlzbGVzcyhmbG9hdDMgeCwgZmxvYXQzIHkpOworaW50NCBfX292bGQgX19jbmZuIGlzbGVzcyhmbG9hdDQgeCwgZmxvYXQ0IHkpOworaW50OCBfX292bGQgX19jbmZuIGlzbGVzcyhmbG9hdDggeCwgZmxvYXQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBpc2xlc3MoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc2xlc3MoZG91YmxlIHgsIGRvdWJsZSB5KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGRvdWJsZTQgeCwgZG91YmxlNCB5KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGlzbGVzcyhkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzbGVzcyhoYWxmIHgsIGhhbGYgeSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBpc2xlc3MoaGFsZjIgeCwgaGFsZjIgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBpc2xlc3MoaGFsZjMgeCwgaGFsZjMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBpc2xlc3MoaGFsZjQgeCwgaGFsZjQgeSk7CitzaG9ydDggX19vdmxkIF9fY25mbiBpc2xlc3MoaGFsZjggeCwgaGFsZjggeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgdGhlIGNvbXBvbmVudC13aXNlIGNvbXBhcmUgb2YgeCA8PSB5LgorICovCitpbnQgX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChmbG9hdCB4LCBmbG9hdCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChmbG9hdDIgeCwgZmxvYXQyIHkpOworaW50MyBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChmbG9hdDggeCwgZmxvYXQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2ludCBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGRvdWJsZSB4LCBkb3VibGUgeSk7Citsb25nMiBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoZG91YmxlMyB4LCBkb3VibGUzIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraW50IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoaGFsZiB4LCBoYWxmIHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoaGFsZjIgeCwgaGFsZjIgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChoYWxmMyB4LCBoYWxmMyB5KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGhhbGY0IHgsIGhhbGY0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoaGFsZjggeCwgaGFsZjggeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyB0aGUgY29tcG9uZW50LXdpc2UgY29tcGFyZSBvZgorICogKHggPCB5KSB8fCAoeCA+IHkpIC4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihmbG9hdCB4LCBmbG9hdCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihmbG9hdDMgeCwgZmxvYXQzIHkpOworaW50NCBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGZsb2F0OCB4LCBmbG9hdDggeSk7CitpbnQxNiBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGRvdWJsZSB4LCBkb3VibGUgeSk7Citsb25nMiBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoZG91YmxlMiB4LCBkb3VibGUyIHkpOworbG9uZzMgX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoZG91YmxlOCB4LCBkb3VibGU4IHkpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoaGFsZiB4LCBoYWxmIHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihoYWxmMiB4LCBoYWxmMiB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoaGFsZjMgeCwgaGFsZjMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGhhbGY0IHgsIGhhbGY0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihoYWxmOCB4LCBoYWxmOCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFRlc3QgZm9yIGZpbml0ZSB2YWx1ZS4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXNmaW5pdGUoZmxvYXQpOworaW50MiBfX292bGQgX19jbmZuIGlzZmluaXRlKGZsb2F0Mik7CitpbnQzIF9fb3ZsZCBfX2NuZm4gaXNmaW5pdGUoZmxvYXQzKTsKK2ludDQgX19vdmxkIF9fY25mbiBpc2Zpbml0ZShmbG9hdDQpOworaW50OCBfX292bGQgX19jbmZuIGlzZmluaXRlKGZsb2F0OCk7CitpbnQxNiBfX292bGQgX19jbmZuIGlzZmluaXRlKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc2Zpbml0ZShkb3VibGUpOworbG9uZzIgX19vdmxkIF9fY25mbiBpc2Zpbml0ZShkb3VibGUyKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gaXNmaW5pdGUoZG91YmxlMyk7Citsb25nNCBfX292bGQgX19jbmZuIGlzZmluaXRlKGRvdWJsZTQpOworbG9uZzggX19vdmxkIF9fY25mbiBpc2Zpbml0ZShkb3VibGU4KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGlzZmluaXRlKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzZmluaXRlKGhhbGYpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaXNmaW5pdGUoaGFsZjIpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gaXNmaW5pdGUoaGFsZjMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gaXNmaW5pdGUoaGFsZjQpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaXNmaW5pdGUoaGFsZjgpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGlzZmluaXRlKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFRlc3QgZm9yIGluZmluaXR5IHZhbHVlICgrdmUgb3IgLXZlKSAuCisgKi8KK2ludCBfX292bGQgX19jbmZuIGlzaW5mKGZsb2F0KTsKK2ludDIgX19vdmxkIF9fY25mbiBpc2luZihmbG9hdDIpOworaW50MyBfX292bGQgX19jbmZuIGlzaW5mKGZsb2F0Myk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaXNpbmYoZmxvYXQ0KTsKK2ludDggX19vdmxkIF9fY25mbiBpc2luZihmbG9hdDgpOworaW50MTYgX19vdmxkIF9fY25mbiBpc2luZihmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAoraW50IF9fb3ZsZCBfX2NuZm4gaXNpbmYoZG91YmxlKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gaXNpbmYoZG91YmxlMik7Citsb25nMyBfX292bGQgX19jbmZuIGlzaW5mKGRvdWJsZTMpOworbG9uZzQgX19vdmxkIF9fY25mbiBpc2luZihkb3VibGU0KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gaXNpbmYoZG91YmxlOCk7Citsb25nMTYgX19vdmxkIF9fY25mbiBpc2luZihkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitpbnQgX19vdmxkIF9fY25mbiBpc2luZihoYWxmKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGlzaW5mKGhhbGYyKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGlzaW5mKGhhbGYzKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGlzaW5mKGhhbGY0KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGlzaW5mKGhhbGY4KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBpc2luZihoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBUZXN0IGZvciBhIE5hTi4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXNuYW4oZmxvYXQpOworaW50MiBfX292bGQgX19jbmZuIGlzbmFuKGZsb2F0Mik7CitpbnQzIF9fb3ZsZCBfX2NuZm4gaXNuYW4oZmxvYXQzKTsKK2ludDQgX19vdmxkIF9fY25mbiBpc25hbihmbG9hdDQpOworaW50OCBfX292bGQgX19jbmZuIGlzbmFuKGZsb2F0OCk7CitpbnQxNiBfX292bGQgX19jbmZuIGlzbmFuKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc25hbihkb3VibGUpOworbG9uZzIgX19vdmxkIF9fY25mbiBpc25hbihkb3VibGUyKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gaXNuYW4oZG91YmxlMyk7Citsb25nNCBfX292bGQgX19jbmZuIGlzbmFuKGRvdWJsZTQpOworbG9uZzggX19vdmxkIF9fY25mbiBpc25hbihkb3VibGU4KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGlzbmFuKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzbmFuKGhhbGYpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaXNuYW4oaGFsZjIpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gaXNuYW4oaGFsZjMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gaXNuYW4oaGFsZjQpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaXNuYW4oaGFsZjgpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGlzbmFuKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFRlc3QgZm9yIGEgbm9ybWFsIHZhbHVlLgorICovCitpbnQgX19vdmxkIF9fY25mbiBpc25vcm1hbChmbG9hdCk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoZmxvYXQyKTsKK2ludDMgX19vdmxkIF9fY25mbiBpc25vcm1hbChmbG9hdDMpOworaW50NCBfX292bGQgX19jbmZuIGlzbm9ybWFsKGZsb2F0NCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoZmxvYXQ4KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2ludCBfX292bGQgX19jbmZuIGlzbm9ybWFsKGRvdWJsZSk7Citsb25nMiBfX292bGQgX19jbmZuIGlzbm9ybWFsKGRvdWJsZTIpOworbG9uZzMgX19vdmxkIF9fY25mbiBpc25vcm1hbChkb3VibGUzKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoZG91YmxlNCk7Citsb25nOCBfX292bGQgX19jbmZuIGlzbm9ybWFsKGRvdWJsZTgpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraW50IF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoaGFsZik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBpc25vcm1hbChoYWxmMik7CitzaG9ydDMgX19vdmxkIF9fY25mbiBpc25vcm1hbChoYWxmMyk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBpc25vcm1hbChoYWxmNCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBpc25vcm1hbChoYWxmOCk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogVGVzdCBpZiBhcmd1bWVudHMgYXJlIG9yZGVyZWQuIGlzb3JkZXJlZCgpIHRha2VzCisgKiBhcmd1bWVudHMgeCBhbmQgeSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdAorICogaXNlcXVhbCh4LCB4KSAmJiBpc2VxdWFsKHksIHkpLgorICovCitpbnQgX19vdmxkIF9fY25mbiBpc29yZGVyZWQoZmxvYXQgeCwgZmxvYXQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGZsb2F0OCB4LCBmbG9hdDggeSk7CitpbnQxNiBfX292bGQgX19jbmZuIGlzb3JkZXJlZChmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2ludCBfX292bGQgX19jbmZuIGlzb3JkZXJlZChkb3VibGUgeCwgZG91YmxlIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBpc29yZGVyZWQoZG91YmxlMiB4LCBkb3VibGUyIHkpOworbG9uZzMgX19vdmxkIF9fY25mbiBpc29yZGVyZWQoZG91YmxlMyB4LCBkb3VibGUzIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiBpc29yZGVyZWQoZG91YmxlNCB4LCBkb3VibGU0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBpc29yZGVyZWQoZG91YmxlOCB4LCBkb3VibGU4IHkpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraW50IF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGhhbGYgeCwgaGFsZiB5KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGlzb3JkZXJlZChoYWxmMiB4LCBoYWxmMiB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGlzb3JkZXJlZChoYWxmMyB4LCBoYWxmMyB5KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGlzb3JkZXJlZChoYWxmNCB4LCBoYWxmNCB5KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGlzb3JkZXJlZChoYWxmOCB4LCBoYWxmOCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBpc29yZGVyZWQoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogVGVzdCBpZiBhcmd1bWVudHMgYXJlIHVub3JkZXJlZC4gaXN1bm9yZGVyZWQoKQorICogdGFrZXMgYXJndW1lbnRzIHggYW5kIHksIHJldHVybmluZyBub24temVybyBpZiB4IG9yIHkKKyAqIGlzIE5hTiwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCitpbnQgX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChmbG9hdCB4LCBmbG9hdCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChmbG9hdDIgeCwgZmxvYXQyIHkpOworaW50MyBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChmbG9hdDggeCwgZmxvYXQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2ludCBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGRvdWJsZSB4LCBkb3VibGUgeSk7Citsb25nMiBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoZG91YmxlMyB4LCBkb3VibGUzIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraW50IF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoaGFsZiB4LCBoYWxmIHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoaGFsZjIgeCwgaGFsZjIgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChoYWxmMyB4LCBoYWxmMyB5KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGhhbGY0IHgsIGhhbGY0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoaGFsZjggeCwgaGFsZjggeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogVGVzdCBmb3Igc2lnbiBiaXQuIFRoZSBzY2FsYXIgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24KKyAqIHJldHVybnMgYSAxIGlmIHRoZSBzaWduIGJpdCBpbiB0aGUgZmxvYXQgaXMgc2V0IGVsc2UgcmV0dXJucworICogMC4gVGhlIHZlY3RvciB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZQorICogZm9sbG93aW5nIGZvciBlYWNoIGNvbXBvbmVudCBpbiBmbG9hdG46IGEgLTEgaWYgdGhlCisgKiBzaWduIGJpdCBpbiB0aGUgZmxvYXQgaXMgc2V0IGVsc2UgcmV0dXJucyAwLgorICovCitpbnQgX19vdmxkIF9fY25mbiBzaWduYml0KGZsb2F0KTsKK2ludDIgX19vdmxkIF9fY25mbiBzaWduYml0KGZsb2F0Mik7CitpbnQzIF9fb3ZsZCBfX2NuZm4gc2lnbmJpdChmbG9hdDMpOworaW50NCBfX292bGQgX19jbmZuIHNpZ25iaXQoZmxvYXQ0KTsKK2ludDggX19vdmxkIF9fY25mbiBzaWduYml0KGZsb2F0OCk7CitpbnQxNiBfX292bGQgX19jbmZuIHNpZ25iaXQoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2ludCBfX292bGQgX19jbmZuIHNpZ25iaXQoZG91YmxlKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2lnbmJpdChkb3VibGUyKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gc2lnbmJpdChkb3VibGUzKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2lnbmJpdChkb3VibGU0KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2lnbmJpdChkb3VibGU4KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHNpZ25iaXQoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraW50IF9fb3ZsZCBfX2NuZm4gc2lnbmJpdChoYWxmKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNpZ25iaXQoaGFsZjIpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2lnbmJpdChoYWxmMyk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBzaWduYml0KGhhbGY0KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNpZ25iaXQoaGFsZjgpOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNpZ25iaXQoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyAxIGlmIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiBhbnkgY29tcG9uZW50CisgKiBvZiB4IGlzIHNldDsgb3RoZXJ3aXNlIHJldHVybnMgMC4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGNoYXIgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkoY2hhcjIgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkoY2hhcjMgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkoY2hhcjQgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkoY2hhcjggeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkoY2hhcjE2IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KHNob3J0IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KHNob3J0MiB4KTsKK2ludCBfX292bGQgX19jbmZuIGFueShzaG9ydDMgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkoc2hvcnQ0IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KHNob3J0OCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFueShzaG9ydDE2IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGludCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFueShpbnQyIHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGludDMgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkoaW50NCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFueShpbnQ4IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGludDE2IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGxvbmcgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkobG9uZzIgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkobG9uZzMgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkobG9uZzQgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkobG9uZzggeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkobG9uZzE2IHgpOworCisvKioKKyAqIFJldHVybnMgMSBpZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gYWxsIGNvbXBvbmVudHMKKyAqIG9mIHggaXMgc2V0OyBvdGhlcndpc2UgcmV0dXJucyAwLgorICovCitpbnQgX19vdmxkIF9fY25mbiBhbGwoY2hhciB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChjaGFyMiB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChjaGFyMyB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChjaGFyNCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChjaGFyOCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChjaGFyMTYgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoc2hvcnQgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoc2hvcnQyIHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKHNob3J0MyB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChzaG9ydDQgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoc2hvcnQ4IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKHNob3J0MTYgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoaW50IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKGludDIgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoaW50MyB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChpbnQ0IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKGludDggeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoaW50MTYgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwobG9uZyB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChsb25nMiB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChsb25nMyB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChsb25nNCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChsb25nOCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChsb25nMTYgeCk7CisKKy8qKgorICogRWFjaCBiaXQgb2YgdGhlIHJlc3VsdCBpcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgb2YgYSBpZgorICogdGhlIGNvcnJlc3BvbmRpbmcgYml0IG9mIGMgaXMgMC4gT3RoZXJ3aXNlIGl0IGlzIHRoZQorICogY29ycmVzcG9uZGluZyBiaXQgb2YgYi4KKyAqLworY2hhciBfX292bGQgX19jbmZuIGJpdHNlbGVjdChjaGFyIGEsIGNoYXIgYiwgY2hhciBjKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVjaGFyIGEsIHVjaGFyIGIsIHVjaGFyIGMpOworY2hhcjIgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoY2hhcjIgYSwgY2hhcjIgYiwgY2hhcjIgYyk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodWNoYXIyIGEsIHVjaGFyMiBiLCB1Y2hhcjIgYyk7CitjaGFyMyBfX292bGQgX19jbmZuIGJpdHNlbGVjdChjaGFyMyBhLCBjaGFyMyBiLCBjaGFyMyBjKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1Y2hhcjMgYSwgdWNoYXIzIGIsIHVjaGFyMyBjKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGNoYXI0IGEsIGNoYXI0IGIsIGNoYXI0IGMpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVjaGFyNCBhLCB1Y2hhcjQgYiwgdWNoYXI0IGMpOworY2hhcjggX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoY2hhcjggYSwgY2hhcjggYiwgY2hhcjggYyk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodWNoYXI4IGEsIHVjaGFyOCBiLCB1Y2hhcjggYyk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoY2hhcjE2IGEsIGNoYXIxNiBiLCBjaGFyMTYgYyk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVjaGFyMTYgYSwgdWNoYXIxNiBiLCB1Y2hhcjE2IGMpOworc2hvcnQgX19vdmxkIF9fY25mbiBiaXRzZWxlY3Qoc2hvcnQgYSwgc2hvcnQgYiwgc2hvcnQgYyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodXNob3J0IGEsIHVzaG9ydCBiLCB1c2hvcnQgYyk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBiaXRzZWxlY3Qoc2hvcnQyIGEsIHNob3J0MiBiLCBzaG9ydDIgYyk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVzaG9ydDIgYSwgdXNob3J0MiBiLCB1c2hvcnQyIGMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHNob3J0MyBhLCBzaG9ydDMgYiwgc2hvcnQzIGMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1c2hvcnQzIGEsIHVzaG9ydDMgYiwgdXNob3J0MyBjKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGJpdHNlbGVjdChzaG9ydDQgYSwgc2hvcnQ0IGIsIHNob3J0NCBjKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodXNob3J0NCBhLCB1c2hvcnQ0IGIsIHVzaG9ydDQgYyk7CitzaG9ydDggX19vdmxkIF9fY25mbiBiaXRzZWxlY3Qoc2hvcnQ4IGEsIHNob3J0OCBiLCBzaG9ydDggYyk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVzaG9ydDggYSwgdXNob3J0OCBiLCB1c2hvcnQ4IGMpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGJpdHNlbGVjdChzaG9ydDE2IGEsIHNob3J0MTYgYiwgc2hvcnQxNiBjKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVzaG9ydDE2IGEsIHVzaG9ydDE2IGIsIHVzaG9ydDE2IGMpOworaW50IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGludCBhLCBpbnQgYiwgaW50IGMpOwordWludCBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1aW50IGEsIHVpbnQgYiwgdWludCBjKTsKK2ludDIgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoaW50MiBhLCBpbnQyIGIsIGludDIgYyk7Cit1aW50MiBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1aW50MiBhLCB1aW50MiBiLCB1aW50MiBjKTsKK2ludDMgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoaW50MyBhLCBpbnQzIGIsIGludDMgYyk7Cit1aW50MyBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1aW50MyBhLCB1aW50MyBiLCB1aW50MyBjKTsKK2ludDQgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoaW50NCBhLCBpbnQ0IGIsIGludDQgYyk7Cit1aW50NCBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1aW50NCBhLCB1aW50NCBiLCB1aW50NCBjKTsKK2ludDggX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoaW50OCBhLCBpbnQ4IGIsIGludDggYyk7Cit1aW50OCBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1aW50OCBhLCB1aW50OCBiLCB1aW50OCBjKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGludDE2IGEsIGludDE2IGIsIGludDE2IGMpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVpbnQxNiBhLCB1aW50MTYgYiwgdWludDE2IGMpOworbG9uZyBfX292bGQgX19jbmZuIGJpdHNlbGVjdChsb25nIGEsIGxvbmcgYiwgbG9uZyBjKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVsb25nIGEsIHVsb25nIGIsIHVsb25nIGMpOworbG9uZzIgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QobG9uZzIgYSwgbG9uZzIgYiwgbG9uZzIgYyk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodWxvbmcyIGEsIHVsb25nMiBiLCB1bG9uZzIgYyk7Citsb25nMyBfX292bGQgX19jbmZuIGJpdHNlbGVjdChsb25nMyBhLCBsb25nMyBiLCBsb25nMyBjKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1bG9uZzMgYSwgdWxvbmczIGIsIHVsb25nMyBjKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGxvbmc0IGEsIGxvbmc0IGIsIGxvbmc0IGMpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVsb25nNCBhLCB1bG9uZzQgYiwgdWxvbmc0IGMpOworbG9uZzggX19vdmxkIF9fY25mbiBiaXRzZWxlY3QobG9uZzggYSwgbG9uZzggYiwgbG9uZzggYyk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodWxvbmc4IGEsIHVsb25nOCBiLCB1bG9uZzggYyk7Citsb25nMTYgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QobG9uZzE2IGEsIGxvbmcxNiBiLCBsb25nMTYgYyk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVsb25nMTYgYSwgdWxvbmcxNiBiLCB1bG9uZzE2IGMpOworZmxvYXQgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgYyk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoZmxvYXQyIGEsIGZsb2F0MiBiLCBmbG9hdDIgYyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoZmxvYXQzIGEsIGZsb2F0MyBiLCBmbG9hdDMgYyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoZmxvYXQ0IGEsIGZsb2F0NCBiLCBmbG9hdDQgYyk7CitmbG9hdDggX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoZmxvYXQ4IGEsIGZsb2F0OCBiLCBmbG9hdDggYyk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGZsb2F0MTYgYSwgZmxvYXQxNiBiLCBmbG9hdDE2IGMpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYyk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGRvdWJsZTIgYSwgZG91YmxlMiBiLCBkb3VibGUyIGMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGJpdHNlbGVjdChkb3VibGUzIGEsIGRvdWJsZTMgYiwgZG91YmxlMyBjKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoZG91YmxlNCBhLCBkb3VibGU0IGIsIGRvdWJsZTQgYyk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGRvdWJsZTggYSwgZG91YmxlOCBiLCBkb3VibGU4IGMpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoZG91YmxlMTYgYSwgZG91YmxlMTYgYiwgZG91YmxlMTYgYyk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGhhbGYgYSwgaGFsZiBiLCBoYWxmIGMpOworaGFsZjIgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoaGFsZjIgYSwgaGFsZjIgYiwgaGFsZjIgYyk7CitoYWxmMyBfX292bGQgX19jbmZuIGJpdHNlbGVjdChoYWxmMyBhLCBoYWxmMyBiLCBoYWxmMyBjKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGhhbGY0IGEsIGhhbGY0IGIsIGhhbGY0IGMpOworaGFsZjggX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoaGFsZjggYSwgaGFsZjggYiwgaGFsZjggYyk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoaGFsZjE2IGEsIGhhbGYxNiBiLCBoYWxmMTYgYyk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIEZvciBlYWNoIGNvbXBvbmVudCBvZiBhIHZlY3RvciB0eXBlLAorICogcmVzdWx0W2ldID0gaWYgTVNCIG9mIGNbaV0gaXMgc2V0ID8gYltpXSA6IGFbaV0uCisgKiBGb3IgYSBzY2FsYXIgdHlwZSwgcmVzdWx0ID0gYyA/IGIgOiBhLgorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIgYSwgY2hhciBiLCBjaGFyIGMpOwordWNoYXIgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIgYSwgdWNoYXIgYiwgY2hhciBjKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIyIGEsIGNoYXIyIGIsIGNoYXIyIGMpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMiBhLCB1Y2hhcjIgYiwgY2hhcjIgYyk7CitjaGFyMyBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMyBhLCBjaGFyMyBiLCBjaGFyMyBjKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjMgYSwgdWNoYXIzIGIsIGNoYXIzIGMpOworY2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjQgYSwgY2hhcjQgYiwgY2hhcjQgYyk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXI0IGEsIHVjaGFyNCBiLCBjaGFyNCBjKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI4IGEsIGNoYXI4IGIsIGNoYXI4IGMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyOCBhLCB1Y2hhcjggYiwgY2hhcjggYyk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjE2IGEsIGNoYXIxNiBiLCBjaGFyMTYgYyk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMTYgYSwgdWNoYXIxNiBiLCBjaGFyMTYgYyk7CitzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydCBhLCBzaG9ydCBiLCBjaGFyIGMpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydCBhLCB1c2hvcnQgYiwgY2hhciBjKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDIgYSwgc2hvcnQyIGIsIGNoYXIyIGMpOwordXNob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQyIGEsIHVzaG9ydDIgYiwgY2hhcjIgYyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQzIGEsIHNob3J0MyBiLCBjaGFyMyBjKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MyBhLCB1c2hvcnQzIGIsIGNoYXIzIGMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0NCBhLCBzaG9ydDQgYiwgY2hhcjQgYyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDQgYSwgdXNob3J0NCBiLCBjaGFyNCBjKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDggYSwgc2hvcnQ4IGIsIGNoYXI4IGMpOwordXNob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ4IGEsIHVzaG9ydDggYiwgY2hhcjggYyk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MTYgYSwgc2hvcnQxNiBiLCBjaGFyMTYgYyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQxNiBhLCB1c2hvcnQxNiBiLCBjaGFyMTYgYyk7CitpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50IGEsIGludCBiLCBjaGFyIGMpOwordWludCBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50IGEsIHVpbnQgYiwgY2hhciBjKTsKK2ludDIgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MiBhLCBpbnQyIGIsIGNoYXIyIGMpOwordWludDIgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDIgYSwgdWludDIgYiwgY2hhcjIgYyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDMgYSwgaW50MyBiLCBjaGFyMyBjKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQzIGEsIHVpbnQzIGIsIGNoYXIzIGMpOworaW50NCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ0IGEsIGludDQgYiwgY2hhcjQgYyk7Cit1aW50NCBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50NCBhLCB1aW50NCBiLCBjaGFyNCBjKTsKK2ludDggX19vdmxkIF9fY25mbiBzZWxlY3QoaW50OCBhLCBpbnQ4IGIsIGNoYXI4IGMpOwordWludDggX19vdmxkIF9fY25mbiBzZWxlY3QodWludDggYSwgdWludDggYiwgY2hhcjggYyk7CitpbnQxNiBfX292bGQgX19jbmZuIHNlbGVjdChpbnQxNiBhLCBpbnQxNiBiLCBjaGFyMTYgYyk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDE2IGEsIHVpbnQxNiBiLCBjaGFyMTYgYyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcgYSwgbG9uZyBiLCBjaGFyIGMpOwordWxvbmcgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmcgYSwgdWxvbmcgYiwgY2hhciBjKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcyIGEsIGxvbmcyIGIsIGNoYXIyIGMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMiBhLCB1bG9uZzIgYiwgY2hhcjIgYyk7Citsb25nMyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMyBhLCBsb25nMyBiLCBjaGFyMyBjKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzMgYSwgdWxvbmczIGIsIGNoYXIzIGMpOworbG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzQgYSwgbG9uZzQgYiwgY2hhcjQgYyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmc0IGEsIHVsb25nNCBiLCBjaGFyNCBjKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc4IGEsIGxvbmc4IGIsIGNoYXI4IGMpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nOCBhLCB1bG9uZzggYiwgY2hhcjggYyk7Citsb25nMTYgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzE2IGEsIGxvbmcxNiBiLCBjaGFyMTYgYyk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMTYgYSwgdWxvbmcxNiBiLCBjaGFyMTYgYyk7CitmbG9hdCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdCBhLCBmbG9hdCBiLCBjaGFyIGMpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MiBhLCBmbG9hdDIgYiwgY2hhcjIgYyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQzIGEsIGZsb2F0MyBiLCBjaGFyMyBjKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDQgYSwgZmxvYXQ0IGIsIGNoYXI0IGMpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0OCBhLCBmbG9hdDggYiwgY2hhcjggYyk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MTYgYSwgZmxvYXQxNiBiLCBjaGFyMTYgYyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIgYSwgY2hhciBiLCBzaG9ydCBjKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyIGEsIHVjaGFyIGIsIHNob3J0IGMpOworY2hhcjIgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjIgYSwgY2hhcjIgYiwgc2hvcnQyIGMpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMiBhLCB1Y2hhcjIgYiwgc2hvcnQyIGMpOworY2hhcjMgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjMgYSwgY2hhcjMgYiwgc2hvcnQzIGMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMyBhLCB1Y2hhcjMgYiwgc2hvcnQzIGMpOworY2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjQgYSwgY2hhcjQgYiwgc2hvcnQ0IGMpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyNCBhLCB1Y2hhcjQgYiwgc2hvcnQ0IGMpOworY2hhcjggX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjggYSwgY2hhcjggYiwgc2hvcnQ4IGMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyOCBhLCB1Y2hhcjggYiwgc2hvcnQ4IGMpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIxNiBhLCBjaGFyMTYgYiwgc2hvcnQxNiBjKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIxNiBhLCB1Y2hhcjE2IGIsIHNob3J0MTYgYyk7CitzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydCBhLCBzaG9ydCBiLCBzaG9ydCBjKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQgYSwgdXNob3J0IGIsIHNob3J0IGMpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MiBhLCBzaG9ydDIgYiwgc2hvcnQyIGMpOwordXNob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQyIGEsIHVzaG9ydDIgYiwgc2hvcnQyIGMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MyBhLCBzaG9ydDMgYiwgc2hvcnQzIGMpOwordXNob3J0MyBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQzIGEsIHVzaG9ydDMgYiwgc2hvcnQzIGMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0NCBhLCBzaG9ydDQgYiwgc2hvcnQ0IGMpOwordXNob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ0IGEsIHVzaG9ydDQgYiwgc2hvcnQ0IGMpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0OCBhLCBzaG9ydDggYiwgc2hvcnQ4IGMpOwordXNob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ4IGEsIHVzaG9ydDggYiwgc2hvcnQ4IGMpOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDE2IGEsIHNob3J0MTYgYiwgc2hvcnQxNiBjKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDE2IGEsIHVzaG9ydDE2IGIsIHNob3J0MTYgYyk7CitpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50IGEsIGludCBiLCBzaG9ydCBjKTsKK3VpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludCBhLCB1aW50IGIsIHNob3J0IGMpOworaW50MiBfX292bGQgX19jbmZuIHNlbGVjdChpbnQyIGEsIGludDIgYiwgc2hvcnQyIGMpOwordWludDIgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDIgYSwgdWludDIgYiwgc2hvcnQyIGMpOworaW50MyBfX292bGQgX19jbmZuIHNlbGVjdChpbnQzIGEsIGludDMgYiwgc2hvcnQzIGMpOwordWludDMgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDMgYSwgdWludDMgYiwgc2hvcnQzIGMpOworaW50NCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ0IGEsIGludDQgYiwgc2hvcnQ0IGMpOwordWludDQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDQgYSwgdWludDQgYiwgc2hvcnQ0IGMpOworaW50OCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ4IGEsIGludDggYiwgc2hvcnQ4IGMpOwordWludDggX19vdmxkIF9fY25mbiBzZWxlY3QodWludDggYSwgdWludDggYiwgc2hvcnQ4IGMpOworaW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MTYgYSwgaW50MTYgYiwgc2hvcnQxNiBjKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50MTYgYSwgdWludDE2IGIsIHNob3J0MTYgYyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcgYSwgbG9uZyBiLCBzaG9ydCBjKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nIGEsIHVsb25nIGIsIHNob3J0IGMpOworbG9uZzIgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzIgYSwgbG9uZzIgYiwgc2hvcnQyIGMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMiBhLCB1bG9uZzIgYiwgc2hvcnQyIGMpOworbG9uZzMgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzMgYSwgbG9uZzMgYiwgc2hvcnQzIGMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMyBhLCB1bG9uZzMgYiwgc2hvcnQzIGMpOworbG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzQgYSwgbG9uZzQgYiwgc2hvcnQ0IGMpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nNCBhLCB1bG9uZzQgYiwgc2hvcnQ0IGMpOworbG9uZzggX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzggYSwgbG9uZzggYiwgc2hvcnQ4IGMpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nOCBhLCB1bG9uZzggYiwgc2hvcnQ4IGMpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcxNiBhLCBsb25nMTYgYiwgc2hvcnQxNiBjKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmcxNiBhLCB1bG9uZzE2IGIsIHNob3J0MTYgYyk7CitmbG9hdCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdCBhLCBmbG9hdCBiLCBzaG9ydCBjKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDIgYSwgZmxvYXQyIGIsIHNob3J0MiBjKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDMgYSwgZmxvYXQzIGIsIHNob3J0MyBjKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDQgYSwgZmxvYXQ0IGIsIHNob3J0NCBjKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDggYSwgZmxvYXQ4IGIsIHNob3J0OCBjKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQxNiBhLCBmbG9hdDE2IGIsIHNob3J0MTYgYyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIgYSwgY2hhciBiLCBpbnQgYyk7Cit1Y2hhciBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhciBhLCB1Y2hhciBiLCBpbnQgYyk7CitjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMiBhLCBjaGFyMiBiLCBpbnQyIGMpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMiBhLCB1Y2hhcjIgYiwgaW50MiBjKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIzIGEsIGNoYXIzIGIsIGludDMgYyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIzIGEsIHVjaGFyMyBiLCBpbnQzIGMpOworY2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjQgYSwgY2hhcjQgYiwgaW50NCBjKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjQgYSwgdWNoYXI0IGIsIGludDQgYyk7CitjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyOCBhLCBjaGFyOCBiLCBpbnQ4IGMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyOCBhLCB1Y2hhcjggYiwgaW50OCBjKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMTYgYSwgY2hhcjE2IGIsIGludDE2IGMpOwordWNoYXIxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjE2IGEsIHVjaGFyMTYgYiwgaW50MTYgYyk7CitzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydCBhLCBzaG9ydCBiLCBpbnQgYyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0IGEsIHVzaG9ydCBiLCBpbnQgYyk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQyIGEsIHNob3J0MiBiLCBpbnQyIGMpOwordXNob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQyIGEsIHVzaG9ydDIgYiwgaW50MiBjKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDMgYSwgc2hvcnQzIGIsIGludDMgYyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDMgYSwgdXNob3J0MyBiLCBpbnQzIGMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0NCBhLCBzaG9ydDQgYiwgaW50NCBjKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0NCBhLCB1c2hvcnQ0IGIsIGludDQgYyk7CitzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQ4IGEsIHNob3J0OCBiLCBpbnQ4IGMpOwordXNob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ4IGEsIHVzaG9ydDggYiwgaW50OCBjKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQxNiBhLCBzaG9ydDE2IGIsIGludDE2IGMpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MTYgYSwgdXNob3J0MTYgYiwgaW50MTYgYyk7CitpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50IGEsIGludCBiLCBpbnQgYyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQgYSwgdWludCBiLCBpbnQgYyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDIgYSwgaW50MiBiLCBpbnQyIGMpOwordWludDIgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDIgYSwgdWludDIgYiwgaW50MiBjKTsKK2ludDMgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MyBhLCBpbnQzIGIsIGludDMgYyk7Cit1aW50MyBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50MyBhLCB1aW50MyBiLCBpbnQzIGMpOworaW50NCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ0IGEsIGludDQgYiwgaW50NCBjKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ0IGEsIHVpbnQ0IGIsIGludDQgYyk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDggYSwgaW50OCBiLCBpbnQ4IGMpOwordWludDggX19vdmxkIF9fY25mbiBzZWxlY3QodWludDggYSwgdWludDggYiwgaW50OCBjKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDE2IGEsIGludDE2IGIsIGludDE2IGMpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQxNiBhLCB1aW50MTYgYiwgaW50MTYgYyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcgYSwgbG9uZyBiLCBpbnQgYyk7Cit1bG9uZyBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZyBhLCB1bG9uZyBiLCBpbnQgYyk7Citsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMiBhLCBsb25nMiBiLCBpbnQyIGMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMiBhLCB1bG9uZzIgYiwgaW50MiBjKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmczIGEsIGxvbmczIGIsIGludDMgYyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmczIGEsIHVsb25nMyBiLCBpbnQzIGMpOworbG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzQgYSwgbG9uZzQgYiwgaW50NCBjKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzQgYSwgdWxvbmc0IGIsIGludDQgYyk7Citsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdChsb25nOCBhLCBsb25nOCBiLCBpbnQ4IGMpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nOCBhLCB1bG9uZzggYiwgaW50OCBjKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMTYgYSwgbG9uZzE2IGIsIGludDE2IGMpOwordWxvbmcxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzE2IGEsIHVsb25nMTYgYiwgaW50MTYgYyk7CitmbG9hdCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdCBhLCBmbG9hdCBiLCBpbnQgYyk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQyIGEsIGZsb2F0MiBiLCBpbnQyIGMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MyBhLCBmbG9hdDMgYiwgaW50MyBjKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDQgYSwgZmxvYXQ0IGIsIGludDQgYyk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ4IGEsIGZsb2F0OCBiLCBpbnQ4IGMpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDE2IGEsIGZsb2F0MTYgYiwgaW50MTYgYyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIgYSwgY2hhciBiLCBsb25nIGMpOwordWNoYXIgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIgYSwgdWNoYXIgYiwgbG9uZyBjKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIyIGEsIGNoYXIyIGIsIGxvbmcyIGMpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMiBhLCB1Y2hhcjIgYiwgbG9uZzIgYyk7CitjaGFyMyBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMyBhLCBjaGFyMyBiLCBsb25nMyBjKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjMgYSwgdWNoYXIzIGIsIGxvbmczIGMpOworY2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjQgYSwgY2hhcjQgYiwgbG9uZzQgYyk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXI0IGEsIHVjaGFyNCBiLCBsb25nNCBjKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI4IGEsIGNoYXI4IGIsIGxvbmc4IGMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyOCBhLCB1Y2hhcjggYiwgbG9uZzggYyk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjE2IGEsIGNoYXIxNiBiLCBsb25nMTYgYyk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMTYgYSwgdWNoYXIxNiBiLCBsb25nMTYgYyk7CitzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydCBhLCBzaG9ydCBiLCBsb25nIGMpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydCBhLCB1c2hvcnQgYiwgbG9uZyBjKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDIgYSwgc2hvcnQyIGIsIGxvbmcyIGMpOwordXNob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQyIGEsIHVzaG9ydDIgYiwgbG9uZzIgYyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQzIGEsIHNob3J0MyBiLCBsb25nMyBjKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MyBhLCB1c2hvcnQzIGIsIGxvbmczIGMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0NCBhLCBzaG9ydDQgYiwgbG9uZzQgYyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDQgYSwgdXNob3J0NCBiLCBsb25nNCBjKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDggYSwgc2hvcnQ4IGIsIGxvbmc4IGMpOwordXNob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ4IGEsIHVzaG9ydDggYiwgbG9uZzggYyk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MTYgYSwgc2hvcnQxNiBiLCBsb25nMTYgYyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQxNiBhLCB1c2hvcnQxNiBiLCBsb25nMTYgYyk7CitpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50IGEsIGludCBiLCBsb25nIGMpOwordWludCBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50IGEsIHVpbnQgYiwgbG9uZyBjKTsKK2ludDIgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MiBhLCBpbnQyIGIsIGxvbmcyIGMpOwordWludDIgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDIgYSwgdWludDIgYiwgbG9uZzIgYyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDMgYSwgaW50MyBiLCBsb25nMyBjKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQzIGEsIHVpbnQzIGIsIGxvbmczIGMpOworaW50NCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ0IGEsIGludDQgYiwgbG9uZzQgYyk7Cit1aW50NCBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50NCBhLCB1aW50NCBiLCBsb25nNCBjKTsKK2ludDggX19vdmxkIF9fY25mbiBzZWxlY3QoaW50OCBhLCBpbnQ4IGIsIGxvbmc4IGMpOwordWludDggX19vdmxkIF9fY25mbiBzZWxlY3QodWludDggYSwgdWludDggYiwgbG9uZzggYyk7CitpbnQxNiBfX292bGQgX19jbmZuIHNlbGVjdChpbnQxNiBhLCBpbnQxNiBiLCBsb25nMTYgYyk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDE2IGEsIHVpbnQxNiBiLCBsb25nMTYgYyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcgYSwgbG9uZyBiLCBsb25nIGMpOwordWxvbmcgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmcgYSwgdWxvbmcgYiwgbG9uZyBjKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcyIGEsIGxvbmcyIGIsIGxvbmcyIGMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMiBhLCB1bG9uZzIgYiwgbG9uZzIgYyk7Citsb25nMyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMyBhLCBsb25nMyBiLCBsb25nMyBjKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzMgYSwgdWxvbmczIGIsIGxvbmczIGMpOworbG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzQgYSwgbG9uZzQgYiwgbG9uZzQgYyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmc0IGEsIHVsb25nNCBiLCBsb25nNCBjKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc4IGEsIGxvbmc4IGIsIGxvbmc4IGMpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nOCBhLCB1bG9uZzggYiwgbG9uZzggYyk7Citsb25nMTYgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzE2IGEsIGxvbmcxNiBiLCBsb25nMTYgYyk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMTYgYSwgdWxvbmcxNiBiLCBsb25nMTYgYyk7CitmbG9hdCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdCBhLCBmbG9hdCBiLCBsb25nIGMpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MiBhLCBmbG9hdDIgYiwgbG9uZzIgYyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQzIGEsIGZsb2F0MyBiLCBsb25nMyBjKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDQgYSwgZmxvYXQ0IGIsIGxvbmc0IGMpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0OCBhLCBmbG9hdDggYiwgbG9uZzggYyk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MTYgYSwgZmxvYXQxNiBiLCBsb25nMTYgYyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIgYSwgY2hhciBiLCB1Y2hhciBjKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyIGEsIHVjaGFyIGIsIHVjaGFyIGMpOworY2hhcjIgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjIgYSwgY2hhcjIgYiwgdWNoYXIyIGMpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMiBhLCB1Y2hhcjIgYiwgdWNoYXIyIGMpOworY2hhcjMgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjMgYSwgY2hhcjMgYiwgdWNoYXIzIGMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMyBhLCB1Y2hhcjMgYiwgdWNoYXIzIGMpOworY2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjQgYSwgY2hhcjQgYiwgdWNoYXI0IGMpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyNCBhLCB1Y2hhcjQgYiwgdWNoYXI0IGMpOworY2hhcjggX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjggYSwgY2hhcjggYiwgdWNoYXI4IGMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyOCBhLCB1Y2hhcjggYiwgdWNoYXI4IGMpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIxNiBhLCBjaGFyMTYgYiwgdWNoYXIxNiBjKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIxNiBhLCB1Y2hhcjE2IGIsIHVjaGFyMTYgYyk7CitzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydCBhLCBzaG9ydCBiLCB1Y2hhciBjKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQgYSwgdXNob3J0IGIsIHVjaGFyIGMpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MiBhLCBzaG9ydDIgYiwgdWNoYXIyIGMpOwordXNob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQyIGEsIHVzaG9ydDIgYiwgdWNoYXIyIGMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MyBhLCBzaG9ydDMgYiwgdWNoYXIzIGMpOwordXNob3J0MyBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQzIGEsIHVzaG9ydDMgYiwgdWNoYXIzIGMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0NCBhLCBzaG9ydDQgYiwgdWNoYXI0IGMpOwordXNob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ0IGEsIHVzaG9ydDQgYiwgdWNoYXI0IGMpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0OCBhLCBzaG9ydDggYiwgdWNoYXI4IGMpOwordXNob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ4IGEsIHVzaG9ydDggYiwgdWNoYXI4IGMpOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDE2IGEsIHNob3J0MTYgYiwgdWNoYXIxNiBjKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDE2IGEsIHVzaG9ydDE2IGIsIHVjaGFyMTYgYyk7CitpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50IGEsIGludCBiLCB1Y2hhciBjKTsKK3VpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludCBhLCB1aW50IGIsIHVjaGFyIGMpOworaW50MiBfX292bGQgX19jbmZuIHNlbGVjdChpbnQyIGEsIGludDIgYiwgdWNoYXIyIGMpOwordWludDIgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDIgYSwgdWludDIgYiwgdWNoYXIyIGMpOworaW50MyBfX292bGQgX19jbmZuIHNlbGVjdChpbnQzIGEsIGludDMgYiwgdWNoYXIzIGMpOwordWludDMgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDMgYSwgdWludDMgYiwgdWNoYXIzIGMpOworaW50NCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ0IGEsIGludDQgYiwgdWNoYXI0IGMpOwordWludDQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDQgYSwgdWludDQgYiwgdWNoYXI0IGMpOworaW50OCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ4IGEsIGludDggYiwgdWNoYXI4IGMpOwordWludDggX19vdmxkIF9fY25mbiBzZWxlY3QodWludDggYSwgdWludDggYiwgdWNoYXI4IGMpOworaW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MTYgYSwgaW50MTYgYiwgdWNoYXIxNiBjKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50MTYgYSwgdWludDE2IGIsIHVjaGFyMTYgYyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcgYSwgbG9uZyBiLCB1Y2hhciBjKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nIGEsIHVsb25nIGIsIHVjaGFyIGMpOworbG9uZzIgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzIgYSwgbG9uZzIgYiwgdWNoYXIyIGMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMiBhLCB1bG9uZzIgYiwgdWNoYXIyIGMpOworbG9uZzMgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzMgYSwgbG9uZzMgYiwgdWNoYXIzIGMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMyBhLCB1bG9uZzMgYiwgdWNoYXIzIGMpOworbG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzQgYSwgbG9uZzQgYiwgdWNoYXI0IGMpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nNCBhLCB1bG9uZzQgYiwgdWNoYXI0IGMpOworbG9uZzggX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzggYSwgbG9uZzggYiwgdWNoYXI4IGMpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nOCBhLCB1bG9uZzggYiwgdWNoYXI4IGMpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcxNiBhLCBsb25nMTYgYiwgdWNoYXIxNiBjKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmcxNiBhLCB1bG9uZzE2IGIsIHVjaGFyMTYgYyk7CitmbG9hdCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdCBhLCBmbG9hdCBiLCB1Y2hhciBjKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDIgYSwgZmxvYXQyIGIsIHVjaGFyMiBjKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDMgYSwgZmxvYXQzIGIsIHVjaGFyMyBjKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDQgYSwgZmxvYXQ0IGIsIHVjaGFyNCBjKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDggYSwgZmxvYXQ4IGIsIHVjaGFyOCBjKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQxNiBhLCBmbG9hdDE2IGIsIHVjaGFyMTYgYyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIgYSwgY2hhciBiLCB1c2hvcnQgYyk7Cit1Y2hhciBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhciBhLCB1Y2hhciBiLCB1c2hvcnQgYyk7CitjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMiBhLCBjaGFyMiBiLCB1c2hvcnQyIGMpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMiBhLCB1Y2hhcjIgYiwgdXNob3J0MiBjKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIzIGEsIGNoYXIzIGIsIHVzaG9ydDMgYyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIzIGEsIHVjaGFyMyBiLCB1c2hvcnQzIGMpOworY2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjQgYSwgY2hhcjQgYiwgdXNob3J0NCBjKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjQgYSwgdWNoYXI0IGIsIHVzaG9ydDQgYyk7CitjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyOCBhLCBjaGFyOCBiLCB1c2hvcnQ4IGMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyOCBhLCB1Y2hhcjggYiwgdXNob3J0OCBjKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMTYgYSwgY2hhcjE2IGIsIHVzaG9ydDE2IGMpOwordWNoYXIxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjE2IGEsIHVjaGFyMTYgYiwgdXNob3J0MTYgYyk7CitzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydCBhLCBzaG9ydCBiLCB1c2hvcnQgYyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0IGEsIHVzaG9ydCBiLCB1c2hvcnQgYyk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQyIGEsIHNob3J0MiBiLCB1c2hvcnQyIGMpOwordXNob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQyIGEsIHVzaG9ydDIgYiwgdXNob3J0MiBjKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDMgYSwgc2hvcnQzIGIsIHVzaG9ydDMgYyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDMgYSwgdXNob3J0MyBiLCB1c2hvcnQzIGMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0NCBhLCBzaG9ydDQgYiwgdXNob3J0NCBjKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0NCBhLCB1c2hvcnQ0IGIsIHVzaG9ydDQgYyk7CitzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQ4IGEsIHNob3J0OCBiLCB1c2hvcnQ4IGMpOwordXNob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ4IGEsIHVzaG9ydDggYiwgdXNob3J0OCBjKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQxNiBhLCBzaG9ydDE2IGIsIHVzaG9ydDE2IGMpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MTYgYSwgdXNob3J0MTYgYiwgdXNob3J0MTYgYyk7CitpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50IGEsIGludCBiLCB1c2hvcnQgYyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQgYSwgdWludCBiLCB1c2hvcnQgYyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDIgYSwgaW50MiBiLCB1c2hvcnQyIGMpOwordWludDIgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDIgYSwgdWludDIgYiwgdXNob3J0MiBjKTsKK2ludDMgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MyBhLCBpbnQzIGIsIHVzaG9ydDMgYyk7Cit1aW50MyBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50MyBhLCB1aW50MyBiLCB1c2hvcnQzIGMpOworaW50NCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ0IGEsIGludDQgYiwgdXNob3J0NCBjKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ0IGEsIHVpbnQ0IGIsIHVzaG9ydDQgYyk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDggYSwgaW50OCBiLCB1c2hvcnQ4IGMpOwordWludDggX19vdmxkIF9fY25mbiBzZWxlY3QodWludDggYSwgdWludDggYiwgdXNob3J0OCBjKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDE2IGEsIGludDE2IGIsIHVzaG9ydDE2IGMpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQxNiBhLCB1aW50MTYgYiwgdXNob3J0MTYgYyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcgYSwgbG9uZyBiLCB1c2hvcnQgYyk7Cit1bG9uZyBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZyBhLCB1bG9uZyBiLCB1c2hvcnQgYyk7Citsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMiBhLCBsb25nMiBiLCB1c2hvcnQyIGMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMiBhLCB1bG9uZzIgYiwgdXNob3J0MiBjKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmczIGEsIGxvbmczIGIsIHVzaG9ydDMgYyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmczIGEsIHVsb25nMyBiLCB1c2hvcnQzIGMpOworbG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzQgYSwgbG9uZzQgYiwgdXNob3J0NCBjKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzQgYSwgdWxvbmc0IGIsIHVzaG9ydDQgYyk7Citsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdChsb25nOCBhLCBsb25nOCBiLCB1c2hvcnQ4IGMpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nOCBhLCB1bG9uZzggYiwgdXNob3J0OCBjKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMTYgYSwgbG9uZzE2IGIsIHVzaG9ydDE2IGMpOwordWxvbmcxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzE2IGEsIHVsb25nMTYgYiwgdXNob3J0MTYgYyk7CitmbG9hdCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdCBhLCBmbG9hdCBiLCB1c2hvcnQgYyk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQyIGEsIGZsb2F0MiBiLCB1c2hvcnQyIGMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MyBhLCBmbG9hdDMgYiwgdXNob3J0MyBjKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDQgYSwgZmxvYXQ0IGIsIHVzaG9ydDQgYyk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ4IGEsIGZsb2F0OCBiLCB1c2hvcnQ4IGMpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDE2IGEsIGZsb2F0MTYgYiwgdXNob3J0MTYgYyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIgYSwgY2hhciBiLCB1aW50IGMpOwordWNoYXIgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIgYSwgdWNoYXIgYiwgdWludCBjKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIyIGEsIGNoYXIyIGIsIHVpbnQyIGMpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMiBhLCB1Y2hhcjIgYiwgdWludDIgYyk7CitjaGFyMyBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMyBhLCBjaGFyMyBiLCB1aW50MyBjKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjMgYSwgdWNoYXIzIGIsIHVpbnQzIGMpOworY2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjQgYSwgY2hhcjQgYiwgdWludDQgYyk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXI0IGEsIHVjaGFyNCBiLCB1aW50NCBjKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI4IGEsIGNoYXI4IGIsIHVpbnQ4IGMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyOCBhLCB1Y2hhcjggYiwgdWludDggYyk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjE2IGEsIGNoYXIxNiBiLCB1aW50MTYgYyk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMTYgYSwgdWNoYXIxNiBiLCB1aW50MTYgYyk7CitzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydCBhLCBzaG9ydCBiLCB1aW50IGMpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydCBhLCB1c2hvcnQgYiwgdWludCBjKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDIgYSwgc2hvcnQyIGIsIHVpbnQyIGMpOwordXNob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQyIGEsIHVzaG9ydDIgYiwgdWludDIgYyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQzIGEsIHNob3J0MyBiLCB1aW50MyBjKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MyBhLCB1c2hvcnQzIGIsIHVpbnQzIGMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0NCBhLCBzaG9ydDQgYiwgdWludDQgYyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDQgYSwgdXNob3J0NCBiLCB1aW50NCBjKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDggYSwgc2hvcnQ4IGIsIHVpbnQ4IGMpOwordXNob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ4IGEsIHVzaG9ydDggYiwgdWludDggYyk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MTYgYSwgc2hvcnQxNiBiLCB1aW50MTYgYyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQxNiBhLCB1c2hvcnQxNiBiLCB1aW50MTYgYyk7CitpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50IGEsIGludCBiLCB1aW50IGMpOwordWludCBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50IGEsIHVpbnQgYiwgdWludCBjKTsKK2ludDIgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MiBhLCBpbnQyIGIsIHVpbnQyIGMpOwordWludDIgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDIgYSwgdWludDIgYiwgdWludDIgYyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDMgYSwgaW50MyBiLCB1aW50MyBjKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQzIGEsIHVpbnQzIGIsIHVpbnQzIGMpOworaW50NCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ0IGEsIGludDQgYiwgdWludDQgYyk7Cit1aW50NCBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50NCBhLCB1aW50NCBiLCB1aW50NCBjKTsKK2ludDggX19vdmxkIF9fY25mbiBzZWxlY3QoaW50OCBhLCBpbnQ4IGIsIHVpbnQ4IGMpOwordWludDggX19vdmxkIF9fY25mbiBzZWxlY3QodWludDggYSwgdWludDggYiwgdWludDggYyk7CitpbnQxNiBfX292bGQgX19jbmZuIHNlbGVjdChpbnQxNiBhLCBpbnQxNiBiLCB1aW50MTYgYyk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDE2IGEsIHVpbnQxNiBiLCB1aW50MTYgYyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcgYSwgbG9uZyBiLCB1aW50IGMpOwordWxvbmcgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmcgYSwgdWxvbmcgYiwgdWludCBjKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcyIGEsIGxvbmcyIGIsIHVpbnQyIGMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMiBhLCB1bG9uZzIgYiwgdWludDIgYyk7Citsb25nMyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMyBhLCBsb25nMyBiLCB1aW50MyBjKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzMgYSwgdWxvbmczIGIsIHVpbnQzIGMpOworbG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzQgYSwgbG9uZzQgYiwgdWludDQgYyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmc0IGEsIHVsb25nNCBiLCB1aW50NCBjKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc4IGEsIGxvbmc4IGIsIHVpbnQ4IGMpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nOCBhLCB1bG9uZzggYiwgdWludDggYyk7Citsb25nMTYgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzE2IGEsIGxvbmcxNiBiLCB1aW50MTYgYyk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMTYgYSwgdWxvbmcxNiBiLCB1aW50MTYgYyk7CitmbG9hdCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdCBhLCBmbG9hdCBiLCB1aW50IGMpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MiBhLCBmbG9hdDIgYiwgdWludDIgYyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQzIGEsIGZsb2F0MyBiLCB1aW50MyBjKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDQgYSwgZmxvYXQ0IGIsIHVpbnQ0IGMpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0OCBhLCBmbG9hdDggYiwgdWludDggYyk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MTYgYSwgZmxvYXQxNiBiLCB1aW50MTYgYyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIgYSwgY2hhciBiLCB1bG9uZyBjKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyIGEsIHVjaGFyIGIsIHVsb25nIGMpOworY2hhcjIgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjIgYSwgY2hhcjIgYiwgdWxvbmcyIGMpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMiBhLCB1Y2hhcjIgYiwgdWxvbmcyIGMpOworY2hhcjMgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjMgYSwgY2hhcjMgYiwgdWxvbmczIGMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMyBhLCB1Y2hhcjMgYiwgdWxvbmczIGMpOworY2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjQgYSwgY2hhcjQgYiwgdWxvbmc0IGMpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyNCBhLCB1Y2hhcjQgYiwgdWxvbmc0IGMpOworY2hhcjggX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjggYSwgY2hhcjggYiwgdWxvbmc4IGMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyOCBhLCB1Y2hhcjggYiwgdWxvbmc4IGMpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIxNiBhLCBjaGFyMTYgYiwgdWxvbmcxNiBjKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIxNiBhLCB1Y2hhcjE2IGIsIHVsb25nMTYgYyk7CitzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydCBhLCBzaG9ydCBiLCB1bG9uZyBjKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQgYSwgdXNob3J0IGIsIHVsb25nIGMpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MiBhLCBzaG9ydDIgYiwgdWxvbmcyIGMpOwordXNob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQyIGEsIHVzaG9ydDIgYiwgdWxvbmcyIGMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MyBhLCBzaG9ydDMgYiwgdWxvbmczIGMpOwordXNob3J0MyBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQzIGEsIHVzaG9ydDMgYiwgdWxvbmczIGMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0NCBhLCBzaG9ydDQgYiwgdWxvbmc0IGMpOwordXNob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ0IGEsIHVzaG9ydDQgYiwgdWxvbmc0IGMpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0OCBhLCBzaG9ydDggYiwgdWxvbmc4IGMpOwordXNob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ4IGEsIHVzaG9ydDggYiwgdWxvbmc4IGMpOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDE2IGEsIHNob3J0MTYgYiwgdWxvbmcxNiBjKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDE2IGEsIHVzaG9ydDE2IGIsIHVsb25nMTYgYyk7CitpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50IGEsIGludCBiLCB1bG9uZyBjKTsKK3VpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludCBhLCB1aW50IGIsIHVsb25nIGMpOworaW50MiBfX292bGQgX19jbmZuIHNlbGVjdChpbnQyIGEsIGludDIgYiwgdWxvbmcyIGMpOwordWludDIgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDIgYSwgdWludDIgYiwgdWxvbmcyIGMpOworaW50MyBfX292bGQgX19jbmZuIHNlbGVjdChpbnQzIGEsIGludDMgYiwgdWxvbmczIGMpOwordWludDMgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDMgYSwgdWludDMgYiwgdWxvbmczIGMpOworaW50NCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ0IGEsIGludDQgYiwgdWxvbmc0IGMpOwordWludDQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDQgYSwgdWludDQgYiwgdWxvbmc0IGMpOworaW50OCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ4IGEsIGludDggYiwgdWxvbmc4IGMpOwordWludDggX19vdmxkIF9fY25mbiBzZWxlY3QodWludDggYSwgdWludDggYiwgdWxvbmc4IGMpOworaW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MTYgYSwgaW50MTYgYiwgdWxvbmcxNiBjKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50MTYgYSwgdWludDE2IGIsIHVsb25nMTYgYyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcgYSwgbG9uZyBiLCB1bG9uZyBjKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nIGEsIHVsb25nIGIsIHVsb25nIGMpOworbG9uZzIgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzIgYSwgbG9uZzIgYiwgdWxvbmcyIGMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMiBhLCB1bG9uZzIgYiwgdWxvbmcyIGMpOworbG9uZzMgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzMgYSwgbG9uZzMgYiwgdWxvbmczIGMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMyBhLCB1bG9uZzMgYiwgdWxvbmczIGMpOworbG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzQgYSwgbG9uZzQgYiwgdWxvbmc0IGMpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nNCBhLCB1bG9uZzQgYiwgdWxvbmc0IGMpOworbG9uZzggX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzggYSwgbG9uZzggYiwgdWxvbmc4IGMpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nOCBhLCB1bG9uZzggYiwgdWxvbmc4IGMpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcxNiBhLCBsb25nMTYgYiwgdWxvbmcxNiBjKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmcxNiBhLCB1bG9uZzE2IGIsIHVsb25nMTYgYyk7CitmbG9hdCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdCBhLCBmbG9hdCBiLCB1bG9uZyBjKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDIgYSwgZmxvYXQyIGIsIHVsb25nMiBjKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDMgYSwgZmxvYXQzIGIsIHVsb25nMyBjKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDQgYSwgZmxvYXQ0IGIsIHVsb25nNCBjKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDggYSwgZmxvYXQ4IGIsIHVsb25nOCBjKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQxNiBhLCBmbG9hdDE2IGIsIHVsb25nMTYgYyk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHNlbGVjdChkb3VibGUgYSwgZG91YmxlIGIsIGxvbmcgYyk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGRvdWJsZTIgYSwgZG91YmxlMiBiLCBsb25nMiBjKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBzZWxlY3QoZG91YmxlMyBhLCBkb3VibGUzIGIsIGxvbmczIGMpOworZG91YmxlNCBfX292bGQgX19jbmZuIHNlbGVjdChkb3VibGU0IGEsIGRvdWJsZTQgYiwgbG9uZzQgYyk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGRvdWJsZTggYSwgZG91YmxlOCBiLCBsb25nOCBjKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGRvdWJsZTE2IGEsIGRvdWJsZTE2IGIsIGxvbmcxNiBjKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIHNlbGVjdChkb3VibGUgYSwgZG91YmxlIGIsIHVsb25nIGMpOworZG91YmxlMiBfX292bGQgX19jbmZuIHNlbGVjdChkb3VibGUyIGEsIGRvdWJsZTIgYiwgdWxvbmcyIGMpOworZG91YmxlMyBfX292bGQgX19jbmZuIHNlbGVjdChkb3VibGUzIGEsIGRvdWJsZTMgYiwgdWxvbmczIGMpOworZG91YmxlNCBfX292bGQgX19jbmZuIHNlbGVjdChkb3VibGU0IGEsIGRvdWJsZTQgYiwgdWxvbmc0IGMpOworZG91YmxlOCBfX292bGQgX19jbmZuIHNlbGVjdChkb3VibGU4IGEsIGRvdWJsZTggYiwgdWxvbmc4IGMpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzZWxlY3QoZG91YmxlMTYgYSwgZG91YmxlMTYgYiwgdWxvbmcxNiBjKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBzZWxlY3QoaGFsZiBhLCBoYWxmIGIsIHNob3J0IGMpOworaGFsZjIgX19vdmxkIF9fY25mbiBzZWxlY3QoaGFsZjIgYSwgaGFsZjIgYiwgc2hvcnQyIGMpOworaGFsZjMgX19vdmxkIF9fY25mbiBzZWxlY3QoaGFsZjMgYSwgaGFsZjMgYiwgc2hvcnQzIGMpOworaGFsZjQgX19vdmxkIF9fY25mbiBzZWxlY3QoaGFsZjQgYSwgaGFsZjQgYiwgc2hvcnQ0IGMpOworaGFsZjggX19vdmxkIF9fY25mbiBzZWxlY3QoaGFsZjggYSwgaGFsZjggYiwgc2hvcnQ4IGMpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGhhbGYxNiBhLCBoYWxmMTYgYiwgc2hvcnQxNiBjKTsKK2hhbGYgX19vdmxkIF9fY25mbiBzZWxlY3QoaGFsZiBhLCBoYWxmIGIsIHVzaG9ydCBjKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGhhbGYyIGEsIGhhbGYyIGIsIHVzaG9ydDIgYyk7CitoYWxmMyBfX292bGQgX19jbmZuIHNlbGVjdChoYWxmMyBhLCBoYWxmMyBiLCB1c2hvcnQzIGMpOworaGFsZjQgX19vdmxkIF9fY25mbiBzZWxlY3QoaGFsZjQgYSwgaGFsZjQgYiwgdXNob3J0NCBjKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGhhbGY4IGEsIGhhbGY4IGIsIHVzaG9ydDggYyk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBzZWxlY3QoaGFsZjE2IGEsIGhhbGYxNiBiLCB1c2hvcnQxNiBjKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjcsIHYxLjIgczYuMTIuNywgdjIuMCBzNi4xMy43IC0gVmVjdG9yIERhdGEgTG9hZCBhbmQgU3RvcmUgRnVuY3Rpb25zCisvLyBPcGVuQ0wgZXh0ZW5zaW9ucyB2MS4xIHM5LjYuNiwgdjEuMiBzOS41LjYsIHYyLjAgczkuNC42IC0gVmVjdG9yIERhdGEgTG9hZCBhbmQgU3RvcmUgRnVuY3Rpb25zIGZvciBIYWxmIFR5cGUKKy8qKgorICogVXNlIGdlbmVyaWMgdHlwZSBnZW50eXBlIHRvIGluZGljYXRlIHRoZSBidWlsdC1pbiBkYXRhIHR5cGVzCisgKiBjaGFyLCB1Y2hhciwgc2hvcnQsIHVzaG9ydCwgaW50LCB1aW50LCBsb25nLCB1bG9uZywgZmxvYXQsCisgKiBkb3VibGUgb3IgaGFsZi4KKyAqCisgKiB2bG9hZG4gcmV0dXJuIHNpemVvZiAoZ2VudHlwZW4pIGJ5dGVzIG9mIGRhdGEgcmVhZCBmcm9tIGFkZHJlc3MgKHAgKyAob2Zmc2V0ICogbikpLgorICoKKyAqIHZzdG9yZW4gd3JpdGUgc2l6ZW9mIChnZW50eXBlbikgYnl0ZXMgZ2l2ZW4gYnkgZGF0YSB0byBhZGRyZXNzIChwICsgKG9mZnNldCAqIG4pKS4KKyAqCisgKiBUaGUgYWRkcmVzcyBjb21wdXRlZCBhcyAocCArIChvZmZzZXQgKiBuKSkgbXVzdCBiZSAKKyAqIDgtYml0IGFsaWduZWQgaWYgZ2VudHlwZSBpcyBjaGFyLCB1Y2hhcjsKKyAqIDE2LWJpdCBhbGlnbmVkIGlmIGdlbnR5cGUgaXMgc2hvcnQsIHVzaG9ydCwgaGFsZjsKKyAqIDMyLWJpdCBhbGlnbmVkIGlmIGdlbnR5cGUgaXMgaW50LCB1aW50LCBmbG9hdDsKKyAqIDY0LWJpdCBhbGlnbmVkIGlmIGdlbnR5cGUgaXMgbG9uZywgdWxvbmcsIGRvdWJsZS4KKyAqLworCitjaGFyMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgY2hhciAqcCk7Cit1Y2hhcjIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVjaGFyICpwKTsKK3Nob3J0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgc2hvcnQgKnApOwordXNob3J0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdXNob3J0ICpwKTsKK2ludDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGludCAqcCk7Cit1aW50MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdWludCAqcCk7Citsb25nMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgbG9uZyAqcCk7Cit1bG9uZzIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVsb25nICpwKTsKK2Zsb2F0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgZmxvYXQgKnApOworY2hhcjMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGNoYXIgKnApOwordWNoYXIzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCB1Y2hhciAqcCk7CitzaG9ydDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHNob3J0ICpwKTsKK3VzaG9ydDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVzaG9ydCAqcCk7CitpbnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBpbnQgKnApOwordWludDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVpbnQgKnApOworbG9uZzMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGxvbmcgKnApOwordWxvbmczIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCB1bG9uZyAqcCk7CitmbG9hdDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGZsb2F0ICpwKTsKK2NoYXI0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBjaGFyICpwKTsKK3VjaGFyNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdWNoYXIgKnApOworc2hvcnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBzaG9ydCAqcCk7Cit1c2hvcnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCB1c2hvcnQgKnApOworaW50NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaW50ICpwKTsKK3VpbnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCB1aW50ICpwKTsKK2xvbmc0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBsb25nICpwKTsKK3Vsb25nNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdWxvbmcgKnApOworZmxvYXQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBmbG9hdCAqcCk7CitjaGFyOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgY2hhciAqcCk7Cit1Y2hhcjggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVjaGFyICpwKTsKK3Nob3J0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgc2hvcnQgKnApOwordXNob3J0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdXNob3J0ICpwKTsKK2ludDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGludCAqcCk7Cit1aW50OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdWludCAqcCk7Citsb25nOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgbG9uZyAqcCk7Cit1bG9uZzggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVsb25nICpwKTsKK2Zsb2F0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgZmxvYXQgKnApOworY2hhcjE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgY2hhciAqcCk7Cit1Y2hhcjE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdWNoYXIgKnApOworc2hvcnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHNob3J0ICpwKTsKK3VzaG9ydDE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdXNob3J0ICpwKTsKK2ludDE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaW50ICpwKTsKK3VpbnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVpbnQgKnApOworbG9uZzE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgbG9uZyAqcCk7Cit1bG9uZzE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdWxvbmcgKnApOworZmxvYXQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGZsb2F0ICpwKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgZG91YmxlICpwKTsKK2RvdWJsZTMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGRvdWJsZSAqcCk7Citkb3VibGU0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBkb3VibGUgKnApOworZG91YmxlOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgZG91YmxlICpwKTsKK2RvdWJsZTE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgZG91YmxlICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgdmxvYWQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKK2hhbGYyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKK2hhbGYzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKK2hhbGY0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKK2hhbGY4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKK2hhbGYxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGhhbGYgKnApOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitjaGFyMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKnApOwordWNoYXIyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgdWNoYXIgKnApOworc2hvcnQyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3Qgc2hvcnQgKnApOwordXNob3J0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IHVzaG9ydCAqcCk7CitpbnQyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgaW50ICpwKTsKK3VpbnQyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgdWludCAqcCk7Citsb25nMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IGxvbmcgKnApOwordWxvbmcyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgdWxvbmcgKnApOworZmxvYXQyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgZmxvYXQgKnApOworY2hhcjMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBjaGFyICpwKTsKK3VjaGFyMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IHVjaGFyICpwKTsKK3Nob3J0MyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IHNob3J0ICpwKTsKK3VzaG9ydDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCB1c2hvcnQgKnApOworaW50MyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IGludCAqcCk7Cit1aW50MyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IHVpbnQgKnApOworbG9uZzMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBsb25nICpwKTsKK3Vsb25nMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IHVsb25nICpwKTsKK2Zsb2F0MyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IGZsb2F0ICpwKTsKK2NoYXI0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgY2hhciAqcCk7Cit1Y2hhcjQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCB1Y2hhciAqcCk7CitzaG9ydDQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBzaG9ydCAqcCk7Cit1c2hvcnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgdXNob3J0ICpwKTsKK2ludDQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBpbnQgKnApOwordWludDQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCB1aW50ICpwKTsKK2xvbmc0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgbG9uZyAqcCk7Cit1bG9uZzQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCB1bG9uZyAqcCk7CitmbG9hdDQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBmbG9hdCAqcCk7CitjaGFyOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKnApOwordWNoYXI4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgdWNoYXIgKnApOworc2hvcnQ4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3Qgc2hvcnQgKnApOwordXNob3J0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IHVzaG9ydCAqcCk7CitpbnQ4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgaW50ICpwKTsKK3VpbnQ4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgdWludCAqcCk7Citsb25nOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IGxvbmcgKnApOwordWxvbmc4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgdWxvbmcgKnApOworZmxvYXQ4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgZmxvYXQgKnApOworY2hhcjE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKnApOwordWNoYXIxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCB1Y2hhciAqcCk7CitzaG9ydDE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IHNob3J0ICpwKTsKK3VzaG9ydDE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IHVzaG9ydCAqcCk7CitpbnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBpbnQgKnApOwordWludDE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IHVpbnQgKnApOworbG9uZzE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IGxvbmcgKnApOwordWxvbmcxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCB1bG9uZyAqcCk7CitmbG9hdDE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IGZsb2F0ICpwKTsKKworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgZG91YmxlICpwKTsKK2RvdWJsZTMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBkb3VibGUgKnApOworZG91YmxlNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IGRvdWJsZSAqcCk7Citkb3VibGU4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgZG91YmxlICpwKTsKK2RvdWJsZTE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IGRvdWJsZSAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIHZsb2FkKHNpemVfdCBvZmZzZXQsIGNvbnN0IGhhbGYgKnApOworaGFsZjIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKK2hhbGYzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CitoYWxmNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IGhhbGYgKnApOworaGFsZjggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKK2hhbGYxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZWxzZQorY2hhcjIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBjaGFyICpwKTsKK3VjaGFyMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyICpwKTsKK3Nob3J0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHNob3J0ICpwKTsKK3VzaG9ydDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQgKnApOworaW50MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGludCAqcCk7Cit1aW50MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVpbnQgKnApOworbG9uZzIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBsb25nICpwKTsKK3Vsb25nMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVsb25nICpwKTsKK2Zsb2F0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGZsb2F0ICpwKTsKK2NoYXIzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgY2hhciAqcCk7Cit1Y2hhcjMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1Y2hhciAqcCk7CitzaG9ydDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBzaG9ydCAqcCk7Cit1c2hvcnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdXNob3J0ICpwKTsKK2ludDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBpbnQgKnApOwordWludDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1aW50ICpwKTsKK2xvbmczIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgbG9uZyAqcCk7Cit1bG9uZzMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1bG9uZyAqcCk7CitmbG9hdDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBmbG9hdCAqcCk7CitjaGFyNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGNoYXIgKnApOwordWNoYXI0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdWNoYXIgKnApOworc2hvcnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgc2hvcnQgKnApOwordXNob3J0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVzaG9ydCAqcCk7CitpbnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaW50ICpwKTsKK3VpbnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdWludCAqcCk7Citsb25nNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGxvbmcgKnApOwordWxvbmc0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdWxvbmcgKnApOworZmxvYXQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgZmxvYXQgKnApOworY2hhcjggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBjaGFyICpwKTsKK3VjaGFyOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyICpwKTsKK3Nob3J0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHNob3J0ICpwKTsKK3VzaG9ydDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQgKnApOworaW50OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGludCAqcCk7Cit1aW50OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVpbnQgKnApOworbG9uZzggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBsb25nICpwKTsKK3Vsb25nOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVsb25nICpwKTsKK2Zsb2F0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGZsb2F0ICpwKTsKK2NoYXIxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBjaGFyICpwKTsKK3VjaGFyMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdWNoYXIgKnApOworc2hvcnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBzaG9ydCAqcCk7Cit1c2hvcnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQgKnApOworaW50MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaW50ICpwKTsKK3VpbnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1aW50ICpwKTsKK2xvbmcxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBsb25nICpwKTsKK3Vsb25nMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdWxvbmcgKnApOworZmxvYXQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBmbG9hdCAqcCk7CitjaGFyMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgY2hhciAqcCk7Cit1Y2hhcjIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVjaGFyICpwKTsKK3Nob3J0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgc2hvcnQgKnApOwordXNob3J0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdXNob3J0ICpwKTsKK2ludDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGludCAqcCk7Cit1aW50MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdWludCAqcCk7Citsb25nMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgbG9uZyAqcCk7Cit1bG9uZzIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVsb25nICpwKTsKK2Zsb2F0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgZmxvYXQgKnApOworY2hhcjMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGNoYXIgKnApOwordWNoYXIzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCB1Y2hhciAqcCk7CitzaG9ydDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHNob3J0ICpwKTsKK3VzaG9ydDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVzaG9ydCAqcCk7CitpbnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBpbnQgKnApOwordWludDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVpbnQgKnApOworbG9uZzMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGxvbmcgKnApOwordWxvbmczIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCB1bG9uZyAqcCk7CitmbG9hdDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGZsb2F0ICpwKTsKK2NoYXI0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBjaGFyICpwKTsKK3VjaGFyNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdWNoYXIgKnApOworc2hvcnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBzaG9ydCAqcCk7Cit1c2hvcnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCB1c2hvcnQgKnApOworaW50NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaW50ICpwKTsKK3VpbnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCB1aW50ICpwKTsKK2xvbmc0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBsb25nICpwKTsKK3Vsb25nNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdWxvbmcgKnApOworZmxvYXQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBmbG9hdCAqcCk7CitjaGFyOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgY2hhciAqcCk7Cit1Y2hhcjggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVjaGFyICpwKTsKK3Nob3J0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgc2hvcnQgKnApOwordXNob3J0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdXNob3J0ICpwKTsKK2ludDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGludCAqcCk7Cit1aW50OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdWludCAqcCk7Citsb25nOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgbG9uZyAqcCk7Cit1bG9uZzggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVsb25nICpwKTsKK2Zsb2F0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgZmxvYXQgKnApOworY2hhcjE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgY2hhciAqcCk7Cit1Y2hhcjE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdWNoYXIgKnApOworc2hvcnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHNob3J0ICpwKTsKK3VzaG9ydDE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdXNob3J0ICpwKTsKK2ludDE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaW50ICpwKTsKK3VpbnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVpbnQgKnApOworbG9uZzE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgbG9uZyAqcCk7Cit1bG9uZzE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdWxvbmcgKnApOworZmxvYXQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGZsb2F0ICpwKTsKK2NoYXIyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGNoYXIgKnApOwordWNoYXIyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVjaGFyICpwKTsKK3Nob3J0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBzaG9ydCAqcCk7Cit1c2hvcnQyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVzaG9ydCAqcCk7CitpbnQyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGludCAqcCk7Cit1aW50MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1aW50ICpwKTsKK2xvbmcyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGxvbmcgKnApOwordWxvbmcyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVsb25nICpwKTsKK2Zsb2F0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBmbG9hdCAqcCk7CitjaGFyMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBjaGFyICpwKTsKK3VjaGFyMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1Y2hhciAqcCk7CitzaG9ydDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgc2hvcnQgKnApOwordXNob3J0MyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1c2hvcnQgKnApOworaW50MyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBpbnQgKnApOwordWludDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdWludCAqcCk7Citsb25nMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBsb25nICpwKTsKK3Vsb25nMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1bG9uZyAqcCk7CitmbG9hdDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgZmxvYXQgKnApOworY2hhcjQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgY2hhciAqcCk7Cit1Y2hhcjQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdWNoYXIgKnApOworc2hvcnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHNob3J0ICpwKTsKK3VzaG9ydDQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdXNob3J0ICpwKTsKK2ludDQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaW50ICpwKTsKK3VpbnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVpbnQgKnApOworbG9uZzQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgbG9uZyAqcCk7Cit1bG9uZzQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdWxvbmcgKnApOworZmxvYXQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGZsb2F0ICpwKTsKK2NoYXI4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGNoYXIgKnApOwordWNoYXI4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVjaGFyICpwKTsKK3Nob3J0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBzaG9ydCAqcCk7Cit1c2hvcnQ4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVzaG9ydCAqcCk7CitpbnQ4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGludCAqcCk7Cit1aW50OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1aW50ICpwKTsKK2xvbmc4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGxvbmcgKnApOwordWxvbmc4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVsb25nICpwKTsKK2Zsb2F0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBmbG9hdCAqcCk7CitjaGFyMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGNoYXIgKnApOwordWNoYXIxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdWNoYXIgKnApOworc2hvcnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgc2hvcnQgKnApOwordXNob3J0MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVzaG9ydCAqcCk7CitpbnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaW50ICpwKTsKK3VpbnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdWludCAqcCk7Citsb25nMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGxvbmcgKnApOwordWxvbmcxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdWxvbmcgKnApOworZmxvYXQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgZmxvYXQgKnApOworCisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZTIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBkb3VibGUgKnApOworZG91YmxlMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGRvdWJsZSAqcCk7Citkb3VibGU0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgZG91YmxlICpwKTsKK2RvdWJsZTggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBkb3VibGUgKnApOworZG91YmxlMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgZG91YmxlICpwKTsKK2RvdWJsZTIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGRvdWJsZSAqcCk7Citkb3VibGUzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBkb3VibGUgKnApOworZG91YmxlNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgZG91YmxlICpwKTsKK2RvdWJsZTggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGRvdWJsZSAqcCk7Citkb3VibGUxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGRvdWJsZSAqcCk7Citkb3VibGUyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGRvdWJsZSAqcCk7Citkb3VibGUzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGRvdWJsZSAqcCk7Citkb3VibGU0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGRvdWJsZSAqcCk7Citkb3VibGU4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGRvdWJsZSAqcCk7Citkb3VibGUxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgZG91YmxlICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgdmxvYWQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaGFsZiAqcCk7CitoYWxmMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworaGFsZjMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2hhbGY0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaGFsZiAqcCk7CitoYWxmOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworaGFsZjE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworaGFsZiBfX292bGQgdmxvYWQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2hhbGYyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2hhbGYzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2hhbGY0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2hhbGY4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2hhbGYxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworaGFsZiBfX292bGQgdmxvYWQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGhhbGYgKnApOworaGFsZjIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CitoYWxmMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKK2hhbGY0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGhhbGYgKnApOworaGFsZjggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CitoYWxmMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGhhbGYgKnApOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAordm9pZCBfX292bGQgdnN0b3JlMihjaGFyMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIodWNoYXIyIGRhdGEsIHNpemVfdCBvZmZzZXQsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoc2hvcnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIodXNob3J0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihpbnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVpbnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihsb25nMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIodWxvbmcyIGRhdGEsIHNpemVfdCBvZmZzZXQsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoY2hhcjMgZGF0YSwgc2l6ZV90IG9mZnNldCwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHVjaGFyMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHNob3J0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHVzaG9ydDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoaW50MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1aW50MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMobG9uZzMgZGF0YSwgc2l6ZV90IG9mZnNldCwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHVsb25nMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGNoYXI0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlNCh1Y2hhcjQgZGF0YSwgc2l6ZV90IG9mZnNldCwgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChzaG9ydDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNCh1c2hvcnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGludDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodWludDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGxvbmc0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlNCh1bG9uZzQgZGF0YSwgc2l6ZV90IG9mZnNldCwgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgZmxvYXQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChjaGFyOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgodWNoYXI4IGRhdGEsIHNpemVfdCBvZmZzZXQsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoc2hvcnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgodXNob3J0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChpbnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVpbnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChsb25nOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgodWxvbmc4IGRhdGEsIHNpemVfdCBvZmZzZXQsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGNoYXIxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVjaGFyMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoc2hvcnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1c2hvcnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoaW50MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVpbnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGxvbmcxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVsb25nMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBmbG9hdCAqcCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK3ZvaWQgX19vdmxkIHZzdG9yZTIoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGRvdWJsZSAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgZG91YmxlICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK3ZvaWQgX19vdmxkIHZzdG9yZShoYWxmIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihoYWxmMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoaGFsZjMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGhhbGY0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChoYWxmOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGhhbGYxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZWxzZQordm9pZCBfX292bGQgdnN0b3JlMihjaGFyMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIodWNoYXIyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoc2hvcnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIodXNob3J0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihpbnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVpbnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihsb25nMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIodWxvbmcyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoY2hhcjMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHVjaGFyMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHNob3J0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHVzaG9ydDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoaW50MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1aW50MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMobG9uZzMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHVsb25nMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGNoYXI0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlNCh1Y2hhcjQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChzaG9ydDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNCh1c2hvcnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGludDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodWludDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGxvbmc0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlNCh1bG9uZzQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgZmxvYXQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChjaGFyOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgodWNoYXI4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoc2hvcnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgodXNob3J0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChpbnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVpbnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChsb25nOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgodWxvbmc4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGNoYXIxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVjaGFyMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoc2hvcnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1c2hvcnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoaW50MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVpbnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGxvbmcxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVsb25nMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGNoYXIyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVjaGFyMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoc2hvcnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMih1c2hvcnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoaW50MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVpbnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGxvbmcyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVsb25nMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgZmxvYXQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhjaGFyMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1Y2hhcjMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHNob3J0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTModXNob3J0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGludDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1aW50MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhsb25nMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1bG9uZzMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoY2hhcjQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodWNoYXI0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChzaG9ydDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KHVzaG9ydDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChpbnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodWludDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQobG9uZzQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodWxvbmc0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGNoYXI4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVjaGFyOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoc2hvcnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOCh1c2hvcnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoaW50OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVpbnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGxvbmc4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVsb25nOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgZmxvYXQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoY2hhcjE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1Y2hhcjE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoc2hvcnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVzaG9ydDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGludDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVpbnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYobG9uZzE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1bG9uZzE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoY2hhcjIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMih1Y2hhcjIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoc2hvcnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVzaG9ydDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGludDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVpbnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIobG9uZzIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMih1bG9uZzIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGNoYXIzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTModWNoYXIzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHNob3J0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1c2hvcnQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhpbnQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1aW50MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGxvbmczIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTModWxvbmczIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgZmxvYXQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChjaGFyNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KHVjaGFyNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChzaG9ydDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodXNob3J0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoaW50NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodWludDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChsb25nNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KHVsb25nNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoY2hhcjggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlOCh1Y2hhcjggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoc2hvcnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVzaG9ydDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGludDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVpbnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgobG9uZzggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlOCh1bG9uZzggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihjaGFyMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYodWNoYXIxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoc2hvcnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYodXNob3J0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihpbnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVpbnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihsb25nMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYodWxvbmcxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgZmxvYXQgKnApOworI2lmZGVmIGNsX2tocl9mcDY0Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGRvdWJsZSAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGRvdWJsZSAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGRvdWJsZSAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGRvdWJsZSAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2Cit2b2lkIF9fb3ZsZCB2c3RvcmUoaGFsZiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoaGFsZjIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGhhbGYzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChoYWxmNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoaGFsZjggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihoYWxmMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUoaGFsZiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihoYWxmMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhoYWxmMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChoYWxmNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChoYWxmOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoaGFsZjE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUoaGFsZiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGhhbGYyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoaGFsZjMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChoYWxmNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGhhbGY4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGhhbGYxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBSZWFkIHNpemVvZiAoaGFsZikgYnl0ZXMgb2YgZGF0YSBmcm9tIGFkZHJlc3MKKyAqIChwICsgb2Zmc2V0KS4gVGhlIGRhdGEgcmVhZCBpcyBpbnRlcnByZXRlZCBhcyBhCisgKiBoYWxmIHZhbHVlLiBUaGUgaGFsZiB2YWx1ZSBpcyBjb252ZXJ0ZWQgdG8gYQorICogZmxvYXQgdmFsdWUgYW5kIHRoZSBmbG9hdCB2YWx1ZSBpcyByZXR1cm5lZC4KKyAqIFRoZSByZWFkIGFkZHJlc3MgY29tcHV0ZWQgYXMgKHAgKyBvZmZzZXQpCisgKiBtdXN0IGJlIDE2LWJpdCBhbGlnbmVkLgorICovCitmbG9hdCBfX292bGQgdmxvYWRfaGFsZihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGhhbGYgKnApOworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitmbG9hdCBfX292bGQgdmxvYWRfaGFsZihzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKKyNlbHNlCitmbG9hdCBfX292bGQgdmxvYWRfaGFsZihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2Zsb2F0IF9fb3ZsZCB2bG9hZF9oYWxmKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaGFsZiAqcCk7CitmbG9hdCBfX292bGQgdmxvYWRfaGFsZihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIFJlYWQgc2l6ZW9mIChoYWxmbikgYnl0ZXMgb2YgZGF0YSBmcm9tIGFkZHJlc3MKKyAqIChwICsgKG9mZnNldCAqIG4pKS4gVGhlIGRhdGEgcmVhZCBpcyBpbnRlcnByZXRlZAorICogYXMgYSBoYWxmbiB2YWx1ZS4gVGhlIGhhbGZuIHZhbHVlIHJlYWQgaXMKKyAqIGNvbnZlcnRlZCB0byBhIGZsb2F0biB2YWx1ZSBhbmQgdGhlIGZsb2F0bgorICogdmFsdWUgaXMgcmV0dXJuZWQuIFRoZSByZWFkIGFkZHJlc3MgY29tcHV0ZWQKKyAqIGFzIChwICsgKG9mZnNldCAqIG4pKSBtdXN0IGJlIDE2LWJpdCBhbGlnbmVkLgorICovCitmbG9hdDIgX19vdmxkIHZsb2FkX2hhbGYyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitmbG9hdDMgX19vdmxkIHZsb2FkX2hhbGYzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitmbG9hdDQgX19vdmxkIHZsb2FkX2hhbGY0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitmbG9hdDggX19vdmxkIHZsb2FkX2hhbGY4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitmbG9hdDE2IF9fb3ZsZCB2bG9hZF9oYWxmMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorZmxvYXQyIF9fb3ZsZCB2bG9hZF9oYWxmMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKK2Zsb2F0MyBfX292bGQgdmxvYWRfaGFsZjMoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CitmbG9hdDQgX19vdmxkIHZsb2FkX2hhbGY0KHNpemVfdCBvZmZzZXQsIGNvbnN0IGhhbGYgKnApOworZmxvYXQ4IF9fb3ZsZCB2bG9hZF9oYWxmOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkX2hhbGYxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKKyNlbHNlCitmbG9hdDIgX19vdmxkIHZsb2FkX2hhbGYyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworZmxvYXQzIF9fb3ZsZCB2bG9hZF9oYWxmMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWRfaGFsZjQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaGFsZiAqcCk7CitmbG9hdDggX19vdmxkIHZsb2FkX2hhbGY4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworZmxvYXQxNiBfX292bGQgdmxvYWRfaGFsZjE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworZmxvYXQyIF9fb3ZsZCB2bG9hZF9oYWxmMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworZmxvYXQzIF9fb3ZsZCB2bG9hZF9oYWxmMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworZmxvYXQ0IF9fb3ZsZCB2bG9hZF9oYWxmNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworZmxvYXQ4IF9fb3ZsZCB2bG9hZF9oYWxmOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworZmxvYXQxNiBfX292bGQgdmxvYWRfaGFsZjE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaGFsZiAqcCk7CitmbG9hdDIgX19vdmxkIHZsb2FkX2hhbGYyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKK2Zsb2F0MyBfX292bGQgdmxvYWRfaGFsZjMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGhhbGYgKnApOworZmxvYXQ0IF9fb3ZsZCB2bG9hZF9oYWxmNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CitmbG9hdDggX19vdmxkIHZsb2FkX2hhbGY4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkX2hhbGYxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIFRoZSBmbG9hdCB2YWx1ZSBnaXZlbiBieSBkYXRhIGlzIGZpcnN0CisgKiBjb252ZXJ0ZWQgdG8gYSBoYWxmIHZhbHVlIHVzaW5nIHRoZSBhcHByb3ByaWF0ZQorICogcm91bmRpbmcgbW9kZS4gVGhlIGhhbGYgdmFsdWUgaXMgdGhlbiB3cml0dGVuCisgKiB0byBhZGRyZXNzIGNvbXB1dGVkIGFzIChwICsgb2Zmc2V0KS4gVGhlCisgKiBhZGRyZXNzIGNvbXB1dGVkIGFzIChwICsgb2Zmc2V0KSBtdXN0IGJlIDE2LQorICogYml0IGFsaWduZWQuCisgKiB2c3RvcmVfaGFsZiB1c2UgdGhlIGN1cnJlbnQgcm91bmRpbmcgbW9kZS4KKyAqIFRoZSBkZWZhdWx0IGN1cnJlbnQgcm91bmRpbmcgbW9kZSBpcyByb3VuZCB0bworICogbmVhcmVzdCBldmVuLgorICovCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRlKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnR6KGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRwKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRuKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOworI2lmZGVmIGNsX2tocl9mcDY0Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydGUoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnR6KGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0cChkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydG4oZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNlbHNlCit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0ZShmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0eihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0cChmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0bihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydGUoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0eihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRwKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydG4oZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0ZShmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydHooZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRwKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0bihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0ZShkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydHooZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRwKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0bihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0ZShkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0eihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0cChkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0bihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydGUoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0eihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRwKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydG4oZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIFRoZSBmbG9hdG4gdmFsdWUgZ2l2ZW4gYnkgZGF0YSBpcyBjb252ZXJ0ZWQgdG8KKyAqIGEgaGFsZm4gdmFsdWUgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIHJvdW5kaW5nCisgKiBtb2RlLiBUaGUgaGFsZm4gdmFsdWUgaXMgdGhlbiB3cml0dGVuIHRvCisgKiBhZGRyZXNzIGNvbXB1dGVkIGFzIChwICsgKG9mZnNldCAqIG4pKS4gVGhlCisgKiBhZGRyZXNzIGNvbXB1dGVkIGFzIChwICsgKG9mZnNldCAqIG4pKSBtdXN0IGJlCisgKiAxNi1iaXQgYWxpZ25lZC4KKyAqIHZzdG9yZV9oYWxmbiB1c2VzIHRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUuCisgKiBUaGUgZGVmYXVsdCBjdXJyZW50IHJvdW5kaW5nIG1vZGUgaXMgcm91bmQgdG8KKyAqIG5lYXJlc3QgZXZlbi4KKyAqLworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjIoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjgoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0ZShmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRlKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydGUoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0ZShmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0ZShmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0eihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnR6KGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHooZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0eihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0eihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0cChmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRwKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHAoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0cChmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0cChmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0bihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRuKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydG4oZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0bihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0bihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOworI2lmZGVmIGNsX2tocl9mcDY0Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjIoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMyhkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjgoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTYoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRlKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRlKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRlKGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRlKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0ZShkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydHooZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHooZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHooZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydHooZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnR6KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0cChkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0cChkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0cChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0cChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydHAoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRuKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRuKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRuKGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRuKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0bihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjZWxzZQordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMyhmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjQoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTYoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydGUoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0ZShmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRlKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydGUoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydGUoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydHooZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0eihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnR6KGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydHooZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydHooZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydHAoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0cChmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRwKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydHAoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydHAoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydG4oZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0bihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRuKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydG4oZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydG4oZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMyhmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOChmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTYoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0ZShmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydGUoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRlKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0ZShmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRlKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydHooZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnR6KGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0eihmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydHooZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0eihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRwKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0cChmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHAoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRwKGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydHAoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0bihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydG4oZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRuKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0bihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRuKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjQoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOChmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydGUoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydGUoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydGUoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydGUoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRlKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0eihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0eihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0eihmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0eihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydHooZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRwKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRwKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRwKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRwKGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0cChmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydG4oZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydG4oZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydG4oZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydG4oZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRuKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOworI2lmZGVmIGNsX2tocl9mcDY0Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjIoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMyhkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjgoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTYoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRlKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRlKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRlKGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRlKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0ZShkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydHooZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHooZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHooZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydHooZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnR6KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0cChkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0cChkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0cChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0cChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydHAoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRuKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRuKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRuKGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRuKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0bihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjMoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRlKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydGUoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0ZShkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRlKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRlKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnR6KGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHooZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0eihkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnR6KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnR6KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRwKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHAoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0cChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRwKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRwKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRuKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydG4oZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0bihkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRuKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRuKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjIoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjMoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjQoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjgoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydGUoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRlKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0ZShkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydGUoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0ZShkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnR6KGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0eihkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHooZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnR6KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydHooZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0cChkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHAoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRwKGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0cChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRwKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydG4oZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRuKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0bihkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydG4oZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0bihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBGb3IgbiA9IDEsIDIsIDQsIDggYW5kIDE2IHJlYWQgc2l6ZW9mIChoYWxmbikKKyAqIGJ5dGVzIG9mIGRhdGEgZnJvbSBhZGRyZXNzIChwICsgKG9mZnNldCAqIG4pKS4KKyAqIFRoZSBkYXRhIHJlYWQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBoYWxmbiB2YWx1ZS4KKyAqIFRoZSBoYWxmbiB2YWx1ZSByZWFkIGlzIGNvbnZlcnRlZCB0byBhIGZsb2F0bgorICogdmFsdWUgYW5kIHRoZSBmbG9hdG4gdmFsdWUgaXMgcmV0dXJuZWQuCisgKiBUaGUgYWRkcmVzcyBjb21wdXRlZCBhcyAocCArIChvZmZzZXQgKiBuKSkKKyAqIG11c3QgYmUgYWxpZ25lZCB0byBzaXplb2YgKGhhbGZuKSBieXRlcy4KKyAqIEZvciBuID0gMywgdmxvYWRhX2hhbGYzIHJlYWRzIGEgaGFsZjMgZnJvbQorICogYWRkcmVzcyAocCArIChvZmZzZXQgKiA0KSkgYW5kIHJldHVybnMgYSBmbG9hdDMuCisgKiBUaGUgYWRkcmVzcyBjb21wdXRlZCBhcyAocCArIChvZmZzZXQgKiA0KSkKKyAqIG11c3QgYmUgYWxpZ25lZCB0byBzaXplb2YgKGhhbGYpICogNCBieXRlcy4KKyAqLworZmxvYXQgX19vdmxkIHZsb2FkYV9oYWxmKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitmbG9hdDIgX19vdmxkIHZsb2FkYV9oYWxmMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGhhbGYgKnApOworZmxvYXQzIF9fb3ZsZCB2bG9hZGFfaGFsZjMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWRhX2hhbGY0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitmbG9hdDggX19vdmxkIHZsb2FkYV9oYWxmOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGhhbGYgKnApOworZmxvYXQxNiBfX292bGQgdmxvYWRhX2hhbGYxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGhhbGYgKnApOworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitmbG9hdCBfX292bGQgdmxvYWRhX2hhbGYoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CitmbG9hdDIgX19vdmxkIHZsb2FkYV9oYWxmMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKK2Zsb2F0MyBfX292bGQgdmxvYWRhX2hhbGYzKHNpemVfdCBvZmZzZXQsIGNvbnN0IGhhbGYgKnApOworZmxvYXQ0IF9fb3ZsZCB2bG9hZGFfaGFsZjQoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CitmbG9hdDggX19vdmxkIHZsb2FkYV9oYWxmOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkYV9oYWxmMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CisjZWxzZQorZmxvYXQgX19vdmxkIHZsb2FkYV9oYWxmKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworZmxvYXQyIF9fb3ZsZCB2bG9hZGFfaGFsZjIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaGFsZiAqcCk7CitmbG9hdDMgX19vdmxkIHZsb2FkYV9oYWxmMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWRhX2hhbGY0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworZmxvYXQ4IF9fb3ZsZCB2bG9hZGFfaGFsZjgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaGFsZiAqcCk7CitmbG9hdDE2IF9fb3ZsZCB2bG9hZGFfaGFsZjE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworZmxvYXQgX19vdmxkIHZsb2FkYV9oYWxmKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaGFsZiAqcCk7CitmbG9hdDIgX19vdmxkIHZsb2FkYV9oYWxmMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworZmxvYXQzIF9fb3ZsZCB2bG9hZGFfaGFsZjMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWRhX2hhbGY0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaGFsZiAqcCk7CitmbG9hdDggX19vdmxkIHZsb2FkYV9oYWxmOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworZmxvYXQxNiBfX292bGQgdmxvYWRhX2hhbGYxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworZmxvYXQgX19vdmxkIHZsb2FkYV9oYWxmKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKK2Zsb2F0MiBfX292bGQgdmxvYWRhX2hhbGYyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKK2Zsb2F0MyBfX292bGQgdmxvYWRhX2hhbGYzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWRhX2hhbGY0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKK2Zsb2F0OCBfX292bGQgdmxvYWRhX2hhbGY4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkYV9oYWxmMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGhhbGYgKnApOworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBUaGUgZmxvYXRuIHZhbHVlIGdpdmVuIGJ5IGRhdGEgaXMgY29udmVydGVkIHRvCisgKiBhIGhhbGZuIHZhbHVlIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSByb3VuZGluZworICogbW9kZS4KKyAqIEZvciBuID0gMSwgMiwgNCwgOCBhbmQgMTYsIHRoZSBoYWxmbiB2YWx1ZSBpcworICogd3JpdHRlbiB0byB0aGUgYWRkcmVzcyBjb21wdXRlZCBhcyAocCArIChvZmZzZXQKKyAqICogbikpLiBUaGUgYWRkcmVzcyBjb21wdXRlZCBhcyAocCArIChvZmZzZXQgKgorICogbikpIG11c3QgYmUgYWxpZ25lZCB0byBzaXplb2YgKGhhbGZuKSBieXRlcy4KKyAqIEZvciBuID0gMywgdGhlIGhhbGYzIHZhbHVlIGlzIHdyaXR0ZW4gdG8gdGhlCisgKiBhZGRyZXNzIGNvbXB1dGVkIGFzIChwICsgKG9mZnNldCAqIDQpKS4gVGhlCisgKiBhZGRyZXNzIGNvbXB1dGVkIGFzIChwICsgKG9mZnNldCAqIDQpKSBtdXN0IGJlCisgKiBhbGlnbmVkIHRvIHNpemVvZiAoaGFsZikgKiA0IGJ5dGVzLgorICogdnN0b3JlYV9oYWxmbiB1c2VzIHRoZSBjdXJyZW50IHJvdW5kaW5nCisgKiBtb2RlLiBUaGUgZGVmYXVsdCBjdXJyZW50IHJvdW5kaW5nIG1vZGUgaXMKKyAqIHJvdW5kIHRvIG5lYXJlc3QgZXZlbi4KKyAqLworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjMoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydGUoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0ZShmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0ZShmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0ZShmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0ZShmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydGUoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0eihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnR6KGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnR6KGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnR6KGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnR6KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0eihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRwKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydHAoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydHAoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydHAoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydHAoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRwKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydG4oZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0bihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0bihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0bihmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0bihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydG4oZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKKworI2lmZGVmIGNsX2tocl9mcDY0Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMyhkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTYoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydGUoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydGUoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRlKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0ZShkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydGUoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0ZShkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0eihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0eihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydHooZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnR6KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0eihkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnR6KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRwKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnRwKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0cChkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydHAoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnRwKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydHAoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydG4oZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydG4oZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRuKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0bihkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydG4oZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0bihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKyNlbHNlCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjMoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydGUoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0ZShmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0ZShmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0ZShmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0ZShmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydGUoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0eihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnR6KGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnR6KGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnR6KGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnR6KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0eihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRwKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydHAoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydHAoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydHAoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydHAoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRwKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydG4oZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0bihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0bihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0bihmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0bihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydG4oZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMyhmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjQoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTYoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRlKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0ZShmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRlKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydGUoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0ZShmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0ZShmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydHooZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnR6KGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydHooZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0eihmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnR6KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnR6KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0cChmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydHAoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0cChmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRwKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydHAoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydHAoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRuKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0bihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRuKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydG4oZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0bihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0bihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0KGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0ZShmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0ZShmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydGUoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRlKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0ZShmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRlKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnR6KGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnR6KGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0eihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydHooZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnR6KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydHooZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydHAoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydHAoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRwKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0cChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydHAoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0cChmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0bihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0bihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydG4oZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRuKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0bihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRuKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOworCisjaWZkZWYgY2xfa2hyX2ZwNjQKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0ZShkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0ZShkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydGUoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRlKGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0ZShkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRlKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnR6KGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnR6KGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0eihkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydHooZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnR6KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydHooZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydHAoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydHAoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRwKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0cChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydHAoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0cChkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0bihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0bihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydG4oZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRuKGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0bihkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRuKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjMoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydGUoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0ZShkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0ZShkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0ZShkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0ZShkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydGUoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0eihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnR6KGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnR6KGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnR6KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnR6KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0eihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRwKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydHAoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydHAoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydHAoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydHAoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRwKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydG4oZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0bihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0bihkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0bihkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0bihkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydG4oZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMyhkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjQoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTYoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRlKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0ZShkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRlKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydGUoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0ZShkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0ZShkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydHooZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnR6KGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydHooZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0eihkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnR6KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnR6KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0cChkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydHAoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0cChkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRwKGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydHAoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydHAoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRuKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0bihkb3VibGUyIGRhdGEsc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydG4oZG91YmxlMyBkYXRhLHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRuKGRvdWJsZTQgZGF0YSxzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0bihkb3VibGU4IGRhdGEsc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRuKGRvdWJsZTE2IGRhdGEsc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjgsIHYxLjIgczYuMTIuOCwgdjIuMCBzNi4xMy44IC0gU3luY2hyb25pemF0aW9uIEZ1bmN0aW9ucworCisvLyBGbGFnIHR5cGUgYW5kIHZhbHVlcyBmb3IgYmFycmllciwgbWVtX2ZlbmNlLCByZWFkX21lbV9mZW5jZSwgd3JpdGVfbWVtX2ZlbmNlCit0eXBlZGVmIHVpbnQgY2xfbWVtX2ZlbmNlX2ZsYWdzOworCisvKioKKyAqIFF1ZXVlIGEgbWVtb3J5IGZlbmNlIHRvIGVuc3VyZSBjb3JyZWN0CisgKiBvcmRlcmluZyBvZiBtZW1vcnkgb3BlcmF0aW9ucyB0byBsb2NhbCBtZW1vcnkKKyAqLworI2RlZmluZSBDTEtfTE9DQUxfTUVNX0ZFTkNFICAgIDB4MDEKKworLyoqCisgKiBRdWV1ZSBhIG1lbW9yeSBmZW5jZSB0byBlbnN1cmUgY29ycmVjdAorICogb3JkZXJpbmcgb2YgbWVtb3J5IG9wZXJhdGlvbnMgdG8gZ2xvYmFsIG1lbW9yeQorICovCisjZGVmaW5lIENMS19HTE9CQUxfTUVNX0ZFTkNFICAgMHgwMgorCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKy8qKgorICogUXVldWUgYSBtZW1vcnkgZmVuY2UgdG8gZW5zdXJlIGNvcnJlY3Qgb3JkZXJpbmcgb2YgbWVtb3J5CisgKiBvcGVyYXRpb25zIGJldHdlZW4gd29yay1pdGVtcyBvZiBhIHdvcmstZ3JvdXAgdG8KKyAqIGltYWdlIG1lbW9yeS4KKyAqLworI2RlZmluZSBDTEtfSU1BR0VfTUVNX0ZFTkNFICAweDA0CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIEFsbCB3b3JrLWl0ZW1zIGluIGEgd29yay1ncm91cCBleGVjdXRpbmcgdGhlIGtlcm5lbAorICogb24gYSBwcm9jZXNzb3IgbXVzdCBleGVjdXRlIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGFueQorICogYXJlIGFsbG93ZWQgdG8gY29udGludWUgZXhlY3V0aW9uIGJleW9uZCB0aGUgYmFycmllci4KKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBlbmNvdW50ZXJlZCBieSBhbGwgd29yay1pdGVtcyBpbgorICogYSB3b3JrLWdyb3VwIGV4ZWN1dGluZyB0aGUga2VybmVsLgorICogSWYgYmFycmllciBpcyBpbnNpZGUgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIHRoZW4gYWxsCisgKiB3b3JrLWl0ZW1zIG11c3QgZW50ZXIgdGhlIGNvbmRpdGlvbmFsIGlmIGFueSB3b3JrLWl0ZW0KKyAqIGVudGVycyB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50IGFuZCBleGVjdXRlcyB0aGUKKyAqIGJhcnJpZXIuCisgKiBJZiBiYXJyZXIgaXMgaW5zaWRlIGEgbG9vcCwgYWxsIHdvcmstaXRlbXMgbXVzdCBleGVjdXRlCisgKiB0aGUgYmFycmllciBmb3IgZWFjaCBpdGVyYXRpb24gb2YgdGhlIGxvb3AgYmVmb3JlIGFueSBhcmUKKyAqIGFsbG93ZWQgdG8gY29udGludWUgZXhlY3V0aW9uIGJleW9uZCB0aGUgYmFycmllci4KKyAqIFRoZSBiYXJyaWVyIGZ1bmN0aW9uIGFsc28gcXVldWVzIGEgbWVtb3J5IGZlbmNlCisgKiAocmVhZHMgYW5kIHdyaXRlcykgdG8gZW5zdXJlIGNvcnJlY3Qgb3JkZXJpbmcgb2YKKyAqIG1lbW9yeSBvcGVyYXRpb25zIHRvIGxvY2FsIG9yIGdsb2JhbCBtZW1vcnkuCisgKiBUaGUgZmxhZ3MgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBtZW1vcnkgYWRkcmVzcyBzcGFjZQorICogYW5kIGNhbiBiZSBzZXQgdG8gYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIGxpdGVyYWwKKyAqIHZhbHVlcy4KKyAqIENMS19MT0NBTF9NRU1fRkVOQ0UgLSBUaGUgYmFycmllciBmdW5jdGlvbgorICogd2lsbCBlaXRoZXIgZmx1c2ggYW55IHZhcmlhYmxlcyBzdG9yZWQgaW4gbG9jYWwgbWVtb3J5CisgKiBvciBxdWV1ZSBhIG1lbW9yeSBmZW5jZSB0byBlbnN1cmUgY29ycmVjdCBvcmRlcmluZyBvZgorICogbWVtb3J5IG9wZXJhdGlvbnMgdG8gbG9jYWwgbWVtb3J5LgorICogQ0xLX0dMT0JBTF9NRU1fRkVOQ0UgLSBUaGUgYmFycmllciBmdW5jdGlvbgorICogd2lsbCBxdWV1ZSBhIG1lbW9yeSBmZW5jZSB0byBlbnN1cmUgY29ycmVjdCBvcmRlcmluZworICogb2YgbWVtb3J5IG9wZXJhdGlvbnMgdG8gZ2xvYmFsIG1lbW9yeS4gVGhpcyBjYW4gYmUKKyAqIHVzZWZ1bCB3aGVuIHdvcmstaXRlbXMsIGZvciBleGFtcGxlLCB3cml0ZSB0byBidWZmZXIgb3IKKyAqIGltYWdlIG9iamVjdHMgYW5kIHRoZW4gd2FudCB0byByZWFkIHRoZSB1cGRhdGVkIGRhdGEuCisgKi8KKwordm9pZCBfX292bGQgYmFycmllcihjbF9tZW1fZmVuY2VfZmxhZ3MgZmxhZ3MpOworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKwordHlwZWRlZiBlbnVtIG1lbW9yeV9zY29wZQoreworICBtZW1vcnlfc2NvcGVfd29ya19pdGVtLAorICBtZW1vcnlfc2NvcGVfd29ya19ncm91cCwKKyAgbWVtb3J5X3Njb3BlX2RldmljZSwKKyAgbWVtb3J5X3Njb3BlX2FsbF9zdm1fZGV2aWNlcywKKyAgbWVtb3J5X3Njb3BlX3N1Yl9ncm91cAorfSBtZW1vcnlfc2NvcGU7CisKK3ZvaWQgX19vdmxkIHdvcmtfZ3JvdXBfYmFycmllcihjbF9tZW1fZmVuY2VfZmxhZ3MgZmxhZ3MsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit2b2lkIF9fb3ZsZCB3b3JrX2dyb3VwX2JhcnJpZXIoY2xfbWVtX2ZlbmNlX2ZsYWdzIGZsYWdzKTsKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjksIHYxLjIgczYuMTIuOSAtIEV4cGxpY2l0IE1lbW9yeSBGZW5jZSBGdW5jdGlvbnMKKworLyoqCisgKiBPcmRlcnMgbG9hZHMgYW5kIHN0b3JlcyBvZiBhIHdvcmstaXRlbQorICogZXhlY3V0aW5nIGEga2VybmVsLiBUaGlzIG1lYW5zIHRoYXQgbG9hZHMKKyAqIGFuZCBzdG9yZXMgcHJlY2VkaW5nIHRoZSBtZW1fZmVuY2Ugd2lsbAorICogYmUgY29tbWl0dGVkIHRvIG1lbW9yeSBiZWZvcmUgYW55IGxvYWRzCisgKiBhbmQgc3RvcmVzIGZvbGxvd2luZyB0aGUgbWVtX2ZlbmNlLgorICogVGhlIGZsYWdzIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbWVtb3J5CisgKiBhZGRyZXNzIHNwYWNlIGFuZCBjYW4gYmUgc2V0IHRvIGEKKyAqIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgbGl0ZXJhbAorICogdmFsdWVzOgorICogQ0xLX0xPQ0FMX01FTV9GRU5DRQorICogQ0xLX0dMT0JBTF9NRU1fRkVOQ0UuCisgKi8KK3ZvaWQgX19vdmxkIG1lbV9mZW5jZShjbF9tZW1fZmVuY2VfZmxhZ3MgZmxhZ3MpOworCisvKioKKyAqIFJlYWQgbWVtb3J5IGJhcnJpZXIgdGhhdCBvcmRlcnMgb25seQorICogbG9hZHMuCisgKiBUaGUgZmxhZ3MgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UgYW5kIGNhbiBiZSBzZXQgdG8gdG8gYQorICogY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBsaXRlcmFsCisgKiB2YWx1ZXM6CisgKiBDTEtfTE9DQUxfTUVNX0ZFTkNFCisgKiBDTEtfR0xPQkFMX01FTV9GRU5DRS4KKyAqLwordm9pZCBfX292bGQgcmVhZF9tZW1fZmVuY2UoY2xfbWVtX2ZlbmNlX2ZsYWdzIGZsYWdzKTsKKworLyoqCisgKiBXcml0ZSBtZW1vcnkgYmFycmllciB0aGF0IG9yZGVycyBvbmx5CisgKiBzdG9yZXMuCisgKiBUaGUgZmxhZ3MgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UgYW5kIGNhbiBiZSBzZXQgdG8gdG8gYQorICogY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBsaXRlcmFsCisgKiB2YWx1ZXM6CisgKiBDTEtfTE9DQUxfTUVNX0ZFTkNFCisgKiBDTEtfR0xPQkFMX01FTV9GRU5DRS4KKyAqLwordm9pZCBfX292bGQgd3JpdGVfbWVtX2ZlbmNlKGNsX21lbV9mZW5jZV9mbGFncyBmbGFncyk7CisKKy8vIE9wZW5DTCB2Mi4wIHM2LjEzLjkgLSBBZGRyZXNzIFNwYWNlIFF1YWxpZmllciBGdW5jdGlvbnMKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitjbF9tZW1fZmVuY2VfZmxhZ3MgX19vdmxkIGdldF9mZW5jZShjb25zdCB2b2lkICpwdHIpOworY2xfbWVtX2ZlbmNlX2ZsYWdzIF9fb3ZsZCBnZXRfZmVuY2Uodm9pZCAqcHRyKTsKKworLyoqIAorICogQnVpbHRpbiBmdW5jdGlvbnMgdG9fZ2xvYmFsLCB0b19sb2NhbCwgYW5kIHRvX3ByaXZhdGUgbmVlZCB0byBiZSBkZWNsYXJlZCBhcyBDbGFuZyBidWlsdGluIGZ1bmN0aW9ucworICogYW5kIGNoZWNrZWQgaW4gU2VtYSBzaW5jZSB0aGV5IHNob3VsZCBiZSBkZWNsYXJlZCBhcworICogICBhZGRyIGdlbnR5cGUqIHRvX2FkZHIgKGdlbnR5cGUqKTsKKyAqIHdoZXJlIGdlbnR5cGUgaXMgYnVpbHRpbiB0eXBlIG9yIHVzZXIgZGVmaW5lZCB0eXBlLgorICovCisKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjEwLCB2MS4yIHM2LjEyLjEwLCB2Mi4wIHM2LjEzLjEwIC0gQXN5bmMgQ29waWVzIGZyb20gR2xvYmFsIHRvIExvY2FsIE1lbW9yeSwgTG9jYWwgdG8gR2xvYmFsIE1lbW9yeSwgYW5kIFByZWZldGNoCisKKy8qKgorICogZXZlbnRfdCBhc3luY193b3JrX2dyb3VwX2NvcHkgKAorICogX19nbG9iYWwgZ2VudHlwZSAqZHN0LAorICogY29uc3QgX19sb2NhbCBnZW50eXBlICpzcmMsCisgKiBzaXplX3QgbnVtX2VsZW1lbnRzLAorICogZXZlbnRfdCBldmVudCkKKyAqIFBlcmZvcm0gYW4gYXN5bmMgY29weSBvZiBudW1fZWxlbWVudHMKKyAqIGdlbnR5cGUgZWxlbWVudHMgZnJvbSBzcmMgdG8gZHN0LiBUaGUgYXN5bmMKKyAqIGNvcHkgaXMgcGVyZm9ybWVkIGJ5IGFsbCB3b3JrLWl0ZW1zIGluIGEgd29ya2dyb3VwCisgKiBhbmQgdGhpcyBidWlsdC1pbiBmdW5jdGlvbiBtdXN0IHRoZXJlZm9yZQorICogYmUgZW5jb3VudGVyZWQgYnkgYWxsIHdvcmstaXRlbXMgaW4gYSB3b3JrZ3JvdXAKKyAqIGV4ZWN1dGluZyB0aGUga2VybmVsIHdpdGggdGhlIHNhbWUKKyAqIGFyZ3VtZW50IHZhbHVlczsgb3RoZXJ3aXNlIHRoZSByZXN1bHRzIGFyZQorICogdW5kZWZpbmVkLgorICogUmV0dXJucyBhbiBldmVudCBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBieQorICogd2FpdF9ncm91cF9ldmVudHMgdG8gd2FpdCBmb3IgdGhlIGFzeW5jIGNvcHkKKyAqIHRvIGZpbmlzaC4gVGhlIGV2ZW50IGFyZ3VtZW50IGNhbiBhbHNvIGJlIHVzZWQKKyAqIHRvIGFzc29jaWF0ZSB0aGUgYXN5bmNfd29ya19ncm91cF9jb3B5IHdpdGgKKyAqIGEgcHJldmlvdXMgYXN5bmMgY29weSBhbGxvd2luZyBhbiBldmVudCB0byBiZQorICogc2hhcmVkIGJ5IG11bHRpcGxlIGFzeW5jIGNvcGllczsgb3RoZXJ3aXNlIGV2ZW50CisgKiBzaG91bGQgYmUgemVyby4KKyAqIElmIGV2ZW50IGFyZ3VtZW50IGlzIG5vbi16ZXJvLCB0aGUgZXZlbnQgb2JqZWN0CisgKiBzdXBwbGllZCBpbiBldmVudCBhcmd1bWVudCB3aWxsIGJlIHJldHVybmVkLgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIGFueSBpbXBsaWNpdAorICogc3luY2hyb25pemF0aW9uIG9mIHNvdXJjZSBkYXRhIHN1Y2ggYXMgdXNpbmcgYQorICogYmFycmllciBiZWZvcmUgcGVyZm9ybWluZyB0aGUgY29weS4KKyAqLworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgY2hhciAqZHN0LCBjb25zdCBfX2dsb2JhbCBjaGFyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWNoYXIgKmRzdCwgY29uc3QgX19nbG9iYWwgdWNoYXIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBzaG9ydCAqZHN0LCBjb25zdCBfX2dsb2JhbCBzaG9ydCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVzaG9ydCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBpbnQgKmRzdCwgY29uc3QgX19nbG9iYWwgaW50ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWludCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1aW50ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgbG9uZyAqZHN0LCBjb25zdCBfX2dsb2JhbCBsb25nICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWxvbmcgKmRzdCwgY29uc3QgX19nbG9iYWwgdWxvbmcgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBmbG9hdCAqZHN0LCBjb25zdCBfX2dsb2JhbCBmbG9hdCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGNoYXIyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGNoYXIyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWNoYXIyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHNob3J0MiAqZHN0LCBjb25zdCBfX2dsb2JhbCBzaG9ydDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1c2hvcnQyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBpbnQyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGludDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1aW50MiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1aW50MiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGxvbmcyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGxvbmcyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWxvbmcyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVsb25nMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGZsb2F0MiAqZHN0LCBjb25zdCBfX2dsb2JhbCBmbG9hdDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBjaGFyMyAqZHN0LCBjb25zdCBfX2dsb2JhbCBjaGFyMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVjaGFyMyAqZHN0LCBjb25zdCBfX2dsb2JhbCB1Y2hhcjMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBzaG9ydDMgKmRzdCwgY29uc3QgX19nbG9iYWwgc2hvcnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdXNob3J0MyAqZHN0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgaW50MyAqZHN0LCBjb25zdCBfX2dsb2JhbCBpbnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWludDMgKmRzdCwgY29uc3QgX19nbG9iYWwgdWludDMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBsb25nMyAqZHN0LCBjb25zdCBfX2dsb2JhbCBsb25nMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVsb25nMyAqZHN0LCBjb25zdCBfX2dsb2JhbCB1bG9uZzMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBmbG9hdDMgKmRzdCwgY29uc3QgX19nbG9iYWwgZmxvYXQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgY2hhcjQgKmRzdCwgY29uc3QgX19nbG9iYWwgY2hhcjQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1Y2hhcjQgKmRzdCwgY29uc3QgX19nbG9iYWwgdWNoYXI0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgc2hvcnQ0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHNob3J0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVzaG9ydDQgKmRzdCwgY29uc3QgX19nbG9iYWwgdXNob3J0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGludDQgKmRzdCwgY29uc3QgX19nbG9iYWwgaW50NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVpbnQ0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVpbnQ0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgbG9uZzQgKmRzdCwgY29uc3QgX19nbG9iYWwgbG9uZzQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1bG9uZzQgKmRzdCwgY29uc3QgX19nbG9iYWwgdWxvbmc0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgZmxvYXQ0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGZsb2F0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGNoYXI4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGNoYXI4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWNoYXI4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHNob3J0OCAqZHN0LCBjb25zdCBfX2dsb2JhbCBzaG9ydDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1c2hvcnQ4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBpbnQ4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGludDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1aW50OCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1aW50OCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGxvbmc4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGxvbmc4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWxvbmc4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVsb25nOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGZsb2F0OCAqZHN0LCBjb25zdCBfX2dsb2JhbCBmbG9hdDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBjaGFyMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgY2hhcjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWNoYXIxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1Y2hhcjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgc2hvcnQxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCBzaG9ydDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdXNob3J0MTYgKmRzdCwgY29uc3QgX19nbG9iYWwgdXNob3J0MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBpbnQxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCBpbnQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVpbnQxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1aW50MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBsb25nMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgbG9uZzE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWxvbmcxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1bG9uZzE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgZmxvYXQxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCBmbG9hdDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGNoYXIgKmRzdCwgY29uc3QgX19sb2NhbCBjaGFyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVjaGFyICpkc3QsIGNvbnN0IF9fbG9jYWwgdWNoYXIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgc2hvcnQgKmRzdCwgY29uc3QgX19sb2NhbCBzaG9ydCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1c2hvcnQgKmRzdCwgY29uc3QgX19sb2NhbCB1c2hvcnQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgaW50ICpkc3QsIGNvbnN0IF9fbG9jYWwgaW50ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVpbnQgKmRzdCwgY29uc3QgX19sb2NhbCB1aW50ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGxvbmcgKmRzdCwgY29uc3QgX19sb2NhbCBsb25nICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVsb25nICpkc3QsIGNvbnN0IF9fbG9jYWwgdWxvbmcgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgZmxvYXQgKmRzdCwgY29uc3QgX19sb2NhbCBmbG9hdCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBjaGFyMiAqZHN0LCBjb25zdCBfX2xvY2FsIGNoYXIyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVjaGFyMiAqZHN0LCBjb25zdCBfX2xvY2FsIHVjaGFyMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBzaG9ydDIgKmRzdCwgY29uc3QgX19sb2NhbCBzaG9ydDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdXNob3J0MiAqZHN0LCBjb25zdCBfX2xvY2FsIHVzaG9ydDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgaW50MiAqZHN0LCBjb25zdCBfX2xvY2FsIGludDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdWludDIgKmRzdCwgY29uc3QgX19sb2NhbCB1aW50MiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBsb25nMiAqZHN0LCBjb25zdCBfX2xvY2FsIGxvbmcyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVsb25nMiAqZHN0LCBjb25zdCBfX2xvY2FsIHVsb25nMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBmbG9hdDIgKmRzdCwgY29uc3QgX19sb2NhbCBmbG9hdDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgY2hhcjMgKmRzdCwgY29uc3QgX19sb2NhbCBjaGFyMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1Y2hhcjMgKmRzdCwgY29uc3QgX19sb2NhbCB1Y2hhcjMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgc2hvcnQzICpkc3QsIGNvbnN0IF9fbG9jYWwgc2hvcnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVzaG9ydDMgKmRzdCwgY29uc3QgX19sb2NhbCB1c2hvcnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGludDMgKmRzdCwgY29uc3QgX19sb2NhbCBpbnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVpbnQzICpkc3QsIGNvbnN0IF9fbG9jYWwgdWludDMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgbG9uZzMgKmRzdCwgY29uc3QgX19sb2NhbCBsb25nMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1bG9uZzMgKmRzdCwgY29uc3QgX19sb2NhbCB1bG9uZzMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgZmxvYXQzICpkc3QsIGNvbnN0IF9fbG9jYWwgZmxvYXQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGNoYXI0ICpkc3QsIGNvbnN0IF9fbG9jYWwgY2hhcjQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdWNoYXI0ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWNoYXI0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHNob3J0NCAqZHN0LCBjb25zdCBfX2xvY2FsIHNob3J0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1c2hvcnQ0ICpkc3QsIGNvbnN0IF9fbG9jYWwgdXNob3J0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBpbnQ0ICpkc3QsIGNvbnN0IF9fbG9jYWwgaW50NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1aW50NCAqZHN0LCBjb25zdCBfX2xvY2FsIHVpbnQ0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGxvbmc0ICpkc3QsIGNvbnN0IF9fbG9jYWwgbG9uZzQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdWxvbmc0ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWxvbmc0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGZsb2F0NCAqZHN0LCBjb25zdCBfX2xvY2FsIGZsb2F0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBjaGFyOCAqZHN0LCBjb25zdCBfX2xvY2FsIGNoYXI4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVjaGFyOCAqZHN0LCBjb25zdCBfX2xvY2FsIHVjaGFyOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBzaG9ydDggKmRzdCwgY29uc3QgX19sb2NhbCBzaG9ydDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdXNob3J0OCAqZHN0LCBjb25zdCBfX2xvY2FsIHVzaG9ydDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgaW50OCAqZHN0LCBjb25zdCBfX2xvY2FsIGludDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdWludDggKmRzdCwgY29uc3QgX19sb2NhbCB1aW50OCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBsb25nOCAqZHN0LCBjb25zdCBfX2xvY2FsIGxvbmc4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVsb25nOCAqZHN0LCBjb25zdCBfX2xvY2FsIHVsb25nOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBmbG9hdDggKmRzdCwgY29uc3QgX19sb2NhbCBmbG9hdDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgY2hhcjE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgY2hhcjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVjaGFyMTYgKmRzdCwgY29uc3QgX19sb2NhbCB1Y2hhcjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHNob3J0MTYgKmRzdCwgY29uc3QgX19sb2NhbCBzaG9ydDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVzaG9ydDE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgdXNob3J0MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgaW50MTYgKmRzdCwgY29uc3QgX19sb2NhbCBpbnQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1aW50MTYgKmRzdCwgY29uc3QgX19sb2NhbCB1aW50MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgbG9uZzE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgbG9uZzE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVsb25nMTYgKmRzdCwgY29uc3QgX19sb2NhbCB1bG9uZzE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGZsb2F0MTYgKmRzdCwgY29uc3QgX19sb2NhbCBmbG9hdDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworI2lmZGVmIGNsX2tocl9mcDY0CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBkb3VibGUgKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgZG91YmxlMiAqZHN0LCBjb25zdCBfX2dsb2JhbCBkb3VibGUyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgZG91YmxlMyAqZHN0LCBjb25zdCBfX2dsb2JhbCBkb3VibGUzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgZG91YmxlNCAqZHN0LCBjb25zdCBfX2dsb2JhbCBkb3VibGU0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgZG91YmxlOCAqZHN0LCBjb25zdCBfX2dsb2JhbCBkb3VibGU4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgZG91YmxlMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlMTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgZG91YmxlICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGRvdWJsZTIgKmRzdCwgY29uc3QgX19sb2NhbCBkb3VibGUyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGRvdWJsZTMgKmRzdCwgY29uc3QgX19sb2NhbCBkb3VibGUzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGRvdWJsZTQgKmRzdCwgY29uc3QgX19sb2NhbCBkb3VibGU0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGRvdWJsZTggKmRzdCwgY29uc3QgX19sb2NhbCBkb3VibGU4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGRvdWJsZTE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlMTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBoYWxmICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBoYWxmMiAqZHN0LCBjb25zdCBfX2dsb2JhbCBoYWxmMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGhhbGYzICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGhhbGYzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgaGFsZjQgKmRzdCwgY29uc3QgX19nbG9iYWwgaGFsZjQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBoYWxmOCAqZHN0LCBjb25zdCBfX2dsb2JhbCBoYWxmOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGhhbGYxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCBoYWxmMTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgaGFsZiAqZHN0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgaGFsZjIgKmRzdCwgY29uc3QgX19sb2NhbCBoYWxmMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBoYWxmMyAqZHN0LCBjb25zdCBfX2xvY2FsIGhhbGYzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGhhbGY0ICpkc3QsIGNvbnN0IF9fbG9jYWwgaGFsZjQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgaGFsZjggKmRzdCwgY29uc3QgX19sb2NhbCBoYWxmOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBoYWxmMTYgKmRzdCwgY29uc3QgX19sb2NhbCBoYWxmMTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFBlcmZvcm0gYW4gYXN5bmMgZ2F0aGVyIG9mIG51bV9lbGVtZW50cworICogZ2VudHlwZSBlbGVtZW50cyBmcm9tIHNyYyB0byBkc3QuIFRoZQorICogc3JjX3N0cmlkZSBpcyB0aGUgc3RyaWRlIGluIGVsZW1lbnRzIGZvciBlYWNoCisgKiBnZW50eXBlIGVsZW1lbnQgcmVhZCBmcm9tIHNyYy4gVGhlIGRzdF9zdHJpZGUKKyAqIGlzIHRoZSBzdHJpZGUgaW4gZWxlbWVudHMgZm9yIGVhY2ggZ2VudHlwZQorICogZWxlbWVudCB3cml0dGVuIHRvIGRzdC4gVGhlIGFzeW5jIGdhdGhlciBpcworICogcGVyZm9ybWVkIGJ5IGFsbCB3b3JrLWl0ZW1zIGluIGEgd29yay1ncm91cC4KKyAqIFRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gbXVzdCB0aGVyZWZvcmUgYmUKKyAqIGVuY291bnRlcmVkIGJ5IGFsbCB3b3JrLWl0ZW1zIGluIGEgd29yay1ncm91cAorICogZXhlY3V0aW5nIHRoZSBrZXJuZWwgd2l0aCB0aGUgc2FtZSBhcmd1bWVudAorICogdmFsdWVzOyBvdGhlcndpc2UgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4KKyAqIFJldHVybnMgYW4gZXZlbnQgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYnkKKyAqIHdhaXRfZ3JvdXBfZXZlbnRzIHRvIHdhaXQgZm9yIHRoZSBhc3luYyBjb3B5CisgKiB0byBmaW5pc2guIFRoZSBldmVudCBhcmd1bWVudCBjYW4gYWxzbyBiZSB1c2VkCisgKiB0byBhc3NvY2lhdGUgdGhlCisgKiBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weSB3aXRoIGEKKyAqIHByZXZpb3VzIGFzeW5jIGNvcHkgYWxsb3dpbmcgYW4gZXZlbnQgdG8gYmUKKyAqIHNoYXJlZCBieSBtdWx0aXBsZSBhc3luYyBjb3BpZXM7IG90aGVyd2lzZSBldmVudAorICogc2hvdWxkIGJlIHplcm8uCisgKiBJZiBldmVudCBhcmd1bWVudCBpcyBub24temVybywgdGhlIGV2ZW50IG9iamVjdAorICogc3VwcGxpZWQgaW4gZXZlbnQgYXJndW1lbnQgd2lsbCBiZSByZXR1cm5lZC4KKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBhbnkgaW1wbGljaXQKKyAqIHN5bmNocm9uaXphdGlvbiBvZiBzb3VyY2UgZGF0YSBzdWNoIGFzIHVzaW5nIGEKKyAqIGJhcnJpZXIgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGNvcHkuCisgKi8KK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgY2hhciAqZHN0LCBjb25zdCBfX2dsb2JhbCBjaGFyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWNoYXIgKmRzdCwgY29uc3QgX19nbG9iYWwgdWNoYXIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBzaG9ydCAqZHN0LCBjb25zdCBfX2dsb2JhbCBzaG9ydCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVzaG9ydCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBpbnQgKmRzdCwgY29uc3QgX19nbG9iYWwgaW50ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWludCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1aW50ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgbG9uZyAqZHN0LCBjb25zdCBfX2dsb2JhbCBsb25nICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWxvbmcgKmRzdCwgY29uc3QgX19nbG9iYWwgdWxvbmcgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBmbG9hdCAqZHN0LCBjb25zdCBfX2dsb2JhbCBmbG9hdCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGNoYXIyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGNoYXIyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWNoYXIyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHNob3J0MiAqZHN0LCBjb25zdCBfX2dsb2JhbCBzaG9ydDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1c2hvcnQyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBpbnQyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGludDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1aW50MiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1aW50MiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGxvbmcyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGxvbmcyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWxvbmcyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVsb25nMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGZsb2F0MiAqZHN0LCBjb25zdCBfX2dsb2JhbCBmbG9hdDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBjaGFyMyAqZHN0LCBjb25zdCBfX2dsb2JhbCBjaGFyMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVjaGFyMyAqZHN0LCBjb25zdCBfX2dsb2JhbCB1Y2hhcjMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBzaG9ydDMgKmRzdCwgY29uc3QgX19nbG9iYWwgc2hvcnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdXNob3J0MyAqZHN0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgaW50MyAqZHN0LCBjb25zdCBfX2dsb2JhbCBpbnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWludDMgKmRzdCwgY29uc3QgX19nbG9iYWwgdWludDMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBsb25nMyAqZHN0LCBjb25zdCBfX2dsb2JhbCBsb25nMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVsb25nMyAqZHN0LCBjb25zdCBfX2dsb2JhbCB1bG9uZzMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBmbG9hdDMgKmRzdCwgY29uc3QgX19nbG9iYWwgZmxvYXQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgY2hhcjQgKmRzdCwgY29uc3QgX19nbG9iYWwgY2hhcjQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1Y2hhcjQgKmRzdCwgY29uc3QgX19nbG9iYWwgdWNoYXI0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgc2hvcnQ0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHNob3J0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVzaG9ydDQgKmRzdCwgY29uc3QgX19nbG9iYWwgdXNob3J0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGludDQgKmRzdCwgY29uc3QgX19nbG9iYWwgaW50NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVpbnQ0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVpbnQ0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgbG9uZzQgKmRzdCwgY29uc3QgX19nbG9iYWwgbG9uZzQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1bG9uZzQgKmRzdCwgY29uc3QgX19nbG9iYWwgdWxvbmc0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgZmxvYXQ0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGZsb2F0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGNoYXI4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGNoYXI4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWNoYXI4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHNob3J0OCAqZHN0LCBjb25zdCBfX2dsb2JhbCBzaG9ydDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1c2hvcnQ4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBpbnQ4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGludDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1aW50OCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1aW50OCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGxvbmc4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGxvbmc4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWxvbmc4ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVsb25nOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGZsb2F0OCAqZHN0LCBjb25zdCBfX2dsb2JhbCBmbG9hdDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBjaGFyMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgY2hhcjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWNoYXIxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1Y2hhcjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgc2hvcnQxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCBzaG9ydDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdXNob3J0MTYgKmRzdCwgY29uc3QgX19nbG9iYWwgdXNob3J0MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBpbnQxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCBpbnQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVpbnQxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1aW50MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBsb25nMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgbG9uZzE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWxvbmcxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1bG9uZzE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgZmxvYXQxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCBmbG9hdDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGNoYXIgKmRzdCwgY29uc3QgX19sb2NhbCBjaGFyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVjaGFyICpkc3QsIGNvbnN0IF9fbG9jYWwgdWNoYXIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgc2hvcnQgKmRzdCwgY29uc3QgX19sb2NhbCBzaG9ydCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1c2hvcnQgKmRzdCwgY29uc3QgX19sb2NhbCB1c2hvcnQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgaW50ICpkc3QsIGNvbnN0IF9fbG9jYWwgaW50ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVpbnQgKmRzdCwgY29uc3QgX19sb2NhbCB1aW50ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGxvbmcgKmRzdCwgY29uc3QgX19sb2NhbCBsb25nICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVsb25nICpkc3QsIGNvbnN0IF9fbG9jYWwgdWxvbmcgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgZmxvYXQgKmRzdCwgY29uc3QgX19sb2NhbCBmbG9hdCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBjaGFyMiAqZHN0LCBjb25zdCBfX2xvY2FsIGNoYXIyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVjaGFyMiAqZHN0LCBjb25zdCBfX2xvY2FsIHVjaGFyMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBzaG9ydDIgKmRzdCwgY29uc3QgX19sb2NhbCBzaG9ydDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdXNob3J0MiAqZHN0LCBjb25zdCBfX2xvY2FsIHVzaG9ydDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgaW50MiAqZHN0LCBjb25zdCBfX2xvY2FsIGludDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdWludDIgKmRzdCwgY29uc3QgX19sb2NhbCB1aW50MiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBsb25nMiAqZHN0LCBjb25zdCBfX2xvY2FsIGxvbmcyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVsb25nMiAqZHN0LCBjb25zdCBfX2xvY2FsIHVsb25nMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBmbG9hdDIgKmRzdCwgY29uc3QgX19sb2NhbCBmbG9hdDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgY2hhcjMgKmRzdCwgY29uc3QgX19sb2NhbCBjaGFyMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1Y2hhcjMgKmRzdCwgY29uc3QgX19sb2NhbCB1Y2hhcjMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgc2hvcnQzICpkc3QsIGNvbnN0IF9fbG9jYWwgc2hvcnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVzaG9ydDMgKmRzdCwgY29uc3QgX19sb2NhbCB1c2hvcnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGludDMgKmRzdCwgY29uc3QgX19sb2NhbCBpbnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVpbnQzICpkc3QsIGNvbnN0IF9fbG9jYWwgdWludDMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgbG9uZzMgKmRzdCwgY29uc3QgX19sb2NhbCBsb25nMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1bG9uZzMgKmRzdCwgY29uc3QgX19sb2NhbCB1bG9uZzMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgZmxvYXQzICpkc3QsIGNvbnN0IF9fbG9jYWwgZmxvYXQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGNoYXI0ICpkc3QsIGNvbnN0IF9fbG9jYWwgY2hhcjQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdWNoYXI0ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWNoYXI0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHNob3J0NCAqZHN0LCBjb25zdCBfX2xvY2FsIHNob3J0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1c2hvcnQ0ICpkc3QsIGNvbnN0IF9fbG9jYWwgdXNob3J0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBpbnQ0ICpkc3QsIGNvbnN0IF9fbG9jYWwgaW50NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1aW50NCAqZHN0LCBjb25zdCBfX2xvY2FsIHVpbnQ0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGxvbmc0ICpkc3QsIGNvbnN0IF9fbG9jYWwgbG9uZzQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdWxvbmc0ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWxvbmc0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGZsb2F0NCAqZHN0LCBjb25zdCBfX2xvY2FsIGZsb2F0NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBjaGFyOCAqZHN0LCBjb25zdCBfX2xvY2FsIGNoYXI4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVjaGFyOCAqZHN0LCBjb25zdCBfX2xvY2FsIHVjaGFyOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBzaG9ydDggKmRzdCwgY29uc3QgX19sb2NhbCBzaG9ydDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdXNob3J0OCAqZHN0LCBjb25zdCBfX2xvY2FsIHVzaG9ydDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgaW50OCAqZHN0LCBjb25zdCBfX2xvY2FsIGludDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdWludDggKmRzdCwgY29uc3QgX19sb2NhbCB1aW50OCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBsb25nOCAqZHN0LCBjb25zdCBfX2xvY2FsIGxvbmc4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVsb25nOCAqZHN0LCBjb25zdCBfX2xvY2FsIHVsb25nOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBmbG9hdDggKmRzdCwgY29uc3QgX19sb2NhbCBmbG9hdDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgY2hhcjE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgY2hhcjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVjaGFyMTYgKmRzdCwgY29uc3QgX19sb2NhbCB1Y2hhcjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHNob3J0MTYgKmRzdCwgY29uc3QgX19sb2NhbCBzaG9ydDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVzaG9ydDE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgdXNob3J0MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgaW50MTYgKmRzdCwgY29uc3QgX19sb2NhbCBpbnQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1aW50MTYgKmRzdCwgY29uc3QgX19sb2NhbCB1aW50MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgbG9uZzE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgbG9uZzE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVsb25nMTYgKmRzdCwgY29uc3QgX19sb2NhbCB1bG9uZzE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGZsb2F0MTYgKmRzdCwgY29uc3QgX19sb2NhbCBmbG9hdDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBkb3VibGUgKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgZG91YmxlMiAqZHN0LCBjb25zdCBfX2dsb2JhbCBkb3VibGUyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgZG91YmxlMyAqZHN0LCBjb25zdCBfX2dsb2JhbCBkb3VibGUzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgZG91YmxlNCAqZHN0LCBjb25zdCBfX2dsb2JhbCBkb3VibGU0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgZG91YmxlOCAqZHN0LCBjb25zdCBfX2dsb2JhbCBkb3VibGU4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgZG91YmxlMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlMTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgZG91YmxlICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGRvdWJsZTIgKmRzdCwgY29uc3QgX19sb2NhbCBkb3VibGUyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGRvdWJsZTMgKmRzdCwgY29uc3QgX19sb2NhbCBkb3VibGUzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGRvdWJsZTQgKmRzdCwgY29uc3QgX19sb2NhbCBkb3VibGU0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGRvdWJsZTggKmRzdCwgY29uc3QgX19sb2NhbCBkb3VibGU4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGRvdWJsZTE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlMTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgorZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBoYWxmICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBoYWxmMiAqZHN0LCBjb25zdCBfX2dsb2JhbCBoYWxmMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGhhbGYzICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGhhbGYzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgaGFsZjQgKmRzdCwgY29uc3QgX19nbG9iYWwgaGFsZjQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBoYWxmOCAqZHN0LCBjb25zdCBfX2dsb2JhbCBoYWxmOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGhhbGYxNiAqZHN0LCBjb25zdCBfX2dsb2JhbCBoYWxmMTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgaGFsZiAqZHN0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgaGFsZjIgKmRzdCwgY29uc3QgX19sb2NhbCBoYWxmMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBoYWxmMyAqZHN0LCBjb25zdCBfX2xvY2FsIGhhbGYzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGhhbGY0ICpkc3QsIGNvbnN0IF9fbG9jYWwgaGFsZjQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgaGFsZjggKmRzdCwgY29uc3QgX19sb2NhbCBoYWxmOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBoYWxmMTYgKmRzdCwgY29uc3QgX19sb2NhbCBoYWxmMTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBXYWl0IGZvciBldmVudHMgdGhhdCBpZGVudGlmeSB0aGUKKyAqIGFzeW5jX3dvcmtfZ3JvdXBfY29weSBvcGVyYXRpb25zIHRvCisgKiBjb21wbGV0ZS4gVGhlIGV2ZW50IG9iamVjdHMgc3BlY2lmaWVkIGluCisgKiBldmVudF9saXN0IHdpbGwgYmUgcmVsZWFzZWQgYWZ0ZXIgdGhlIHdhaXQgaXMKKyAqIHBlcmZvcm1lZC4KKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBlbmNvdW50ZXJlZCBieSBhbGwgd29ya2l0ZW1zCisgKiBpbiBhIHdvcmstZ3JvdXAgZXhlY3V0aW5nIHRoZSBrZXJuZWwgd2l0aAorICogdGhlIHNhbWUgbnVtX2V2ZW50cyBhbmQgZXZlbnQgb2JqZWN0cyBzcGVjaWZpZWQKKyAqIGluIGV2ZW50X2xpc3Q7IG90aGVyd2lzZSB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLgorICovCit2b2lkIF9fb3ZsZCB3YWl0X2dyb3VwX2V2ZW50cyhpbnQgbnVtX2V2ZW50cywgZXZlbnRfdCAqZXZlbnRfbGlzdCk7CisKKy8qKgorICogUHJlZmV0Y2ggbnVtX2VsZW1lbnRzICogc2l6ZW9mKGdlbnR5cGUpCisgKiBieXRlcyBpbnRvIHRoZSBnbG9iYWwgY2FjaGUuIFRoZSBwcmVmZXRjaAorICogaW5zdHJ1Y3Rpb24gaXMgYXBwbGllZCB0byBhIHdvcmstaXRlbSBpbiBhIHdvcmtncm91cAorICogYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgZnVuY3Rpb25hbAorICogYmVoYXZpb3Igb2YgdGhlIGtlcm5lbC4KKyAqLwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgY2hhciAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1Y2hhciAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBzaG9ydCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1c2hvcnQgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgaW50ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVpbnQgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgbG9uZyAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1bG9uZyAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBmbG9hdCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBjaGFyMiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1Y2hhcjIgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgc2hvcnQyICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDIgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgaW50MiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1aW50MiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBsb25nMiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1bG9uZzIgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgZmxvYXQyICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGNoYXIzICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVjaGFyMyAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBzaG9ydDMgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdXNob3J0MyAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBpbnQzICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVpbnQzICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGxvbmczICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVsb25nMyAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBmbG9hdDMgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgY2hhcjQgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWNoYXI0ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHNob3J0NCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1c2hvcnQ0ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGludDQgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWludDQgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgbG9uZzQgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWxvbmc0ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGZsb2F0NCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBjaGFyOCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1Y2hhcjggKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgc2hvcnQ4ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDggKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgaW50OCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1aW50OCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBsb25nOCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1bG9uZzggKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgZmxvYXQ4ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGNoYXIxNiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1Y2hhcjE2ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHNob3J0MTYgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdXNob3J0MTYgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgaW50MTYgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWludDE2ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGxvbmcxNiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1bG9uZzE2ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGZsb2F0MTYgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOworI2lmZGVmIGNsX2tocl9mcDY0Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBkb3VibGUgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgZG91YmxlMiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBkb3VibGUzICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGRvdWJsZTQgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgZG91YmxlOCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBkb3VibGUxNiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBoYWxmICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGhhbGYyICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGhhbGYzICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGhhbGY0ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGhhbGY4ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGhhbGYxNiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7CisjZW5kaWYgLy8gY2xfa2hyX2ZwMTYKKworLy8gT3BlbkNMIHYxLjEgczYuMTEuMSwgdjEuMiBzNi4xMi4xMSAtIEF0b21pYyBGdW5jdGlvbnMKKworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcykgJiYgZGVmaW5lZChjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcykKKyNwcmFnbWEgT1BFTkNMIEVYVEVOU0lPTiBjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzIDogZW5hYmxlCisjcHJhZ21hIE9QRU5DTCBFWFRFTlNJT04gY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MgOiBlbmFibGUKKyNlbmRpZgorLyoqCisgKiBSZWFkIHRoZSAzMi1iaXQgdmFsdWUgKHJlZmVycmVkIHRvIGFzIG9sZCkKKyAqIHN0b3JlZCBhdCBsb2NhdGlvbiBwb2ludGVkIGJ5IHAuIENvbXB1dGUKKyAqIChvbGQgKyB2YWwpIGFuZCBzdG9yZSByZXN1bHQgYXQgbG9jYXRpb24KKyAqIHBvaW50ZWQgYnkgcC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgb2xkLgorICovCitpbnQgX19vdmxkIGF0b21pY19hZGQodm9sYXRpbGUgX19nbG9iYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX2FkZCh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworaW50IF9fb3ZsZCBhdG9taWNfYWRkKHZvbGF0aWxlIF9fbG9jYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX2FkZCh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisKKyNpZiBkZWZpbmVkKGNsX2tocl9nbG9iYWxfaW50MzJfYmFzZV9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX2FkZCh2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX2FkZCh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworI2VuZGlmCisjaWYgZGVmaW5lZChjbF9raHJfbG9jYWxfaW50MzJfYmFzZV9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX2FkZCh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fYWRkKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKQorbG9uZyBfX292bGQgYXRvbV9hZGQodm9sYXRpbGUgX19nbG9iYWwgbG9uZyAqcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9hZGQodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyB2YWwpOworbG9uZyBfX292bGQgYXRvbV9hZGQodm9sYXRpbGUgX19sb2NhbCBsb25nICpwLCBsb25nIHZhbCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX2FkZCh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKKyNlbmRpZgorCisvKioKKyAqIFJlYWQgdGhlIDMyLWJpdCB2YWx1ZSAocmVmZXJyZWQgdG8gYXMgb2xkKSBzdG9yZWQgYXQgbG9jYXRpb24gcG9pbnRlZCBieSBwLgorICogQ29tcHV0ZSAob2xkIC0gdmFsKSBhbmQgc3RvcmUgcmVzdWx0IGF0IGxvY2F0aW9uIHBvaW50ZWQgYnkgcC4gVGhlIGZ1bmN0aW9uCisgKiByZXR1cm5zIG9sZC4KKyAqLworaW50IF9fb3ZsZCBhdG9taWNfc3ViKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19zdWIodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKK2ludCBfX292bGQgYXRvbWljX3N1Yih2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19zdWIodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworCisjaWYgZGVmaW5lZChjbF9raHJfZ2xvYmFsX2ludDMyX2Jhc2VfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV9zdWIodm9sYXRpbGUgX19nbG9iYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV9zdWIodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoY2xfa2hyX2xvY2FsX2ludDMyX2Jhc2VfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV9zdWIodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX3N1Yih2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcykKK2xvbmcgX19vdmxkIGF0b21fc3ViKHZvbGF0aWxlIF9fZ2xvYmFsIGxvbmcgKnAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fc3ViKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2xvbmcgX19vdmxkIGF0b21fc3ViKHZvbGF0aWxlIF9fbG9jYWwgbG9uZyAqcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9zdWIodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIHZhbCk7CisjZW5kaWYKKworLyoqCisgKiBTd2FwcyB0aGUgb2xkIHZhbHVlIHN0b3JlZCBhdCBsb2NhdGlvbiBwCisgKiB3aXRoIG5ldyB2YWx1ZSBnaXZlbiBieSB2YWwuIFJldHVybnMgb2xkCisgKiB2YWx1ZS4KKyAqLworaW50IF9fb3ZsZCBhdG9taWNfeGNoZyh2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfeGNoZyh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworaW50IF9fb3ZsZCBhdG9taWNfeGNoZyh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY194Y2hnKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKK2Zsb2F0IF9fb3ZsZCBhdG9taWNfeGNoZyh2b2xhdGlsZSBfX2dsb2JhbCBmbG9hdCAqcCwgZmxvYXQgdmFsKTsKK2Zsb2F0IF9fb3ZsZCBhdG9taWNfeGNoZyh2b2xhdGlsZSBfX2xvY2FsIGZsb2F0ICpwLCBmbG9hdCB2YWwpOworCisjaWYgZGVmaW5lZChjbF9raHJfZ2xvYmFsX2ludDMyX2Jhc2VfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV94Y2hnKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7CitpbnQgX19vdmxkIGF0b21feGNoZyh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKGNsX2tocl9sb2NhbF9pbnQzMl9iYXNlX2F0b21pY3MpCit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21feGNoZyh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX3hjaGcodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MpCitsb25nIF9fb3ZsZCBhdG9tX3hjaGcodm9sYXRpbGUgX19nbG9iYWwgbG9uZyAqcCwgbG9uZyB2YWwpOworbG9uZyBfX292bGQgYXRvbV94Y2hnKHZvbGF0aWxlIF9fbG9jYWwgbG9uZyAqcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV94Y2hnKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21feGNoZyh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKKyNlbmRpZgorCisvKioKKyAqIFJlYWQgdGhlIDMyLWJpdCB2YWx1ZSAocmVmZXJyZWQgdG8gYXMgb2xkKQorICogc3RvcmVkIGF0IGxvY2F0aW9uIHBvaW50ZWQgYnkgcC4gQ29tcHV0ZQorICogKG9sZCArIDEpIGFuZCBzdG9yZSByZXN1bHQgYXQgbG9jYXRpb24KKyAqIHBvaW50ZWQgYnkgcC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgb2xkLgorICovCitpbnQgX19vdmxkIGF0b21pY19pbmModm9sYXRpbGUgX19nbG9iYWwgaW50ICpwKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX2luYyh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnApOworaW50IF9fb3ZsZCBhdG9taWNfaW5jKHZvbGF0aWxlIF9fbG9jYWwgaW50ICpwKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX2luYyh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCk7CisKKyNpZiBkZWZpbmVkKGNsX2tocl9nbG9iYWxfaW50MzJfYmFzZV9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX2luYyh2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnApOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX2luYyh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnApOworI2VuZGlmCisjaWYgZGVmaW5lZChjbF9raHJfbG9jYWxfaW50MzJfYmFzZV9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX2luYyh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21faW5jKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKQorbG9uZyBfX292bGQgYXRvbV9pbmModm9sYXRpbGUgX19nbG9iYWwgbG9uZyAqcCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX2luYyh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBsb25nICpwKTsKK2xvbmcgX19vdmxkIGF0b21faW5jKHZvbGF0aWxlIF9fbG9jYWwgbG9uZyAqcCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX2luYyh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGxvbmcgKnApOworI2VuZGlmCisKKy8qKgorICogUmVhZCB0aGUgMzItYml0IHZhbHVlIChyZWZlcnJlZCB0byBhcyBvbGQpCisgKiBzdG9yZWQgYXQgbG9jYXRpb24gcG9pbnRlZCBieSBwLiBDb21wdXRlCisgKiAob2xkIC0gMSkgYW5kIHN0b3JlIHJlc3VsdCBhdCBsb2NhdGlvbgorICogcG9pbnRlZCBieSBwLiBUaGUgZnVuY3Rpb24gcmV0dXJucyBvbGQuCisgKi8KK2ludCBfX292bGQgYXRvbWljX2RlYyh2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnApOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfZGVjKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCk7CitpbnQgX19vdmxkIGF0b21pY19kZWModm9sYXRpbGUgX19sb2NhbCBpbnQgKnApOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfZGVjKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwKTsKKworI2lmIGRlZmluZWQoY2xfa2hyX2dsb2JhbF9pbnQzMl9iYXNlX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fZGVjKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fZGVjKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKGNsX2tocl9sb2NhbF9pbnQzMl9iYXNlX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fZGVjKHZvbGF0aWxlIF9fbG9jYWwgaW50ICpwKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV9kZWModm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MpCitsb25nIF9fb3ZsZCBhdG9tX2RlYyh2b2xhdGlsZSBfX2dsb2JhbCBsb25nICpwKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fZGVjKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGxvbmcgKnApOworbG9uZyBfX292bGQgYXRvbV9kZWModm9sYXRpbGUgX19sb2NhbCBsb25nICpwKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fZGVjKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgbG9uZyAqcCk7CisjZW5kaWYKKworLyoqCisgKiBSZWFkIHRoZSAzMi1iaXQgdmFsdWUgKHJlZmVycmVkIHRvIGFzIG9sZCkKKyAqIHN0b3JlZCBhdCBsb2NhdGlvbiBwb2ludGVkIGJ5IHAuIENvbXB1dGUKKyAqIChvbGQgPT0gY21wKSA/IHZhbCA6IG9sZCBhbmQgc3RvcmUgcmVzdWx0IGF0CisgKiBsb2NhdGlvbiBwb2ludGVkIGJ5IHAuIFRoZSBmdW5jdGlvbgorICogcmV0dXJucyBvbGQuCisgKi8KK2ludCBfX292bGQgYXRvbWljX2NtcHhjaGcodm9sYXRpbGUgX19nbG9iYWwgaW50ICpwLCBpbnQgY21wLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX2NtcHhjaGcodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgY21wLCB1bnNpZ25lZCBpbnQgdmFsKTsKK2ludCBfX292bGQgYXRvbWljX2NtcHhjaGcodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCBjbXAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfY21weGNoZyh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IGNtcCwgdW5zaWduZWQgaW50IHZhbCk7CisKKyNpZiBkZWZpbmVkKGNsX2tocl9nbG9iYWxfaW50MzJfYmFzZV9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX2NtcHhjaGcodm9sYXRpbGUgX19nbG9iYWwgaW50ICpwLCBpbnQgY21wLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV9jbXB4Y2hnKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IGNtcCwgdW5zaWduZWQgaW50IHZhbCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKGNsX2tocl9sb2NhbF9pbnQzMl9iYXNlX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fY21weGNoZyh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IGNtcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fY21weGNoZyh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IGNtcCwgdW5zaWduZWQgaW50IHZhbCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcykKK2xvbmcgX19vdmxkIGF0b21fY21weGNoZyh2b2xhdGlsZSBfX2dsb2JhbCBsb25nICpwLCBsb25nIGNtcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9jbXB4Y2hnKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgY21wLCB1bnNpZ25lZCBsb25nIHZhbCk7Citsb25nIF9fb3ZsZCBhdG9tX2NtcHhjaGcodm9sYXRpbGUgX19sb2NhbCBsb25nICpwLCBsb25nIGNtcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9jbXB4Y2hnKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyBjbXAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKKyNlbmRpZgorCisvKioKKyAqIFJlYWQgdGhlIDMyLWJpdCB2YWx1ZSAocmVmZXJyZWQgdG8gYXMgb2xkKQorICogc3RvcmVkIGF0IGxvY2F0aW9uIHBvaW50ZWQgYnkgcC4gQ29tcHV0ZQorICogbWluKG9sZCwgdmFsKSBhbmQgc3RvcmUgbWluaW11bSB2YWx1ZSBhdAorICogbG9jYXRpb24gcG9pbnRlZCBieSBwLiBUaGUgZnVuY3Rpb24KKyAqIHJldHVybnMgb2xkLgorICovCitpbnQgX19vdmxkIGF0b21pY19taW4odm9sYXRpbGUgX19nbG9iYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX21pbih2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworaW50IF9fb3ZsZCBhdG9taWNfbWluKHZvbGF0aWxlIF9fbG9jYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX21pbih2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisKKyNpZiBkZWZpbmVkKGNsX2tocl9nbG9iYWxfaW50MzJfZXh0ZW5kZWRfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV9taW4odm9sYXRpbGUgX19nbG9iYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV9taW4odm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoY2xfa2hyX2xvY2FsX2ludDMyX2V4dGVuZGVkX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fbWluKHZvbGF0aWxlIF9fbG9jYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV9taW4odm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzKQorbG9uZyBfX292bGQgYXRvbV9taW4odm9sYXRpbGUgX19nbG9iYWwgbG9uZyAqcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9taW4odm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyB2YWwpOworI2VuZGlmCisjaWYgZGVmaW5lZChjbF9raHJfbG9jYWxfaW50MzJfZXh0ZW5kZWRfYXRvbWljcykKK2xvbmcgX19vdmxkIGF0b21fbWluKHZvbGF0aWxlIF9fbG9jYWwgbG9uZyAqcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9taW4odm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIHZhbCk7CisjZW5kaWYKKworLyoqCisgKiBSZWFkIHRoZSAzMi1iaXQgdmFsdWUgKHJlZmVycmVkIHRvIGFzIG9sZCkKKyAqIHN0b3JlZCBhdCBsb2NhdGlvbiBwb2ludGVkIGJ5IHAuIENvbXB1dGUKKyAqIG1heChvbGQsIHZhbCkgYW5kIHN0b3JlIG1heGltdW0gdmFsdWUgYXQKKyAqIGxvY2F0aW9uIHBvaW50ZWQgYnkgcC4gVGhlIGZ1bmN0aW9uCisgKiByZXR1cm5zIG9sZC4KKyAqLworaW50IF9fb3ZsZCBhdG9taWNfbWF4KHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19tYXgodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKK2ludCBfX292bGQgYXRvbWljX21heCh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19tYXgodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworCisjaWYgZGVmaW5lZChjbF9raHJfZ2xvYmFsX2ludDMyX2V4dGVuZGVkX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fbWF4KHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fbWF4KHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKGNsX2tocl9sb2NhbF9pbnQzMl9leHRlbmRlZF9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX21heCh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fbWF4KHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcykKK2xvbmcgX19vdmxkIGF0b21fbWF4KHZvbGF0aWxlIF9fZ2xvYmFsIGxvbmcgKnAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fbWF4KHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2xvbmcgX19vdmxkIGF0b21fbWF4KHZvbGF0aWxlIF9fbG9jYWwgbG9uZyAqcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9tYXgodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIHZhbCk7CisjZW5kaWYKKworLyoqCisgKiBSZWFkIHRoZSAzMi1iaXQgdmFsdWUgKHJlZmVycmVkIHRvIGFzIG9sZCkKKyAqIHN0b3JlZCBhdCBsb2NhdGlvbiBwb2ludGVkIGJ5IHAuIENvbXB1dGUKKyAqIChvbGQgJiB2YWwpIGFuZCBzdG9yZSByZXN1bHQgYXQgbG9jYXRpb24KKyAqIHBvaW50ZWQgYnkgcC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgb2xkLgorICovCitpbnQgX19vdmxkIGF0b21pY19hbmQodm9sYXRpbGUgX19nbG9iYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX2FuZCh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworaW50IF9fb3ZsZCBhdG9taWNfYW5kKHZvbGF0aWxlIF9fbG9jYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX2FuZCh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisKKyNpZiBkZWZpbmVkKGNsX2tocl9nbG9iYWxfaW50MzJfZXh0ZW5kZWRfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV9hbmQodm9sYXRpbGUgX19nbG9iYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV9hbmQodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoY2xfa2hyX2xvY2FsX2ludDMyX2V4dGVuZGVkX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fYW5kKHZvbGF0aWxlIF9fbG9jYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV9hbmQodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzKQorbG9uZyBfX292bGQgYXRvbV9hbmQodm9sYXRpbGUgX19nbG9iYWwgbG9uZyAqcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9hbmQodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyB2YWwpOworbG9uZyBfX292bGQgYXRvbV9hbmQodm9sYXRpbGUgX19sb2NhbCBsb25nICpwLCBsb25nIHZhbCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX2FuZCh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKKyNlbmRpZgorCisvKioKKyAqIFJlYWQgdGhlIDMyLWJpdCB2YWx1ZSAocmVmZXJyZWQgdG8gYXMgb2xkKQorICogc3RvcmVkIGF0IGxvY2F0aW9uIHBvaW50ZWQgYnkgcC4gQ29tcHV0ZQorICogKG9sZCB8IHZhbCkgYW5kIHN0b3JlIHJlc3VsdCBhdCBsb2NhdGlvbgorICogcG9pbnRlZCBieSBwLiBUaGUgZnVuY3Rpb24gcmV0dXJucyBvbGQuCisgKi8KK2ludCBfX292bGQgYXRvbWljX29yKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19vcih2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworaW50IF9fb3ZsZCBhdG9taWNfb3Iodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfb3Iodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworCisjaWYgZGVmaW5lZChjbF9raHJfZ2xvYmFsX2ludDMyX2V4dGVuZGVkX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fb3Iodm9sYXRpbGUgX19nbG9iYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV9vcih2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworI2VuZGlmCisjaWYgZGVmaW5lZChjbF9raHJfbG9jYWxfaW50MzJfZXh0ZW5kZWRfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV9vcih2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fb3Iodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzKQorbG9uZyBfX292bGQgYXRvbV9vcih2b2xhdGlsZSBfX2dsb2JhbCBsb25nICpwLCBsb25nIHZhbCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX29yKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2xvbmcgX19vdmxkIGF0b21fb3Iodm9sYXRpbGUgX19sb2NhbCBsb25nICpwLCBsb25nIHZhbCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX29yKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyB2YWwpOworI2VuZGlmCisKKy8qKgorICogUmVhZCB0aGUgMzItYml0IHZhbHVlIChyZWZlcnJlZCB0byBhcyBvbGQpCisgKiBzdG9yZWQgYXQgbG9jYXRpb24gcG9pbnRlZCBieSBwLiBDb21wdXRlCisgKiAob2xkIF4gdmFsKSBhbmQgc3RvcmUgcmVzdWx0IGF0IGxvY2F0aW9uCisgKiBwb2ludGVkIGJ5IHAuIFRoZSBmdW5jdGlvbiByZXR1cm5zIG9sZC4KKyAqLworaW50IF9fb3ZsZCBhdG9taWNfeG9yKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY194b3Iodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKK2ludCBfX292bGQgYXRvbWljX3hvcih2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY194b3Iodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworCisjaWYgZGVmaW5lZChjbF9raHJfZ2xvYmFsX2ludDMyX2V4dGVuZGVkX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21feG9yKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21feG9yKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKGNsX2tocl9sb2NhbF9pbnQzMl9leHRlbmRlZF9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX3hvcih2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21feG9yKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKSAmJiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzKQorI3ByYWdtYSBPUEVOQ0wgRVhURU5TSU9OIGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MgOiBkaXNhYmxlCisjcHJhZ21hIE9QRU5DTCBFWFRFTlNJT04gY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MgOiBkaXNhYmxlCisjZW5kaWYKKworLy8gT3BlbkNMIHYyLjAgczYuMTMuMTEgLSBBdG9taWNzIEZ1bmN0aW9ucworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKyNpZm5kZWYgQVRPTUlDX1ZBUl9JTklUCisjZGVmaW5lIEFUT01JQ19WQVJfSU5JVCh4KSAoeCkKKyNlbmRpZiAvL0FUT01JQ19WQVJfSU5JVAorI2RlZmluZSBBVE9NSUNfRkxBR19JTklUIDAKKworLy8gZW51bSB2YWx1ZXMgYWxpZ25lZCB3aXRoIHdoYXQgY2xhbmcgdXNlcyBpbiBFbWl0QXRvbWljRXhwcigpCit0eXBlZGVmIGVudW0gbWVtb3J5X29yZGVyCit7CisgIG1lbW9yeV9vcmRlcl9yZWxheGVkLAorICBtZW1vcnlfb3JkZXJfYWNxdWlyZSwKKyAgbWVtb3J5X29yZGVyX3JlbGVhc2UsCisgIG1lbW9yeV9vcmRlcl9hY3FfcmVsLAorICBtZW1vcnlfb3JkZXJfc2VxX2NzdAorfSBtZW1vcnlfb3JkZXI7CisKKy8vIGRvdWJsZSBhdG9taWNzIHN1cHBvcnQgcmVxdWlyZXMgZXh0ZW5zaW9ucyBjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzIGFuZCBjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcykgJiYgZGVmaW5lZChjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcykKKyNwcmFnbWEgT1BFTkNMIEVYVEVOU0lPTiBjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzIDogZW5hYmxlCisjcHJhZ21hIE9QRU5DTCBFWFRFTlNJT04gY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MgOiBlbmFibGUKKyNlbmRpZgorCisvLyBhdG9taWNfaW5pdCgpCit2b2lkIF9fb3ZsZCBhdG9taWNfaW5pdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCB2YWx1ZSk7Cit2b2lkIF9fb3ZsZCBhdG9taWNfaW5pdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IHZhbHVlKTsKK3ZvaWQgX19vdmxkIGF0b21pY19pbml0KHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCB2YWx1ZSk7CisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKSAmJiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzKQordm9pZCBfX292bGQgYXRvbWljX2luaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyB2YWx1ZSk7Cit2b2lkIF9fb3ZsZCBhdG9taWNfaW5pdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgdmFsdWUpOworI2lmZGVmIGNsX2tocl9mcDY0Cit2b2lkIF9fb3ZsZCBhdG9taWNfaW5pdCh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIGRvdWJsZSB2YWx1ZSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2VuZGlmCisKKy8vIGF0b21pY193b3JrX2l0ZW1fZmVuY2UoKQordm9pZCBfX292bGQgYXRvbWljX3dvcmtfaXRlbV9mZW5jZShjbF9tZW1fZmVuY2VfZmxhZ3MgZmxhZ3MsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKworLy8gYXRvbWljX2ZldGNoKCkKKworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYWRkKHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX2FkZCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfc3ViKHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX3N1Yih2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3Iodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX29yKHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yKHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX3hvcih2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kKHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX2FuZCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluKHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9taW5fZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX21pbih2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX21pbl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX21pbih2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX21pbl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQpOworaW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9tYXhfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX21heCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX21heF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX21heCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWludCBfX292bGQgYXRvbWljX2ZldGNoX21heF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKSAmJiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzKQorbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX2FkZCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9hZGQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX3N1Yih2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9zdWIodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX29yKHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9vcih2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX3hvcih2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF94b3Iodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX2FuZCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9hbmQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21pbih2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21pbl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9taW4odm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9taW5fZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21pbl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9taW4odm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21pbl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9taW5fZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21heCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQpOworbG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21heF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9tYXgodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9tYXhfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21heF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9tYXgodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21heF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWxvbmcgX19vdmxkIGF0b21pY19mZXRjaF9tYXhfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworI2VuZGlmIC8vZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKSAmJiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzKQorCisvLyBPcGVuQ0wgdjIuMCBzNi4xMy4xMS43LjU6CisvLyBhZGQvc3ViOiBhdG9taWMgdHlwZSBhcmd1bWVudCBjYW4gYmUgdWludHB0cl90L2ludHB0cl90LCB2YWx1ZSB0eXBlIGFyZ3VtZW50IGNhbiBiZSBwdHJkaWZmX3QuCisvLyBvci94b3IvYW5kL21pbi9tYXg6IGF0b21pYyB0eXBlIGFyZ3VtZW50IGNhbiBiZSBpbnRwdHJfdC91aW50cHRyX3QsIHZhbHVlIHR5cGUgYXJndW1lbnQgY2FuIGJlIGludHB0cl90L3VpbnRwdHJfdC4KKworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcykgJiYgZGVmaW5lZChjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcykgCit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9hZGQodm9sYXRpbGUgYXRvbWljX3VpbnRwdHJfdCAqb2JqZWN0LCBwdHJkaWZmX3Qgb3BlcmFuZCk7Cit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnRwdHJfdCAqb2JqZWN0LCBwdHJkaWZmX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIHB0cmRpZmZfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9zdWIodm9sYXRpbGUgYXRvbWljX3VpbnRwdHJfdCAqb2JqZWN0LCBwdHJkaWZmX3Qgb3BlcmFuZCk7Cit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnRwdHJfdCAqb2JqZWN0LCBwdHJkaWZmX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIHB0cmRpZmZfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CisKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX29yKHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3BlcmFuZCk7Cit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIGludHB0cl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIGludHB0cl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX3hvcih2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIGludHB0cl90IG9wZXJhbmQpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIGludHB0cl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX2FuZCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIGludHB0cl90IG9wZXJhbmQpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIGludHB0cl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX21pbih2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIGludHB0cl90IG9wZXJtYXgpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3Blcm1heCwgbWVtb3J5X29yZGVyIG1pbmRlcik7Cit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9taW5fZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnRwdHJfdCAqb2JqZWN0LCBpbnRwdHJfdCBvcGVybWF4LCBtZW1vcnlfb3JkZXIgbWluZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4KHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3Blcm1heCk7Cit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9tYXhfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnRwdHJfdCAqb2JqZWN0LCBpbnRwdHJfdCBvcGVybWF4LCBtZW1vcnlfb3JkZXIgbWluZGVyKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX21heF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIGludHB0cl90IG9wZXJtYXgsIG1lbW9yeV9vcmRlciBtaW5kZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CisKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3Iodm9sYXRpbGUgYXRvbWljX2ludHB0cl90ICpvYmplY3QsIHVpbnRwdHJfdCBvcGVyYW5kKTsKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludHB0cl90ICpvYmplY3QsIHVpbnRwdHJfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOworaW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50cHRyX3QgKm9iamVjdCwgdWludHB0cl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yKHZvbGF0aWxlIGF0b21pY19pbnRwdHJfdCAqb2JqZWN0LCB1aW50cHRyX3Qgb3BlcmFuZCk7CitpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50cHRyX3QgKm9iamVjdCwgdWludHB0cl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50cHRyX3QgKm9iamVjdCwgdWludHB0cl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kKHZvbGF0aWxlIGF0b21pY19pbnRwdHJfdCAqb2JqZWN0LCB1aW50cHRyX3Qgb3BlcmFuZCk7CitpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50cHRyX3QgKm9iamVjdCwgdWludHB0cl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50cHRyX3QgKm9iamVjdCwgdWludHB0cl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluKHZvbGF0aWxlIGF0b21pY19pbnRwdHJfdCAqb2JqZWN0LCB1aW50cHRyX3Qgb3Blcm1heCk7CitpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX21pbl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50cHRyX3QgKm9iamVjdCwgdWludHB0cl90IG9wZXJtYXgsIG1lbW9yeV9vcmRlciBtaW5kZXIpOworaW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9taW5fZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludHB0cl90ICpvYmplY3QsIHVpbnRwdHJfdCBvcGVybWF4LCBtZW1vcnlfb3JkZXIgbWluZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworaW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9tYXgodm9sYXRpbGUgYXRvbWljX2ludHB0cl90ICpvYmplY3QsIHVpbnRwdHJfdCBvcGVybWF4KTsKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnRwdHJfdCAqb2JqZWN0LCB1aW50cHRyX3Qgb3Blcm1heCwgbWVtb3J5X29yZGVyIG1pbmRlcik7CitpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX21heF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50cHRyX3QgKm9iamVjdCwgdWludHB0cl90IG9wZXJtYXgsIG1lbW9yeV9vcmRlciBtaW5kZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CisjZW5kaWYKKworLy8gYXRvbWljX3N0b3JlKCkKKwordm9pZCBfX292bGQgYXRvbWljX3N0b3JlKHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IGRlc2lyZWQpOwordm9pZCBfX292bGQgYXRvbWljX3N0b3JlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmVfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordm9pZCBfX292bGQgYXRvbWljX3N0b3JlKHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgZGVzaXJlZCk7Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmVfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordm9pZCBfX292bGQgYXRvbWljX3N0b3JlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordm9pZCBfX292bGQgYXRvbWljX3N0b3JlKHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCBkZXNpcmVkKTsKK3ZvaWQgX19vdmxkIGF0b21pY19zdG9yZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxvYXQgKm9iamVjdCwgZmxvYXQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3ZvaWQgX19vdmxkIGF0b21pY19zdG9yZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxvYXQgKm9iamVjdCwgZmxvYXQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcykgJiYgZGVmaW5lZChjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcykKKyNpZmRlZiBjbF9raHJfZnA2NAordm9pZCBfX292bGQgYXRvbWljX3N0b3JlKHZvbGF0aWxlIGF0b21pY19kb3VibGUgKm9iamVjdCwgZG91YmxlIGRlc2lyZWQpOwordm9pZCBfX292bGQgYXRvbWljX3N0b3JlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19kb3VibGUgKm9iamVjdCwgZG91YmxlIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmVfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2RvdWJsZSAqb2JqZWN0LCBkb3VibGUgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKK3ZvaWQgX19vdmxkIGF0b21pY19zdG9yZSh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIGRlc2lyZWQpOwordm9pZCBfX292bGQgYXRvbWljX3N0b3JlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3ZvaWQgX19vdmxkIGF0b21pY19zdG9yZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK3ZvaWQgX19vdmxkIGF0b21pY19zdG9yZSh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgZGVzaXJlZCk7Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmVfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmVfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKyNlbmRpZgorCisvLyBhdG9taWNfbG9hZCgpCisKK2ludCBfX292bGQgYXRvbWljX2xvYWQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0KTsKK2ludCBfX292bGQgYXRvbWljX2xvYWRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBtZW1vcnlfb3JkZXIgb3JkZXIpOworaW50IF9fb3ZsZCBhdG9taWNfbG9hZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK3VpbnQgX19vdmxkIGF0b21pY19sb2FkKHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QpOwordWludCBfX292bGQgYXRvbWljX2xvYWRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnQgX19vdmxkIGF0b21pY19sb2FkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK2Zsb2F0IF9fb3ZsZCBhdG9taWNfbG9hZCh2b2xhdGlsZSBhdG9taWNfZmxvYXQgKm9iamVjdCk7CitmbG9hdCBfX292bGQgYXRvbWljX2xvYWRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2Zsb2F0ICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlcik7CitmbG9hdCBfX292bGQgYXRvbWljX2xvYWRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2Zsb2F0ICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MpICYmIGRlZmluZWQoY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MpCisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgYXRvbWljX2xvYWQodm9sYXRpbGUgYXRvbWljX2RvdWJsZSAqb2JqZWN0KTsKK2RvdWJsZSBfX292bGQgYXRvbWljX2xvYWRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2RvdWJsZSAqb2JqZWN0LCBtZW1vcnlfb3JkZXIgb3JkZXIpOworZG91YmxlIF9fb3ZsZCBhdG9taWNfbG9hZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0Citsb25nIF9fb3ZsZCBhdG9taWNfbG9hZCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0KTsKK2xvbmcgX19vdmxkIGF0b21pY19sb2FkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlcik7Citsb25nIF9fb3ZsZCBhdG9taWNfbG9hZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1bG9uZyBfX292bGQgYXRvbWljX2xvYWQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QpOwordWxvbmcgX19vdmxkIGF0b21pY19sb2FkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWxvbmcgX19vdmxkIGF0b21pY19sb2FkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CisjZW5kaWYKKworLy8gYXRvbWljX2V4Y2hhbmdlKCkKKworaW50IF9fb3ZsZCBhdG9taWNfZXhjaGFuZ2Uodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgZGVzaXJlZCk7CitpbnQgX19vdmxkIGF0b21pY19leGNoYW5nZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIpOworaW50IF9fb3ZsZCBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludCBfX292bGQgYXRvbWljX2V4Y2hhbmdlKHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgZGVzaXJlZCk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWludCBfX292bGQgYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworZmxvYXQgX19vdmxkIGF0b21pY19leGNoYW5nZSh2b2xhdGlsZSBhdG9taWNfZmxvYXQgKm9iamVjdCwgZmxvYXQgZGVzaXJlZCk7CitmbG9hdCBfX292bGQgYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIpOworZmxvYXQgX19vdmxkIGF0b21pY19leGNoYW5nZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxvYXQgKm9iamVjdCwgZmxvYXQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcykgJiYgZGVmaW5lZChjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcykKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBhdG9taWNfZXhjaGFuZ2Uodm9sYXRpbGUgYXRvbWljX2RvdWJsZSAqb2JqZWN0LCBkb3VibGUgZGVzaXJlZCk7Citkb3VibGUgX19vdmxkIGF0b21pY19leGNoYW5nZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIGRvdWJsZSBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIpOworZG91YmxlIF9fb3ZsZCBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2RvdWJsZSAqb2JqZWN0LCBkb3VibGUgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKK2xvbmcgX19vdmxkIGF0b21pY19leGNoYW5nZSh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIGRlc2lyZWQpOworbG9uZyBfX292bGQgYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2xvbmcgX19vdmxkIGF0b21pY19leGNoYW5nZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfZXhjaGFuZ2Uodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIGRlc2lyZWQpOwordWxvbmcgX19vdmxkIGF0b21pY19leGNoYW5nZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKyNlbmRpZgorCisvLyBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoKSBhbmQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhaygpCisKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCAqZXhwZWN0ZWQsIGludCBkZXNpcmVkKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgKmV4cGVjdGVkLCB1aW50IGRlc2lyZWQpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUsIG1lbW9yeV9zY29wZSBzY29wZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50ICpleHBlY3RlZCwgaW50IGRlc2lyZWQpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCAqZXhwZWN0ZWQsIHVpbnQgZGVzaXJlZCk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50ICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCAqZXhwZWN0ZWQsIGZsb2F0IGRlc2lyZWQpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUsIG1lbW9yeV9zY29wZSBzY29wZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCAqZXhwZWN0ZWQsIGZsb2F0IGRlc2lyZWQpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxvYXQgKm9iamVjdCwgZmxvYXQgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2Zsb2F0ICpvYmplY3QsIGZsb2F0ICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MpICYmIGRlZmluZWQoY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MpCisjaWZkZWYgY2xfa2hyX2ZwNjQKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIGRvdWJsZSAqZXhwZWN0ZWQsIGRvdWJsZSBkZXNpcmVkKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIGRvdWJsZSAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIGRvdWJsZSAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vhayh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIGRvdWJsZSAqZXhwZWN0ZWQsIGRvdWJsZSBkZXNpcmVkKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2RvdWJsZSAqb2JqZWN0LCBkb3VibGUgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19kb3VibGUgKm9iamVjdCwgZG91YmxlICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUsIG1lbW9yeV9zY29wZSBzY29wZSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgKmV4cGVjdGVkLCBsb25nIGRlc2lyZWQpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUsIG1lbW9yeV9zY29wZSBzY29wZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgKmV4cGVjdGVkLCBsb25nIGRlc2lyZWQpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgKmV4cGVjdGVkLCB1bG9uZyBkZXNpcmVkKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vhayh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgKmV4cGVjdGVkLCB1bG9uZyBkZXNpcmVkKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZyBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUsIG1lbW9yeV9zY29wZSBzY29wZSk7CisjZW5kaWYKKworLy8gYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0KCkgYW5kIGF0b21pY19mbGFnX2NsZWFyKCkKKworYm9vbCBfX292bGQgYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0KHZvbGF0aWxlIGF0b21pY19mbGFnICpvYmplY3QpOworYm9vbCBfX292bGQgYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbGFnICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlcik7Citib29sIF9fb3ZsZCBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ZsYWcgKm9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordm9pZCBfX292bGQgYXRvbWljX2ZsYWdfY2xlYXIodm9sYXRpbGUgYXRvbWljX2ZsYWcgKm9iamVjdCk7Cit2b2lkIF9fb3ZsZCBhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyAqb2JqZWN0LCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordm9pZCBfX292bGQgYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ZsYWcgKm9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworCisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvLyBPcGVuQ0wgdjEuMSBzNi4xMS4xMiwgdjEuMiBzNi4xMi4xMiwgdjIuMCBzNi4xMy4xMiAtIE1pc2NlbGxhbmVvdXMgVmVjdG9yIEZ1bmN0aW9ucworCisvKioKKyAqIFRoZSBzaHVmZmxlIGFuZCBzaHVmZmxlMiBidWlsdC1pbiBmdW5jdGlvbnMgY29uc3RydWN0CisgKiBhIHBlcm11dGF0aW9uIG9mIGVsZW1lbnRzIGZyb20gb25lIG9yIHR3byBpbnB1dAorICogdmVjdG9ycyByZXNwZWN0aXZlbHkgdGhhdCBhcmUgb2YgdGhlIHNhbWUgdHlwZSwKKyAqIHJldHVybmluZyBhIHZlY3RvciB3aXRoIHRoZSBzYW1lIGVsZW1lbnQgdHlwZSBhcyB0aGUKKyAqIGlucHV0IGFuZCBsZW5ndGggdGhhdCBpcyB0aGUgc2FtZSBhcyB0aGUgc2h1ZmZsZSBtYXNrLgorICogVGhlIHNpemUgb2YgZWFjaCBlbGVtZW50IGluIHRoZSBtYXNrIG11c3QgbWF0Y2ggdGhlCisgKiBzaXplIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgcmVzdWx0LiBGb3Igc2h1ZmZsZSwgb25seQorICogdGhlIGlsb2diKDJtLTEpIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgZWFjaCBtYXNrCisgKiBlbGVtZW50IGFyZSBjb25zaWRlcmVkLiBGb3Igc2h1ZmZsZTIsIG9ubHkgdGhlCisgKiBpbG9nYigybS0xKSsxIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgZWFjaCBtYXNrCisgKiBlbGVtZW50IGFyZSBjb25zaWRlcmVkLiBPdGhlciBiaXRzIGluIHRoZSBtYXNrIHNoYWxsCisgKiBiZSBpZ25vcmVkLgorICogVGhlIGVsZW1lbnRzIG9mIHRoZSBpbnB1dCB2ZWN0b3JzIGFyZSBudW1iZXJlZCBmcm9tCisgKiBsZWZ0IHRvIHJpZ2h0IGFjcm9zcyBvbmUgb3IgYm90aCBvZiB0aGUgdmVjdG9ycy4gRm9yIHRoaXMKKyAqIHB1cnBvc2UsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSB2ZWN0b3IgaXMgZ2l2ZW4KKyAqIGJ5IHZlY19zdGVwKGdlbnR5cGVtKS4gVGhlIHNodWZmbGUgbWFzayBvcGVyYW5kCisgKiBzcGVjaWZpZXMsIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIHJlc3VsdCB2ZWN0b3IsIHdoaWNoCisgKiBlbGVtZW50IG9mIHRoZSBvbmUgb3IgdHdvIGlucHV0IHZlY3RvcnMgdGhlIHJlc3VsdAorICogZWxlbWVudCBnZXRzLgorICogRXhhbXBsZXM6CisgKiB1aW50NCBtYXNrID0gKHVpbnQ0KSgzLCAyLAorICogMSwgMCk7CisgKiBmbG9hdDQgYTsKKyAqIGZsb2F0NCByID0gc2h1ZmZsZShhLCBtYXNrKTsKKyAqIC8vIHIuczAxMjMgPSBhLnd6eXgKKyAqIHVpbnQ4IG1hc2sgPSAodWludDgpKDAsIDEsIDIsIDMsCisgKiA0LCA1LCA2LCA3KTsKKyAqIGZsb2F0NCBhLCBiOworICogZmxvYXQ4IHIgPSBzaHVmZmxlMihhLCBiLCBtYXNrKTsKKyAqIC8vIHIuczAxMjMgPSBhLnh5encKKyAqIC8vIHIuczQ1NjcgPSBiLnh5encKKyAqIHVpbnQ0IG1hc2s7CisgKiBmbG9hdDggYTsKKyAqIGZsb2F0NCBiOworICogYiA9IHNodWZmbGUoYSwgbWFzayk7CisgKiBFeGFtcGxlcyB0aGF0IGFyZSBub3QgdmFsaWQgYXJlOgorICogdWludDggbWFzazsKKyAqIHNob3J0MTYgYTsKKyAqIHNob3J0OCBiOworICogYiA9IHNodWZmbGUoYSwgbWFzayk7IDwtIG5vdCB2YWxpZAorICovCitjaGFyMiBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjIgeCwgdWNoYXIyIG1hc2spOworY2hhcjIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGNoYXI0IHgsIHVjaGFyMiBtYXNrKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShjaGFyOCB4LCB1Y2hhcjIgbWFzayk7CitjaGFyMiBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjE2IHgsIHVjaGFyMiBtYXNrKTsKKwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjIgeCwgdWNoYXIyIG1hc2spOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjQgeCwgdWNoYXIyIG1hc2spOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjggeCwgdWNoYXIyIG1hc2spOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjE2IHgsIHVjaGFyMiBtYXNrKTsKKworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShzaG9ydDIgeCwgdXNob3J0MiBtYXNrKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNodWZmbGUoc2hvcnQ0IHgsIHVzaG9ydDIgbWFzayk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0OCB4LCB1c2hvcnQyIG1hc2spOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShzaG9ydDE2IHgsIHVzaG9ydDIgbWFzayk7CisKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDIgeCwgdXNob3J0MiBtYXNrKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDQgeCwgdXNob3J0MiBtYXNrKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDggeCwgdXNob3J0MiBtYXNrKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDE2IHgsIHVzaG9ydDIgbWFzayk7CisKK2ludDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDIgeCwgdWludDIgbWFzayk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShpbnQ0IHgsIHVpbnQyIG1hc2spOworaW50MiBfX292bGQgX19jbmZuIHNodWZmbGUoaW50OCB4LCB1aW50MiBtYXNrKTsKK2ludDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDE2IHgsIHVpbnQyIG1hc2spOworCit1aW50MiBfX292bGQgX19jbmZuIHNodWZmbGUodWludDIgeCwgdWludDIgbWFzayk7Cit1aW50MiBfX292bGQgX19jbmZuIHNodWZmbGUodWludDQgeCwgdWludDIgbWFzayk7Cit1aW50MiBfX292bGQgX19jbmZuIHNodWZmbGUodWludDggeCwgdWludDIgbWFzayk7Cit1aW50MiBfX292bGQgX19jbmZuIHNodWZmbGUodWludDE2IHgsIHVpbnQyIG1hc2spOworCitsb25nMiBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzIgeCwgdWxvbmcyIG1hc2spOworbG9uZzIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGxvbmc0IHgsIHVsb25nMiBtYXNrKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShsb25nOCB4LCB1bG9uZzIgbWFzayk7Citsb25nMiBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzE2IHgsIHVsb25nMiBtYXNrKTsKKwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzIgeCwgdWxvbmcyIG1hc2spOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzQgeCwgdWxvbmcyIG1hc2spOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzggeCwgdWxvbmcyIG1hc2spOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzE2IHgsIHVsb25nMiBtYXNrKTsKKworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShmbG9hdDIgeCwgdWludDIgbWFzayk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0NCB4LCB1aW50MiBtYXNrKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNodWZmbGUoZmxvYXQ4IHgsIHVpbnQyIG1hc2spOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShmbG9hdDE2IHgsIHVpbnQyIG1hc2spOworCitjaGFyNCBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjIgeCwgdWNoYXI0IG1hc2spOworY2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGNoYXI0IHgsIHVjaGFyNCBtYXNrKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShjaGFyOCB4LCB1Y2hhcjQgbWFzayk7CitjaGFyNCBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjE2IHgsIHVjaGFyNCBtYXNrKTsKKwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjIgeCwgdWNoYXI0IG1hc2spOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjQgeCwgdWNoYXI0IG1hc2spOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjggeCwgdWNoYXI0IG1hc2spOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjE2IHgsIHVjaGFyNCBtYXNrKTsKKworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShzaG9ydDIgeCwgdXNob3J0NCBtYXNrKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHNodWZmbGUoc2hvcnQ0IHgsIHVzaG9ydDQgbWFzayk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0OCB4LCB1c2hvcnQ0IG1hc2spOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShzaG9ydDE2IHgsIHVzaG9ydDQgbWFzayk7CisKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDIgeCwgdXNob3J0NCBtYXNrKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDQgeCwgdXNob3J0NCBtYXNrKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDggeCwgdXNob3J0NCBtYXNrKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDE2IHgsIHVzaG9ydDQgbWFzayk7CisKK2ludDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDIgeCwgdWludDQgbWFzayk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShpbnQ0IHgsIHVpbnQ0IG1hc2spOworaW50NCBfX292bGQgX19jbmZuIHNodWZmbGUoaW50OCB4LCB1aW50NCBtYXNrKTsKK2ludDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDE2IHgsIHVpbnQ0IG1hc2spOworCit1aW50NCBfX292bGQgX19jbmZuIHNodWZmbGUodWludDIgeCwgdWludDQgbWFzayk7Cit1aW50NCBfX292bGQgX19jbmZuIHNodWZmbGUodWludDQgeCwgdWludDQgbWFzayk7Cit1aW50NCBfX292bGQgX19jbmZuIHNodWZmbGUodWludDggeCwgdWludDQgbWFzayk7Cit1aW50NCBfX292bGQgX19jbmZuIHNodWZmbGUodWludDE2IHgsIHVpbnQ0IG1hc2spOworCitsb25nNCBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzIgeCwgdWxvbmc0IG1hc2spOworbG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGxvbmc0IHgsIHVsb25nNCBtYXNrKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShsb25nOCB4LCB1bG9uZzQgbWFzayk7Citsb25nNCBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzE2IHgsIHVsb25nNCBtYXNrKTsKKwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzIgeCwgdWxvbmc0IG1hc2spOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzQgeCwgdWxvbmc0IG1hc2spOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzggeCwgdWxvbmc0IG1hc2spOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzE2IHgsIHVsb25nNCBtYXNrKTsKKworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShmbG9hdDIgeCwgdWludDQgbWFzayk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0NCB4LCB1aW50NCBtYXNrKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNodWZmbGUoZmxvYXQ4IHgsIHVpbnQ0IG1hc2spOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShmbG9hdDE2IHgsIHVpbnQ0IG1hc2spOworCitjaGFyOCBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjIgeCwgdWNoYXI4IG1hc2spOworY2hhcjggX19vdmxkIF9fY25mbiBzaHVmZmxlKGNoYXI0IHgsIHVjaGFyOCBtYXNrKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShjaGFyOCB4LCB1Y2hhcjggbWFzayk7CitjaGFyOCBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjE2IHgsIHVjaGFyOCBtYXNrKTsKKwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjIgeCwgdWNoYXI4IG1hc2spOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjQgeCwgdWNoYXI4IG1hc2spOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjggeCwgdWNoYXI4IG1hc2spOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjE2IHgsIHVjaGFyOCBtYXNrKTsKKworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShzaG9ydDIgeCwgdXNob3J0OCBtYXNrKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUoc2hvcnQ0IHgsIHVzaG9ydDggbWFzayk7CitzaG9ydDggX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0OCB4LCB1c2hvcnQ4IG1hc2spOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShzaG9ydDE2IHgsIHVzaG9ydDggbWFzayk7CisKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDIgeCwgdXNob3J0OCBtYXNrKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDQgeCwgdXNob3J0OCBtYXNrKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDggeCwgdXNob3J0OCBtYXNrKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDE2IHgsIHVzaG9ydDggbWFzayk7CisKK2ludDggX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDIgeCwgdWludDggbWFzayk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShpbnQ0IHgsIHVpbnQ4IG1hc2spOworaW50OCBfX292bGQgX19jbmZuIHNodWZmbGUoaW50OCB4LCB1aW50OCBtYXNrKTsKK2ludDggX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDE2IHgsIHVpbnQ4IG1hc2spOworCit1aW50OCBfX292bGQgX19jbmZuIHNodWZmbGUodWludDIgeCwgdWludDggbWFzayk7Cit1aW50OCBfX292bGQgX19jbmZuIHNodWZmbGUodWludDQgeCwgdWludDggbWFzayk7Cit1aW50OCBfX292bGQgX19jbmZuIHNodWZmbGUodWludDggeCwgdWludDggbWFzayk7Cit1aW50OCBfX292bGQgX19jbmZuIHNodWZmbGUodWludDE2IHgsIHVpbnQ4IG1hc2spOworCitsb25nOCBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzIgeCwgdWxvbmc4IG1hc2spOworbG9uZzggX19vdmxkIF9fY25mbiBzaHVmZmxlKGxvbmc0IHgsIHVsb25nOCBtYXNrKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShsb25nOCB4LCB1bG9uZzggbWFzayk7Citsb25nOCBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzE2IHgsIHVsb25nOCBtYXNrKTsKKwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzIgeCwgdWxvbmc4IG1hc2spOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzQgeCwgdWxvbmc4IG1hc2spOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzggeCwgdWxvbmc4IG1hc2spOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzE2IHgsIHVsb25nOCBtYXNrKTsKKworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShmbG9hdDIgeCwgdWludDggbWFzayk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0NCB4LCB1aW50OCBtYXNrKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNodWZmbGUoZmxvYXQ4IHgsIHVpbnQ4IG1hc2spOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShmbG9hdDE2IHgsIHVpbnQ4IG1hc2spOworCitjaGFyMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGNoYXIyIHgsIHVjaGFyMTYgbWFzayk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGNoYXI0IHgsIHVjaGFyMTYgbWFzayk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGNoYXI4IHgsIHVjaGFyMTYgbWFzayk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGNoYXIxNiB4LCB1Y2hhcjE2IG1hc2spOworCit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjIgeCwgdWNoYXIxNiBtYXNrKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyNCB4LCB1Y2hhcjE2IG1hc2spOwordWNoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUodWNoYXI4IHgsIHVjaGFyMTYgbWFzayk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjE2IHgsIHVjaGFyMTYgbWFzayk7CisKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0MiB4LCB1c2hvcnQxNiBtYXNrKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0NCB4LCB1c2hvcnQxNiBtYXNrKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0OCB4LCB1c2hvcnQxNiBtYXNrKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0MTYgeCwgdXNob3J0MTYgbWFzayk7CisKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1c2hvcnQyIHgsIHVzaG9ydDE2IG1hc2spOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDQgeCwgdXNob3J0MTYgbWFzayk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0OCB4LCB1c2hvcnQxNiBtYXNrKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1c2hvcnQxNiB4LCB1c2hvcnQxNiBtYXNrKTsKKworaW50MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDIgeCwgdWludDE2IG1hc2spOworaW50MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDQgeCwgdWludDE2IG1hc2spOworaW50MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDggeCwgdWludDE2IG1hc2spOworaW50MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDE2IHgsIHVpbnQxNiBtYXNrKTsKKwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50MiB4LCB1aW50MTYgbWFzayk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVpbnQ0IHgsIHVpbnQxNiBtYXNrKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUodWludDggeCwgdWludDE2IG1hc2spOwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50MTYgeCwgdWludDE2IG1hc2spOworCitsb25nMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGxvbmcyIHgsIHVsb25nMTYgbWFzayk7Citsb25nMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGxvbmc0IHgsIHVsb25nMTYgbWFzayk7Citsb25nMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGxvbmc4IHgsIHVsb25nMTYgbWFzayk7Citsb25nMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGxvbmcxNiB4LCB1bG9uZzE2IG1hc2spOworCit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzIgeCwgdWxvbmcxNiBtYXNrKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nNCB4LCB1bG9uZzE2IG1hc2spOwordWxvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUodWxvbmc4IHgsIHVsb25nMTYgbWFzayk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzE2IHgsIHVsb25nMTYgbWFzayk7CisKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0MiB4LCB1aW50MTYgbWFzayk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShmbG9hdDQgeCwgdWludDE2IG1hc2spOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNodWZmbGUoZmxvYXQ4IHgsIHVpbnQxNiBtYXNrKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0MTYgeCwgdWludDE2IG1hc2spOworCisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGRvdWJsZTIgeCwgdWxvbmcyIG1hc2spOworZG91YmxlMiBfX292bGQgX19jbmZuIHNodWZmbGUoZG91YmxlNCB4LCB1bG9uZzIgbWFzayk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShkb3VibGU4IHgsIHVsb25nMiBtYXNrKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGRvdWJsZTE2IHgsIHVsb25nMiBtYXNrKTsKKworZG91YmxlNCBfX292bGQgX19jbmZuIHNodWZmbGUoZG91YmxlMiB4LCB1bG9uZzQgbWFzayk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShkb3VibGU0IHgsIHVsb25nNCBtYXNrKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGRvdWJsZTggeCwgdWxvbmc0IG1hc2spOworZG91YmxlNCBfX292bGQgX19jbmZuIHNodWZmbGUoZG91YmxlMTYgeCwgdWxvbmc0IG1hc2spOworCitkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShkb3VibGUyIHgsIHVsb25nOCBtYXNrKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzaHVmZmxlKGRvdWJsZTQgeCwgdWxvbmc4IG1hc2spOworZG91YmxlOCBfX292bGQgX19jbmZuIHNodWZmbGUoZG91YmxlOCB4LCB1bG9uZzggbWFzayk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShkb3VibGUxNiB4LCB1bG9uZzggbWFzayk7CisKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShkb3VibGUyIHgsIHVsb25nMTYgbWFzayk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHNodWZmbGUoZG91YmxlNCB4LCB1bG9uZzE2IG1hc2spOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGRvdWJsZTggeCwgdWxvbmcxNiBtYXNrKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShkb3VibGUxNiB4LCB1bG9uZzE2IG1hc2spOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKworI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmMiBfX292bGQgX19jbmZuIHNodWZmbGUoaGFsZjIgeCwgdXNob3J0MiBtYXNrKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShoYWxmNCB4LCB1c2hvcnQyIG1hc2spOworaGFsZjIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGhhbGY4IHgsIHVzaG9ydDIgbWFzayk7CitoYWxmMiBfX292bGQgX19jbmZuIHNodWZmbGUoaGFsZjE2IHgsIHVzaG9ydDIgbWFzayk7CisKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShoYWxmMiB4LCB1c2hvcnQ0IG1hc2spOworaGFsZjQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGhhbGY0IHgsIHVzaG9ydDQgbWFzayk7CitoYWxmNCBfX292bGQgX19jbmZuIHNodWZmbGUoaGFsZjggeCwgdXNob3J0NCBtYXNrKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShoYWxmMTYgeCwgdXNob3J0NCBtYXNrKTsKKworaGFsZjggX19vdmxkIF9fY25mbiBzaHVmZmxlKGhhbGYyIHgsIHVzaG9ydDggbWFzayk7CitoYWxmOCBfX292bGQgX19jbmZuIHNodWZmbGUoaGFsZjQgeCwgdXNob3J0OCBtYXNrKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShoYWxmOCB4LCB1c2hvcnQ4IG1hc2spOworaGFsZjggX19vdmxkIF9fY25mbiBzaHVmZmxlKGhhbGYxNiB4LCB1c2hvcnQ4IG1hc2spOworCitoYWxmMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGhhbGYyIHgsIHVzaG9ydDE2IG1hc2spOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShoYWxmNCB4LCB1c2hvcnQxNiBtYXNrKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHNodWZmbGUoaGFsZjggeCwgdXNob3J0MTYgbWFzayk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGhhbGYxNiB4LCB1c2hvcnQxNiBtYXNrKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoY2hhcjIgeCwgY2hhcjIgeSwgdWNoYXIyIG1hc2spOworY2hhcjIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihjaGFyNCB4LCBjaGFyNCB5LCB1Y2hhcjIgbWFzayk7CitjaGFyMiBfX292bGQgX19jbmZuIHNodWZmbGUyKGNoYXI4IHgsIGNoYXI4IHksIHVjaGFyMiBtYXNrKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoY2hhcjE2IHgsIGNoYXIxNiB5LCB1Y2hhcjIgbWFzayk7CisKK3VjaGFyMiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVjaGFyMiB4LCB1Y2hhcjIgeSwgdWNoYXIyIG1hc2spOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWNoYXI0IHgsIHVjaGFyNCB5LCB1Y2hhcjIgbWFzayk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1Y2hhcjggeCwgdWNoYXI4IHksIHVjaGFyMiBtYXNrKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVjaGFyMTYgeCwgdWNoYXIxNiB5LCB1Y2hhcjIgbWFzayk7CisKK3Nob3J0MiBfX292bGQgX19jbmZuIHNodWZmbGUyKHNob3J0MiB4LCBzaG9ydDIgeSwgdXNob3J0MiBtYXNrKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNodWZmbGUyKHNob3J0NCB4LCBzaG9ydDQgeSwgdXNob3J0MiBtYXNrKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNodWZmbGUyKHNob3J0OCB4LCBzaG9ydDggeSwgdXNob3J0MiBtYXNrKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNodWZmbGUyKHNob3J0MTYgeCwgc2hvcnQxNiB5LCB1c2hvcnQyIG1hc2spOworCit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodXNob3J0MiB4LCB1c2hvcnQyIHksIHVzaG9ydDIgbWFzayk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodXNob3J0NCB4LCB1c2hvcnQ0IHksIHVzaG9ydDIgbWFzayk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodXNob3J0OCB4LCB1c2hvcnQ4IHksIHVzaG9ydDIgbWFzayk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodXNob3J0MTYgeCwgdXNob3J0MTYgeSwgdXNob3J0MiBtYXNrKTsKKworaW50MiBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDIgeCwgaW50MiB5LCB1aW50MiBtYXNrKTsKK2ludDIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihpbnQ0IHgsIGludDQgeSwgdWludDIgbWFzayk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50OCB4LCBpbnQ4IHksIHVpbnQyIG1hc2spOworaW50MiBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDE2IHgsIGludDE2IHksIHVpbnQyIG1hc2spOworCit1aW50MiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVpbnQyIHgsIHVpbnQyIHksIHVpbnQyIG1hc2spOwordWludDIgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50NCB4LCB1aW50NCB5LCB1aW50MiBtYXNrKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDggeCwgdWludDggeSwgdWludDIgbWFzayk7Cit1aW50MiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVpbnQxNiB4LCB1aW50MTYgeSwgdWludDIgbWFzayk7CisKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIobG9uZzIgeCwgbG9uZzIgeSwgdWxvbmcyIG1hc2spOworbG9uZzIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihsb25nNCB4LCBsb25nNCB5LCB1bG9uZzIgbWFzayk7Citsb25nMiBfX292bGQgX19jbmZuIHNodWZmbGUyKGxvbmc4IHgsIGxvbmc4IHksIHVsb25nMiBtYXNrKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIobG9uZzE2IHgsIGxvbmcxNiB5LCB1bG9uZzIgbWFzayk7CisKK3Vsb25nMiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVsb25nMiB4LCB1bG9uZzIgeSwgdWxvbmcyIG1hc2spOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWxvbmc0IHgsIHVsb25nNCB5LCB1bG9uZzIgbWFzayk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1bG9uZzggeCwgdWxvbmc4IHksIHVsb25nMiBtYXNrKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVsb25nMTYgeCwgdWxvbmcxNiB5LCB1bG9uZzIgbWFzayk7CisKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNodWZmbGUyKGZsb2F0MiB4LCBmbG9hdDIgeSwgdWludDIgbWFzayk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDQgeCwgZmxvYXQ0IHksIHVpbnQyIG1hc2spOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQ4IHgsIGZsb2F0OCB5LCB1aW50MiBtYXNrKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNodWZmbGUyKGZsb2F0MTYgeCwgZmxvYXQxNiB5LCB1aW50MiBtYXNrKTsKKworY2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihjaGFyMiB4LCBjaGFyMiB5LCB1Y2hhcjQgbWFzayk7CitjaGFyNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGNoYXI0IHgsIGNoYXI0IHksIHVjaGFyNCBtYXNrKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoY2hhcjggeCwgY2hhcjggeSwgdWNoYXI0IG1hc2spOworY2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihjaGFyMTYgeCwgY2hhcjE2IHksIHVjaGFyNCBtYXNrKTsKKwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWNoYXIyIHgsIHVjaGFyMiB5LCB1Y2hhcjQgbWFzayk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1Y2hhcjQgeCwgdWNoYXI0IHksIHVjaGFyNCBtYXNrKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVjaGFyOCB4LCB1Y2hhcjggeSwgdWNoYXI0IG1hc2spOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWNoYXIxNiB4LCB1Y2hhcjE2IHksIHVjaGFyNCBtYXNrKTsKKworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoc2hvcnQyIHgsIHNob3J0MiB5LCB1c2hvcnQ0IG1hc2spOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoc2hvcnQ0IHgsIHNob3J0NCB5LCB1c2hvcnQ0IG1hc2spOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoc2hvcnQ4IHgsIHNob3J0OCB5LCB1c2hvcnQ0IG1hc2spOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoc2hvcnQxNiB4LCBzaG9ydDE2IHksIHVzaG9ydDQgbWFzayk7CisKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1c2hvcnQyIHgsIHVzaG9ydDIgeSwgdXNob3J0NCBtYXNrKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1c2hvcnQ0IHgsIHVzaG9ydDQgeSwgdXNob3J0NCBtYXNrKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1c2hvcnQ4IHgsIHVzaG9ydDggeSwgdXNob3J0NCBtYXNrKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1c2hvcnQxNiB4LCB1c2hvcnQxNiB5LCB1c2hvcnQ0IG1hc2spOworCitpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50MiB4LCBpbnQyIHksIHVpbnQ0IG1hc2spOworaW50NCBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDQgeCwgaW50NCB5LCB1aW50NCBtYXNrKTsKK2ludDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihpbnQ4IHgsIGludDggeSwgdWludDQgbWFzayk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50MTYgeCwgaW50MTYgeSwgdWludDQgbWFzayk7CisKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDIgeCwgdWludDIgeSwgdWludDQgbWFzayk7Cit1aW50NCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVpbnQ0IHgsIHVpbnQ0IHksIHVpbnQ0IG1hc2spOwordWludDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50OCB4LCB1aW50OCB5LCB1aW50NCBtYXNrKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDE2IHgsIHVpbnQxNiB5LCB1aW50NCBtYXNrKTsKKworbG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihsb25nMiB4LCBsb25nMiB5LCB1bG9uZzQgbWFzayk7Citsb25nNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGxvbmc0IHgsIGxvbmc0IHksIHVsb25nNCBtYXNrKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIobG9uZzggeCwgbG9uZzggeSwgdWxvbmc0IG1hc2spOworbG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihsb25nMTYgeCwgbG9uZzE2IHksIHVsb25nNCBtYXNrKTsKKwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWxvbmcyIHgsIHVsb25nMiB5LCB1bG9uZzQgbWFzayk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1bG9uZzQgeCwgdWxvbmc0IHksIHVsb25nNCBtYXNrKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVsb25nOCB4LCB1bG9uZzggeSwgdWxvbmc0IG1hc2spOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWxvbmcxNiB4LCB1bG9uZzE2IHksIHVsb25nNCBtYXNrKTsKKworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQyIHgsIGZsb2F0MiB5LCB1aW50NCBtYXNrKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNodWZmbGUyKGZsb2F0NCB4LCBmbG9hdDQgeSwgdWludDQgbWFzayk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDggeCwgZmxvYXQ4IHksIHVpbnQ0IG1hc2spOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQxNiB4LCBmbG9hdDE2IHksIHVpbnQ0IG1hc2spOworCitjaGFyOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGNoYXIyIHgsIGNoYXIyIHksIHVjaGFyOCBtYXNrKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoY2hhcjQgeCwgY2hhcjQgeSwgdWNoYXI4IG1hc2spOworY2hhcjggX19vdmxkIF9fY25mbiBzaHVmZmxlMihjaGFyOCB4LCBjaGFyOCB5LCB1Y2hhcjggbWFzayk7CitjaGFyOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGNoYXIxNiB4LCBjaGFyMTYgeSwgdWNoYXI4IG1hc2spOworCit1Y2hhcjggX19vdmxkIF9fY25mbiBzaHVmZmxlMih1Y2hhcjIgeCwgdWNoYXIyIHksIHVjaGFyOCBtYXNrKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVjaGFyNCB4LCB1Y2hhcjQgeSwgdWNoYXI4IG1hc2spOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWNoYXI4IHgsIHVjaGFyOCB5LCB1Y2hhcjggbWFzayk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBzaHVmZmxlMih1Y2hhcjE2IHgsIHVjaGFyMTYgeSwgdWNoYXI4IG1hc2spOworCitzaG9ydDggX19vdmxkIF9fY25mbiBzaHVmZmxlMihzaG9ydDIgeCwgc2hvcnQyIHksIHVzaG9ydDggbWFzayk7CitzaG9ydDggX19vdmxkIF9fY25mbiBzaHVmZmxlMihzaG9ydDQgeCwgc2hvcnQ0IHksIHVzaG9ydDggbWFzayk7CitzaG9ydDggX19vdmxkIF9fY25mbiBzaHVmZmxlMihzaG9ydDggeCwgc2hvcnQ4IHksIHVzaG9ydDggbWFzayk7CitzaG9ydDggX19vdmxkIF9fY25mbiBzaHVmZmxlMihzaG9ydDE2IHgsIHNob3J0MTYgeSwgdXNob3J0OCBtYXNrKTsKKwordXNob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVzaG9ydDIgeCwgdXNob3J0MiB5LCB1c2hvcnQ4IG1hc2spOwordXNob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVzaG9ydDQgeCwgdXNob3J0NCB5LCB1c2hvcnQ4IG1hc2spOwordXNob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVzaG9ydDggeCwgdXNob3J0OCB5LCB1c2hvcnQ4IG1hc2spOwordXNob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVzaG9ydDE2IHgsIHVzaG9ydDE2IHksIHVzaG9ydDggbWFzayk7CisKK2ludDggX19vdmxkIF9fY25mbiBzaHVmZmxlMihpbnQyIHgsIGludDIgeSwgdWludDggbWFzayk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50NCB4LCBpbnQ0IHksIHVpbnQ4IG1hc2spOworaW50OCBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDggeCwgaW50OCB5LCB1aW50OCBtYXNrKTsKK2ludDggX19vdmxkIF9fY25mbiBzaHVmZmxlMihpbnQxNiB4LCBpbnQxNiB5LCB1aW50OCBtYXNrKTsKKwordWludDggX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50MiB4LCB1aW50MiB5LCB1aW50OCBtYXNrKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDQgeCwgdWludDQgeSwgdWludDggbWFzayk7Cit1aW50OCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVpbnQ4IHgsIHVpbnQ4IHksIHVpbnQ4IG1hc2spOwordWludDggX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50MTYgeCwgdWludDE2IHksIHVpbnQ4IG1hc2spOworCitsb25nOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGxvbmcyIHgsIGxvbmcyIHksIHVsb25nOCBtYXNrKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIobG9uZzQgeCwgbG9uZzQgeSwgdWxvbmc4IG1hc2spOworbG9uZzggX19vdmxkIF9fY25mbiBzaHVmZmxlMihsb25nOCB4LCBsb25nOCB5LCB1bG9uZzggbWFzayk7Citsb25nOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGxvbmcxNiB4LCBsb25nMTYgeSwgdWxvbmc4IG1hc2spOworCit1bG9uZzggX19vdmxkIF9fY25mbiBzaHVmZmxlMih1bG9uZzIgeCwgdWxvbmcyIHksIHVsb25nOCBtYXNrKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVsb25nNCB4LCB1bG9uZzQgeSwgdWxvbmc4IG1hc2spOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWxvbmc4IHgsIHVsb25nOCB5LCB1bG9uZzggbWFzayk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBzaHVmZmxlMih1bG9uZzE2IHgsIHVsb25nMTYgeSwgdWxvbmc4IG1hc2spOworCitmbG9hdDggX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDIgeCwgZmxvYXQyIHksIHVpbnQ4IG1hc2spOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQ0IHgsIGZsb2F0NCB5LCB1aW50OCBtYXNrKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNodWZmbGUyKGZsb2F0OCB4LCBmbG9hdDggeSwgdWludDggbWFzayk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDE2IHgsIGZsb2F0MTYgeSwgdWludDggbWFzayk7CisKK2NoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGNoYXIyIHgsIGNoYXIyIHksIHVjaGFyMTYgbWFzayk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihjaGFyNCB4LCBjaGFyNCB5LCB1Y2hhcjE2IG1hc2spOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoY2hhcjggeCwgY2hhcjggeSwgdWNoYXIxNiBtYXNrKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGNoYXIxNiB4LCBjaGFyMTYgeSwgdWNoYXIxNiBtYXNrKTsKKwordWNoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVjaGFyMiB4LCB1Y2hhcjIgeSwgdWNoYXIxNiBtYXNrKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1Y2hhcjQgeCwgdWNoYXI0IHksIHVjaGFyMTYgbWFzayk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWNoYXI4IHgsIHVjaGFyOCB5LCB1Y2hhcjE2IG1hc2spOwordWNoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVjaGFyMTYgeCwgdWNoYXIxNiB5LCB1Y2hhcjE2IG1hc2spOworCitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoc2hvcnQyIHgsIHNob3J0MiB5LCB1c2hvcnQxNiBtYXNrKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihzaG9ydDQgeCwgc2hvcnQ0IHksIHVzaG9ydDE2IG1hc2spOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKHNob3J0OCB4LCBzaG9ydDggeSwgdXNob3J0MTYgbWFzayk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoc2hvcnQxNiB4LCBzaG9ydDE2IHksIHVzaG9ydDE2IG1hc2spOworCit1c2hvcnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVzaG9ydDIgeCwgdXNob3J0MiB5LCB1c2hvcnQxNiBtYXNrKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodXNob3J0NCB4LCB1c2hvcnQ0IHksIHVzaG9ydDE2IG1hc2spOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1c2hvcnQ4IHgsIHVzaG9ydDggeSwgdXNob3J0MTYgbWFzayk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVzaG9ydDE2IHgsIHVzaG9ydDE2IHksIHVzaG9ydDE2IG1hc2spOworCitpbnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDIgeCwgaW50MiB5LCB1aW50MTYgbWFzayk7CitpbnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDQgeCwgaW50NCB5LCB1aW50MTYgbWFzayk7CitpbnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDggeCwgaW50OCB5LCB1aW50MTYgbWFzayk7CitpbnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDE2IHgsIGludDE2IHksIHVpbnQxNiBtYXNrKTsKKwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDIgeCwgdWludDIgeSwgdWludDE2IG1hc2spOwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDQgeCwgdWludDQgeSwgdWludDE2IG1hc2spOwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDggeCwgdWludDggeSwgdWludDE2IG1hc2spOwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDE2IHgsIHVpbnQxNiB5LCB1aW50MTYgbWFzayk7CisKK2xvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGxvbmcyIHgsIGxvbmcyIHksIHVsb25nMTYgbWFzayk7Citsb25nMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihsb25nNCB4LCBsb25nNCB5LCB1bG9uZzE2IG1hc2spOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIobG9uZzggeCwgbG9uZzggeSwgdWxvbmcxNiBtYXNrKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGxvbmcxNiB4LCBsb25nMTYgeSwgdWxvbmcxNiBtYXNrKTsKKwordWxvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVsb25nMiB4LCB1bG9uZzIgeSwgdWxvbmcxNiBtYXNrKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1bG9uZzQgeCwgdWxvbmc0IHksIHVsb25nMTYgbWFzayk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWxvbmc4IHgsIHVsb25nOCB5LCB1bG9uZzE2IG1hc2spOwordWxvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVsb25nMTYgeCwgdWxvbmcxNiB5LCB1bG9uZzE2IG1hc2spOworCitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQyIHgsIGZsb2F0MiB5LCB1aW50MTYgbWFzayk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQ0IHgsIGZsb2F0NCB5LCB1aW50MTYgbWFzayk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQ4IHgsIGZsb2F0OCB5LCB1aW50MTYgbWFzayk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQxNiB4LCBmbG9hdDE2IHksIHVpbnQxNiBtYXNrKTsKKworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlMiB4LCBkb3VibGUyIHksIHVsb25nMiBtYXNrKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihkb3VibGU0IHgsIGRvdWJsZTQgeSwgdWxvbmcyIG1hc2spOworZG91YmxlMiBfX292bGQgX19jbmZuIHNodWZmbGUyKGRvdWJsZTggeCwgZG91YmxlOCB5LCB1bG9uZzIgbWFzayk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlMTYgeCwgZG91YmxlMTYgeSwgdWxvbmcyIG1hc2spOworCitkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlMiB4LCBkb3VibGUyIHksIHVsb25nNCBtYXNrKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihkb3VibGU0IHgsIGRvdWJsZTQgeSwgdWxvbmc0IG1hc2spOworZG91YmxlNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGRvdWJsZTggeCwgZG91YmxlOCB5LCB1bG9uZzQgbWFzayk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlMTYgeCwgZG91YmxlMTYgeSwgdWxvbmc0IG1hc2spOworCitkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlMiB4LCBkb3VibGUyIHksIHVsb25nOCBtYXNrKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzaHVmZmxlMihkb3VibGU0IHgsIGRvdWJsZTQgeSwgdWxvbmc4IG1hc2spOworZG91YmxlOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGRvdWJsZTggeCwgZG91YmxlOCB5LCB1bG9uZzggbWFzayk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlMTYgeCwgZG91YmxlMTYgeSwgdWxvbmc4IG1hc2spOworCitkb3VibGUxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGRvdWJsZTIgeCwgZG91YmxlMiB5LCB1bG9uZzE2IG1hc2spOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihkb3VibGU0IHgsIGRvdWJsZTQgeSwgdWxvbmcxNiBtYXNrKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlOCB4LCBkb3VibGU4IHksIHVsb25nMTYgbWFzayk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHksIHVsb25nMTYgbWFzayk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaGFsZjIgeCwgaGFsZjIgeSwgdXNob3J0MiBtYXNrKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaGFsZjQgeCwgaGFsZjQgeSwgdXNob3J0MiBtYXNrKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaGFsZjggeCwgaGFsZjggeSwgdXNob3J0MiBtYXNrKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaGFsZjE2IHgsIGhhbGYxNiB5LCB1c2hvcnQyIG1hc2spOworCitoYWxmNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGhhbGYyIHgsIGhhbGYyIHksIHVzaG9ydDQgbWFzayk7CitoYWxmNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGhhbGY0IHgsIGhhbGY0IHksIHVzaG9ydDQgbWFzayk7CitoYWxmNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGhhbGY4IHgsIGhhbGY4IHksIHVzaG9ydDQgbWFzayk7CitoYWxmNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGhhbGYxNiB4LCBoYWxmMTYgeSwgdXNob3J0NCBtYXNrKTsKKworaGFsZjggX19vdmxkIF9fY25mbiBzaHVmZmxlMihoYWxmMiB4LCBoYWxmMiB5LCB1c2hvcnQ4IG1hc2spOworaGFsZjggX19vdmxkIF9fY25mbiBzaHVmZmxlMihoYWxmNCB4LCBoYWxmNCB5LCB1c2hvcnQ4IG1hc2spOworaGFsZjggX19vdmxkIF9fY25mbiBzaHVmZmxlMihoYWxmOCB4LCBoYWxmOCB5LCB1c2hvcnQ4IG1hc2spOworaGFsZjggX19vdmxkIF9fY25mbiBzaHVmZmxlMihoYWxmMTYgeCwgaGFsZjE2IHksIHVzaG9ydDggbWFzayk7CisKK2hhbGYxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGhhbGYyIHgsIGhhbGYyIHksIHVzaG9ydDE2IG1hc2spOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaGFsZjQgeCwgaGFsZjQgeSwgdXNob3J0MTYgbWFzayk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihoYWxmOCB4LCBoYWxmOCB5LCB1c2hvcnQxNiBtYXNrKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGhhbGYxNiB4LCBoYWxmMTYgeSwgdXNob3J0MTYgbWFzayk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvLyBPcGVuQ0wgdjEuMiBzNi4xMi4xMywgdjIuMCBzNi4xMy4xMyAtIHByaW50ZgorCitpbnQgcHJpbnRmKF9fY29uc3RhbnQgY29uc3QgY2hhciogc3QsIC4uLik7CisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjMsIHYxLjIgczYuMTIuMTQsIHYyLjAgczYuMTMuMTQgLSBJbWFnZSBSZWFkIGFuZCBXcml0ZSBGdW5jdGlvbnMKKworLy8gVGhlc2UgdmFsdWVzIG5lZWQgdG8gbWF0Y2ggdGhlIHJ1bnRpbWUgZXF1aXZhbGVudAorLy8KKy8vIEFkZHJlc3NpbmcgTW9kZS4KKy8vCisjZGVmaW5lIENMS19BRERSRVNTX05PTkUgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDTEtfQUREUkVTU19DTEFNUF9UT19FREdFICAgICAgIDIKKyNkZWZpbmUgQ0xLX0FERFJFU1NfQ0xBTVAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENMS19BRERSRVNTX1JFUEVBVCAgICAgICAgICAgICAgNgorI2RlZmluZSBDTEtfQUREUkVTU19NSVJST1JFRF9SRVBFQVQgICAgIDgKKworLy8KKy8vIENvb3JkaW5hdGlvbiBOb3JtYWxpemF0aW9uCisvLworI2RlZmluZSBDTEtfTk9STUFMSVpFRF9DT09SRFNfRkFMU0UgICAgIDAKKyNkZWZpbmUgQ0xLX05PUk1BTElaRURfQ09PUkRTX1RSVUUgICAgICAxCisKKy8vCisvLyBGaWx0ZXJpbmcgTW9kZS4KKy8vCisjZGVmaW5lIENMS19GSUxURVJfTkVBUkVTVCAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBDTEtfRklMVEVSX0xJTkVBUiAgICAgICAgICAgICAgIDB4MjAKKworLyoqCisgKiBVc2UgdGhlIGNvb3JkaW5hdGUgKGNvb3JkLnh5KSB0byBkbyBhbiBlbGVtZW50IGxvb2t1cCBpbgorICogdGhlIDJEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKgorICogVXNlIHRoZSBjb29yZGluYXRlIChjb29yZC54LCBjb29yZC55LCBjb29yZC56KSB0byBkbworICogYW4gZWxlbWVudCBsb29rdXAgaW4gdGhlIDNEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5IGltYWdlLiBjb29yZC53IGlzIGlnbm9yZWQuCisgKgorICogVXNlIHRoZSBjb29yZGluYXRlIChjb29yZC56KSB0byBpbmRleCBpbnRvIHRoZQorICogMkQgaW1hZ2UgYXJyYXkgb2JqZWN0IHNwZWNpZmllZCBieSBpbWFnZV9hcnJheQorICogYW5kIChjb29yZC54LCBjb29yZC55KSB0byBkbyBhbiBlbGVtZW50IGxvb2t1cCBpbgorICogdGhlIDJEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKgorICogVXNlIHRoZSBjb29yZGluYXRlICh4KSB0byBkbyBhbiBlbGVtZW50IGxvb2t1cCBpbgorICogdGhlIDFEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKgorICogVXNlIHRoZSBjb29yZGluYXRlIChjb29yZC55KSB0byBpbmRleCBpbnRvIHRoZQorICogMUQgaW1hZ2UgYXJyYXkgb2JqZWN0IHNwZWNpZmllZCBieSBpbWFnZV9hcnJheQorICogYW5kIChjb29yZC54KSB0byBkbyBhbiBlbGVtZW50IGxvb2t1cCBpbgorICogdGhlIDFEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKgorICogVXNlIHRoZSBjb29yZGluYXRlIChjb29kLnh5KSBhbmQgc2FtcGxlIHRvIGRvIGFuCisgKiBlbGVtZW50IGxvb2t1cCBpbiB0aGUgMkQgbXVsdGktc2FtcGxlIGltYWdlIHNwZWNpZmllZAorICogYnkgaW1hZ2UuCisgKgorICogVXNlIGNvb3JkLnh5IGFuZCBzYW1wbGUgdG8gZG8gYW4gZWxlbWVudAorICogbG9va3VwIGluIHRoZSAyRCBtdWx0aS1zYW1wbGUgaW1hZ2UgbGF5ZXIKKyAqIGlkZW50aWZpZWQgYnkgaW5kZXggY29vcmQueiBpbiB0aGUgMkQgbXVsdGktc2FtcGxlCisgKiBpbWFnZSBhcnJheSBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKgorICogRm9yIG1pcG1hcCBpbWFnZXMsIHVzZSB0aGUgbWlwLWxldmVsIHNwZWNpZmllZCBieQorICogdGhlIExldmVsLW9mLURldGFpbCAobG9kKSBvciB1c2UgZ3JhZGllbnRzIGZvciBMT0QKKyAqIGNvbXB1dGF0aW9uLgorICoKKyAqIHJlYWRfaW1hZ2VmIHJldHVybnMgZmxvYXRpbmctcG9pbnQgdmFsdWVzIGluIHRoZQorICogcmFuZ2UgWzAuMCAuLi4gMS4wXSBmb3IgaW1hZ2Ugb2JqZWN0cyBjcmVhdGVkIHdpdGgKKyAqIGltYWdlX2NoYW5uZWxfZGF0YV90eXBlIHNldCB0byBvbmUgb2YgdGhlIHByZWRlZmluZWQKKyAqIHBhY2tlZCBmb3JtYXRzIG9yIENMX1VOT1JNX0lOVDgsIG9yCisgKiBDTF9VTk9STV9JTlQxNi4KKyAqCisgKiByZWFkX2ltYWdlZiByZXR1cm5zIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBpbiB0aGUKKyAqIHJhbmdlIFstMS4wIC4uLiAxLjBdIGZvciBpbWFnZSBvYmplY3RzIGNyZWF0ZWQgd2l0aAorICogaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgc2V0IHRvIENMX1NOT1JNX0lOVDgsCisgKiBvciBDTF9TTk9STV9JTlQxNi4KKyAqCisgKiByZWFkX2ltYWdlZiByZXR1cm5zIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBmb3IgaW1hZ2UKKyAqIG9iamVjdHMgY3JlYXRlZCB3aXRoIGltYWdlX2NoYW5uZWxfZGF0YV90eXBlIHNldCB0bworICogQ0xfSEFMRl9GTE9BVCBvciBDTF9GTE9BVC4KKyAqCisgKiByZWFkX2ltYWdlaSBhbmQgcmVhZF9pbWFnZXVpIHJldHVybgorICogdW5ub3JtYWxpemVkIHNpZ25lZCBpbnRlZ2VyIGFuZCB1bnNpZ25lZCBpbnRlZ2VyCisgKiB2YWx1ZXMgcmVzcGVjdGl2ZWx5LiBFYWNoIGNoYW5uZWwgd2lsbCBiZSBzdG9yZWQgaW4gYQorICogMzItYml0IGludGVnZXIuCisgKgorICogcmVhZF9pbWFnZWkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGltYWdlIG9iamVjdHMKKyAqIGNyZWF0ZWQgd2l0aCBpbWFnZV9jaGFubmVsX2RhdGFfdHlwZSBzZXQgdG8gb25lIG9mCisgKiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAqIENMX1NJR05FRF9JTlQ4LAorICogQ0xfU0lHTkVEX0lOVDE2IGFuZAorICogQ0xfU0lHTkVEX0lOVDMyLgorICogSWYgdGhlIGltYWdlX2NoYW5uZWxfZGF0YV90eXBlIGlzIG5vdCBvbmUgb2YgdGhlCisgKiBhYm92ZSB2YWx1ZXMsIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgcmVhZF9pbWFnZWkKKyAqIGFyZSB1bmRlZmluZWQuCisgKgorICogcmVhZF9pbWFnZXVpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZSBvYmplY3RzCisgKiBjcmVhdGVkIHdpdGggaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgc2V0IHRvIG9uZSBvZgorICogdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgKiBDTF9VTlNJR05FRF9JTlQ4LAorICogQ0xfVU5TSUdORURfSU5UMTYgYW5kCisgKiBDTF9VTlNJR05FRF9JTlQzMi4KKyAqIElmIHRoZSBpbWFnZV9jaGFubmVsX2RhdGFfdHlwZSBpcyBub3Qgb25lIG9mIHRoZQorICogYWJvdmUgdmFsdWVzLCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHJlYWRfaW1hZ2V1aQorICogYXJlIHVuZGVmaW5lZC4KKyAqCisgKiBUaGUgcmVhZF9pbWFnZXtpfHVpfSBjYWxscyBzdXBwb3J0IGEgbmVhcmVzdCBmaWx0ZXIKKyAqIG9ubHkuIFRoZSBmaWx0ZXJfbW9kZSBzcGVjaWZpZWQgaW4gc2FtcGxlcgorICogbXVzdCBiZSBzZXQgdG8gQ0xLX0ZJTFRFUl9ORUFSRVNUOyBvdGhlcndpc2UKKyAqIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYXJlIHVuZGVmaW5lZC4KKyAKKyAqIFRoZSByZWFkX2ltYWdle2Z8aXx1aX0gY2FsbHMgdGhhdCB0YWtlCisgKiBpbnRlZ2VyIGNvb3JkaW5hdGVzIG11c3QgdXNlIGEgc2FtcGxlciB3aXRoCisgKiBub3JtYWxpemVkIGNvb3JkaW5hdGVzIHNldCB0bworICogQ0xLX05PUk1BTElaRURfQ09PUkRTX0ZBTFNFIGFuZAorICogYWRkcmVzc2luZyBtb2RlIHNldCB0bworICogQ0xLX0FERFJFU1NfQ0xBTVBfVE9fRURHRSwKKyAqIENMS19BRERSRVNTX0NMQU1QIG9yIENMS19BRERSRVNTX05PTkU7CisgKiBvdGhlcndpc2UgdGhlIHZhbHVlcyByZXR1cm5lZCBhcmUgdW5kZWZpbmVkLgorICoKKyAqIFZhbHVlcyByZXR1cm5lZCBieSByZWFkX2ltYWdlZiBmb3IgaW1hZ2Ugb2JqZWN0cworICogd2l0aCBpbWFnZV9jaGFubmVsX2RhdGFfdHlwZSB2YWx1ZXMgbm90IHNwZWNpZmllZAorICogaW4gdGhlIGRlc2NyaXB0aW9uIGFib3ZlIGFyZSB1bmRlZmluZWQuCisgKi8KKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50MiBjb29yZCk7CitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQpOworCitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50MiBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDIgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQpOworCitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQpOworCitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50IGNvb3JkKTsKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkKTsKKworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGludCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50IGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50MiBjb29yZCk7CitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQpOworCitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50MiBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDIgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKKworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50MiBjb29yZCk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkKTsKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX21zYWFfdCBpbWFnZSwgaW50MiBjb29yZCwgaW50IHNhbXBsZSk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UsIGludDIgY29vcmQsIGludCBzYW1wbGUpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UsIGludDIgY29vcmQsIGludCBzYW1wbGUpOworCitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgc2FtcGxlKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UsIGludDQgY29vcmQsIGludCBzYW1wbGUpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgc2FtcGxlKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgc2FtcGxlKTsKKworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSwgaW50NCBjb29yZCwgaW50IHNhbXBsZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisKKy8vIE9wZW5DTCBFeHRlbnNpb24gdjIuMCBzOS4xOCAtIE1pcG1hcHMKKyNpZmRlZiBjbF9raHJfbWlwbWFwX2ltYWdlCisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGdyYWRpZW50WCwgZmxvYXQgZ3JhZGllbnRZKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgZ3JhZGllbnRYLCBmbG9hdCBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGdyYWRpZW50WCwgZmxvYXQgZ3JhZGllbnRZKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBncmFkaWVudFgsIGZsb2F0IGdyYWRpZW50WSk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBncmFkaWVudFgsIGZsb2F0IGdyYWRpZW50WSk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGdyYWRpZW50WCwgZmxvYXQgZ3JhZGllbnRZKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdDIgZ3JhZGllbnRYLCBmbG9hdDIgZ3JhZGllbnRZKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdDIgZ3JhZGllbnRYLCBmbG9hdDIgZ3JhZGllbnRZKTsKKworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOworCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOworCitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQ0IGdyYWRpZW50WCwgZmxvYXQ0IGdyYWRpZW50WSk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdDQgZ3JhZGllbnRYLCBmbG9hdDQgZ3JhZGllbnRZKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQ0IGdyYWRpZW50WCwgZmxvYXQ0IGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKKworI2VuZGlmIC8vY2xfa2hyX21pcG1hcF9pbWFnZQorCisvKioKKyogU2FtcGxlci1sZXNzIEltYWdlIEFjY2VzcworKi8KKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSwgaW50IGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlLCBpbnQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSwgaW50IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlLCBpbnQyIGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UsIGludDIgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlLCBpbnQyIGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlLCBpbnQ0IGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UsIGludDQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlLCBpbnQ0IGNvb3JkKTsKKworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBpbnQyIGNvb3JkKTsKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlLCBpbnQ0IGNvb3JkKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTNkX3QgaW1hZ2UsIGludDQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkKTsKKworLy8gSW1hZ2UgcmVhZCBmdW5jdGlvbnMgcmV0dXJuaW5nIGhhbGY0IHR5cGUKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBpbnQgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDIgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBpbnQyIGNvb3JkKTsKK2hhbGY0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaChyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKK2hhbGY0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaChyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDQgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgaW50MiBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZSwgaW50NCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvLyBJbWFnZSByZWFkIGZ1bmN0aW9ucyBmb3IgcmVhZF93cml0ZSBpbWFnZXMKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSwgaW50IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgaW50MiBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgaW50MiBjb29yZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlLCBpbnQyIGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZSwgaW50NCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZSwgaW50NCBjb29yZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlLCBpbnQ0IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkKTsKKworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfZGVwdGhfdCBpbWFnZSwgaW50MiBjb29yZCk7CitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UsIGludDQgY29vcmQpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworCisjaWYgY2xfa2hyX2dsX21zYWFfc2hhcmluZworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfbXNhYV90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgc2FtcGxlKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UsIGludDIgY29vcmQsIGludCBzYW1wbGUpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfbXNhYV90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgc2FtcGxlKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgc2FtcGxlKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UsIGludDQgY29vcmQsIGludCBzYW1wbGUpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgc2FtcGxlKTsKKworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UsIGludDIgY29vcmQsIGludCBzYW1wbGUpOworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UsIGludDQgY29vcmQsIGludCBzYW1wbGUpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworCisjaWZkZWYgY2xfa2hyX21pcG1hcF9pbWFnZQorZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgZ3JhZGllbnRYLCBmbG9hdCBncmFkaWVudFkpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgZ3JhZGllbnRYLCBmbG9hdCBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBncmFkaWVudFgsIGZsb2F0IGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGdyYWRpZW50WCwgZmxvYXQgZ3JhZGllbnRZKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBncmFkaWVudFgsIGZsb2F0IGdyYWRpZW50WSk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBncmFkaWVudFgsIGZsb2F0IGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0NCBncmFkaWVudFgsIGZsb2F0NCBncmFkaWVudFkpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0NCBncmFkaWVudFgsIGZsb2F0NCBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQ0IGdyYWRpZW50WCwgZmxvYXQ0IGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworI2VuZGlmIC8vY2xfa2hyX21pcG1hcF9pbWFnZQorCisvLyBJbWFnZSByZWFkIGZ1bmN0aW9ucyByZXR1cm5pbmcgaGFsZjQgdHlwZQorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfd3JpdGUgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkKTsKK2hhbGY0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaChyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgaW50MiBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UsIGludDQgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfd3JpdGUgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSwgaW50IGNvb3JkKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIFdyaXRlIGNvbG9yIHZhbHVlIHRvIGxvY2F0aW9uIHNwZWNpZmllZCBieSBjb29yZGluYXRlCisgKiAoY29vcmQueCwgY29vcmQueSkgaW4gdGhlIDJEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKiAoY29vcmQueCwgY29vcmQueSkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgdW5ub3JtYWxpemVkIGNvb3JkaW5hdGVzCisgKiBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMCAuLi4gaW1hZ2Ugd2lkdGggLSAxLCBhbmQgMAorICogLi4uIGltYWdlIGhlaWdodCAtIDEuCisKKyAqIFdyaXRlIGNvbG9yIHZhbHVlIHRvIGxvY2F0aW9uIHNwZWNpZmllZCBieSBjb29yZGluYXRlCisgKiAoY29vcmQueCwgY29vcmQueSkgaW4gdGhlIDJEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW5kZXgKKyAqIChjb29yZC56KSBvZiB0aGUgMkQgaW1hZ2UgYXJyYXkgb2JqZWN0IGltYWdlX2FycmF5LgorICogKGNvb3JkLngsIGNvb3JkLnkpIGFyZSBjb25zaWRlcmVkIHRvIGJlIHVubm9ybWFsaXplZAorICogY29vcmRpbmF0ZXMgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIGltYWdlIHdpZHRoCisgKiAtIDEuCisgKgorICogV3JpdGUgY29sb3IgdmFsdWUgdG8gbG9jYXRpb24gc3BlY2lmaWVkIGJ5IGNvb3JkaW5hdGUKKyAqIChjb29yZCkgaW4gdGhlIDFEIGltYWdlIChidWZmZXIpIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKiBjb29yZCBpcyBjb25zaWRlcmVkIHRvIGJlIHVubm9ybWFsaXplZCBjb29yZGluYXRlcworICogYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIGltYWdlIHdpZHRoIC0gMS4KKyAqCisgKiBXcml0ZSBjb2xvciB2YWx1ZSB0byBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgY29vcmRpbmF0ZQorICogKGNvb3JkLngpIGluIHRoZSAxRCBpbWFnZSBvYmplY3Qgc3BlY2lmaWVkIGJ5IGluZGV4CisgKiAoY29vcmQueSkgb2YgdGhlIDFEIGltYWdlIGFycmF5IG9iamVjdCBpbWFnZV9hcnJheS4KKyAqIHggaXMgY29uc2lkZXJlZCB0byBiZSB1bm5vcm1hbGl6ZWQgY29vcmRpbmF0ZXMKKyAqIGFuZCBtdXN0IGJlIGluIHRoZSByYW5nZSAwIC4uLiBpbWFnZSB3aWR0aCAtIDEuCisgKgorICogV3JpdGUgY29sb3IgdmFsdWUgdG8gbG9jYXRpb24gc3BlY2lmaWVkIGJ5IGNvb3JkaW5hdGUKKyAqIChjb29yZC54LCBjb29yZC55LCBjb29yZC56KSBpbiB0aGUgM0QgaW1hZ2Ugb2JqZWN0IHNwZWNpZmllZCBieSBpbWFnZS4KKyAqIGNvb3JkLnggJiBjb29yZC55IGFyZSBjb25zaWRlcmVkIHRvIGJlIHVubm9ybWFsaXplZCBjb29yZGluYXRlcworICogYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIGltYWdlIHdpZHRoIC0gMSwgYW5kIDAKKyAqIC4uLiBpbWFnZSBoZWlnaHQgLSAxLgorICoKKyAqIEZvciBtaXBtYXAgaW1hZ2VzLCB1c2UgbWlwLWxldmVsIHNwZWNpZmllZCBieSBsb2QuCisgKgorICogQXBwcm9wcmlhdGUgZGF0YSBmb3JtYXQgY29udmVyc2lvbiB0byB0aGUgc3BlY2lmaWVkCisgKiBpbWFnZSBmb3JtYXQgaXMgZG9uZSBiZWZvcmUgd3JpdGluZyB0aGUgY29sb3IgdmFsdWUuCisgKgorICogd3JpdGVfaW1hZ2VmIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZSBvYmplY3RzCisgKiBjcmVhdGVkIHdpdGggaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgc2V0IHRvIG9uZSBvZgorICogdGhlIHByZS1kZWZpbmVkIHBhY2tlZCBmb3JtYXRzIG9yIHNldCB0bworICogQ0xfU05PUk1fSU5UOCwgQ0xfVU5PUk1fSU5UOCwKKyAqIENMX1NOT1JNX0lOVDE2LCBDTF9VTk9STV9JTlQxNiwKKyAqIENMX0hBTEZfRkxPQVQgb3IgQ0xfRkxPQVQuIEFwcHJvcHJpYXRlIGRhdGEKKyAqIGZvcm1hdCBjb252ZXJzaW9uIHdpbGwgYmUgZG9uZSB0byBjb252ZXJ0IGNoYW5uZWwKKyAqIGRhdGEgZnJvbSBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIHRvIGFjdHVhbCBkYXRhIGZvcm1hdAorICogaW4gd2hpY2ggdGhlIGNoYW5uZWxzIGFyZSBzdG9yZWQuCisgKgorICogd3JpdGVfaW1hZ2VpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZSBvYmplY3RzCisgKiBjcmVhdGVkIHdpdGggaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgc2V0IHRvIG9uZSBvZgorICogdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgKiBDTF9TSUdORURfSU5UOCwKKyAqIENMX1NJR05FRF9JTlQxNiBhbmQKKyAqIENMX1NJR05FRF9JTlQzMi4KKyAqCisgKiB3cml0ZV9pbWFnZXVpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZSBvYmplY3RzCisgKiBjcmVhdGVkIHdpdGggaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgc2V0IHRvIG9uZSBvZgorICogdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgKiBDTF9VTlNJR05FRF9JTlQ4LAorICogQ0xfVU5TSUdORURfSU5UMTYgYW5kCisgKiBDTF9VTlNJR05FRF9JTlQzMi4KKyAqCisgKiBUaGUgYmVoYXZpb3Igb2Ygd3JpdGVfaW1hZ2VmLCB3cml0ZV9pbWFnZWkgYW5kCisgKiB3cml0ZV9pbWFnZXVpIGZvciBpbWFnZSBvYmplY3RzIGNyZWF0ZWQgd2l0aAorICogaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgdmFsdWVzIG5vdCBzcGVjaWZpZWQgaW4KKyAqIHRoZSBkZXNjcmlwdGlvbiBhYm92ZSBvciB3aXRoICh4LCB5KSBjb29yZGluYXRlCisgKiB2YWx1ZXMgdGhhdCBhcmUgbm90IGluIHRoZSByYW5nZSAoMCAuLi4gaW1hZ2Ugd2lkdGggLTEsCisgKiAwIC4uLiBpbWFnZSBoZWlnaHQgLSAxKSwgcmVzcGVjdGl2ZWx5LCBpcyB1bmRlZmluZWQuCisgKi8KK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaSh3cml0ZV9vbmx5IGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50NCBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50NCBjb29yZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQ0IGNvb3JkLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHdyaXRlX29ubHkgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aSh3cml0ZV9vbmx5IGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaSh3cml0ZV9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSwgaW50IGNvb3JkLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50MiBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaSh3cml0ZV9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50MiBjb29yZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQyIGNvb3JkLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaSh3cml0ZV9vbmx5IGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkLCB1aW50NCBjb2xvcik7CisKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYod3JpdGVfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UsIGludDIgY29vcmQsIGZsb2F0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSwgaW50NCBjb29yZCwgZmxvYXQgY29sb3IpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworCisvLyBPcGVuQ0wgRXh0ZW5zaW9uIHYyLjAgczkuMTggLSBNaXBtYXBzCisjaWZkZWYgY2xfa2hyX21pcG1hcF9pbWFnZQordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQsIGludCBsb2QsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkod3JpdGVfb25seSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCwgaW50IGxvZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQsIGludCBsb2QsIHVpbnQ0IGNvbG9yKTsKKwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQyIGNvb3JkLCBpbnQgbG9kLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHdyaXRlX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQyIGNvb3JkLCBpbnQgbG9kLCBpbnQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdldWkod3JpdGVfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDIgY29vcmQsIGludCBsb2QsIHVpbnQ0IGNvbG9yKTsKKwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgbG9kLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHdyaXRlX29ubHkgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgbG9kLCBpbnQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdldWkod3JpdGVfb25seSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQsIGludCBsb2QsIHVpbnQ0IGNvbG9yKTsKKwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCBpbnQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdldWkod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDQgY29vcmQsIGludCBsb2QsIHVpbnQ0IGNvbG9yKTsKKwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgbG9kLCBmbG9hdCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UsIGludDQgY29vcmQsIGludCBsb2QsIGZsb2F0IGNvbG9yKTsKKwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHdyaXRlX29ubHkgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCBpbnQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdldWkod3JpdGVfb25seSBpbWFnZTNkX3QgaW1hZ2UsIGludDQgY29vcmQsIGludCBsb2QsIHVpbnQ0IGNvbG9yKTsKKyNlbmRpZiAvL2NsX2tocl9taXBtYXBfaW1hZ2UKKworLy8gSW1hZ2Ugd3JpdGUgZnVuY3Rpb25zIGZvciBoYWxmNCB0eXBlCisjaWZkZWYgY2xfa2hyX2ZwMTYKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaCh3cml0ZV9vbmx5IGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCBoYWxmNCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWgod3JpdGVfb25seSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQsIGhhbGY0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaCh3cml0ZV9vbmx5IGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgaGFsZjQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VoKHdyaXRlX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlLCBpbnQyIGNvb3JkLCBoYWxmNCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWgod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UsIGludDQgY29vcmQsIGhhbGY0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaCh3cml0ZV9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCwgaGFsZjQgY29sb3IpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLy8gSW1hZ2Ugd3JpdGUgZnVuY3Rpb25zIGZvciByZWFkX3dyaXRlIGltYWdlcworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCwgdWludDQgY29sb3IpOworCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDQgY29vcmQsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDQgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50NCBjb29yZCwgdWludDQgY29sb3IpOworCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCBpbnQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdldWkocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCwgdWludDQgY29sb3IpOworCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlLCBpbnQgY29vcmQsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlLCBpbnQgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCwgdWludDQgY29sb3IpOworCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDIgY29vcmQsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDIgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50MiBjb29yZCwgdWludDQgY29sb3IpOworCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIGludDQgY29vcmQsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIGludDQgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgdWludDQgY29sb3IpOworCisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBpbnQyIGNvb3JkLCBmbG9hdCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UsIGludDQgY29vcmQsIGZsb2F0IGNvbG9yKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKworI2lmZGVmIGNsX2tocl9taXBtYXBfaW1hZ2UKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCBpbnQgbG9kLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQsIGludCBsb2QsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCBpbnQgbG9kLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50MiBjb29yZCwgaW50IGxvZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50MiBjb29yZCwgaW50IGxvZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQyIGNvb3JkLCBpbnQgbG9kLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCwgaW50IGxvZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCwgaW50IGxvZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgbG9kLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50NCBjb29yZCwgaW50IGxvZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50NCBjb29yZCwgaW50IGxvZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfZGVwdGhfdCBpbWFnZSwgaW50MiBjb29yZCwgaW50IGxvZCwgZmxvYXQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCBmbG9hdCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgaW50IGxvZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgaW50IGxvZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCB1aW50NCBjb2xvcik7CisjZW5kaWYgLy9jbF9raHJfbWlwbWFwX2ltYWdlCisKKy8vIEltYWdlIHdyaXRlIGZ1bmN0aW9ucyBmb3IgaGFsZjQgdHlwZQorI2lmZGVmIGNsX2tocl9mcDE2Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCwgaGFsZjQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VoKHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkLCBoYWxmNCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIGludDQgY29vcmQsIGhhbGY0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaChyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgaW50MiBjb29yZCwgaGFsZjQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VoKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlLCBpbnQ0IGNvb3JkLCBoYWxmNCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlLCBpbnQgY29vcmQsIGhhbGY0IGNvbG9yKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvLyBOb3RlOiBJbiBPcGVuQ0wgdjEuMC8xLjEvMS4yLCBpbWFnZSBhcmd1bWVudCBvZiBpbWFnZSBxdWVyeSBidWlsdGluIGZ1bmN0aW9ucyBkb2VzIG5vdCBoYXZlCisvLyBhY2Nlc3MgcXVhbGlmaWVyLCB3aGljaCBieSBkZWZhdWx0IGFzc3VtZSByZWFkX29ubHkgYWNjZXNzIHF1YWxpZmllci4gSW1hZ2UgcXVlcnkgYnVpbHRpbgorLy8gZnVuY3Rpb25zIHdpdGggd3JpdGVfb25seSBpbWFnZSBhcmd1bWVudCBzaG91bGQgYWxzbyBiZSBkZWNsYXJlZC4KKworLyoqCisgKiBSZXR1cm4gdGhlIGltYWdlIHdpZHRoIGluIHBpeGVscy4KKyAqCisgICovCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfb25seSBpbWFnZTNkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aChyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aChyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF9vbmx5IGltYWdlMmRfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aChyZWFkX29ubHkgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHdyaXRlX29ubHkgaW1hZ2UxZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aCh3cml0ZV9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHdyaXRlX29ubHkgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aCh3cml0ZV9vbmx5IGltYWdlM2RfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTJkX21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAoraW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfd3JpdGUgaW1hZ2UxZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aChyZWFkX3dyaXRlIGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aChyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTJkX21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIFJldHVybiB0aGUgaW1hZ2UgaGVpZ2h0IGluIHBpeGVscy4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodChyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlMmRfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfb25seSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworI2lmIGRlZmluZWQoY2xfa2hyX2dsX21zYWFfc2hhcmluZykKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlMmRfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodCh3cml0ZV9vbmx5IGltYWdlMmRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHdyaXRlX29ubHkgaW1hZ2UzZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQod3JpdGVfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodCh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQoraW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodCh3cml0ZV9vbmx5IGltYWdlMmRfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQod3JpdGVfb25seSBpbWFnZTJkX21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodCh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodChyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodChyZWFkX3dyaXRlIGltYWdlMmRfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodChyZWFkX3dyaXRlIGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBSZXR1cm4gdGhlIGltYWdlIGRlcHRoIGluIHBpeGVscy4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RlcHRoKHJlYWRfb25seSBpbWFnZTNkX3QgaW1hZ2UpOworCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGVwdGgod3JpdGVfb25seSBpbWFnZTNkX3QgaW1hZ2UpOworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kZXB0aChyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSk7CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvLyBPcGVuQ0wgRXh0ZW5zaW9uIHYyLjAgczkuMTggLSBNaXBtYXBzCisjaWZkZWYgY2xfa2hyX21pcG1hcF9pbWFnZQorLyoqCisgKiBSZXR1cm4gdGhlIGltYWdlIG1pcGxldmVscy4KKyAqLworCitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSk7CisKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHdyaXRlX29ubHkgaW1hZ2UxZF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHdyaXRlX29ubHkgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHdyaXRlX29ubHkgaW1hZ2UzZF90IGltYWdlKTsKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSk7CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKKworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMod3JpdGVfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMod3JpdGVfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfd3JpdGUgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKyNlbmRpZiAvL2NsX2tocl9taXBtYXBfaW1hZ2UKKworLyoqCisgKiBSZXR1cm4gdGhlIGNoYW5uZWwgZGF0YSB0eXBlLiBWYWxpZCB2YWx1ZXMgYXJlOgorICogQ0xLX1NOT1JNX0lOVDgKKyAqIENMS19TTk9STV9JTlQxNgorICogQ0xLX1VOT1JNX0lOVDgKKyAqIENMS19VTk9STV9JTlQxNgorICogQ0xLX1VOT1JNX1NIT1JUXzU2NQorICogQ0xLX1VOT1JNX1NIT1JUXzU1NQorICogQ0xLX1VOT1JNX1NIT1JUXzEwMTAxMAorICogQ0xLX1NJR05FRF9JTlQ4CisgKiBDTEtfU0lHTkVEX0lOVDE2CisgKiBDTEtfU0lHTkVEX0lOVDMyCisgKiBDTEtfVU5TSUdORURfSU5UOAorICogQ0xLX1VOU0lHTkVEX0lOVDE2CisgKiBDTEtfVU5TSUdORURfSU5UMzIKKyAqIENMS19IQUxGX0ZMT0FUCisgKiBDTEtfRkxPQVQKKyAqLworCisvLworLy8gQ2hhbm5lbCBEYXRhdHlwZS4KKy8vCisjZGVmaW5lIENMS19TTk9STV9JTlQ4ICAgICAgICAweDEwRDAKKyNkZWZpbmUgQ0xLX1NOT1JNX0lOVDE2ICAgICAgIDB4MTBEMQorI2RlZmluZSBDTEtfVU5PUk1fSU5UOCAgICAgICAgMHgxMEQyCisjZGVmaW5lIENMS19VTk9STV9JTlQxNiAgICAgICAweDEwRDMKKyNkZWZpbmUgQ0xLX1VOT1JNX1NIT1JUXzU2NSAgIDB4MTBENAorI2RlZmluZSBDTEtfVU5PUk1fU0hPUlRfNTU1ICAgMHgxMEQ1CisjZGVmaW5lIENMS19VTk9STV9JTlRfMTAxMDEwICAweDEwRDYKKyNkZWZpbmUgQ0xLX1NJR05FRF9JTlQ4ICAgICAgIDB4MTBENworI2RlZmluZSBDTEtfU0lHTkVEX0lOVDE2ICAgICAgMHgxMEQ4CisjZGVmaW5lIENMS19TSUdORURfSU5UMzIgICAgICAweDEwRDkKKyNkZWZpbmUgQ0xLX1VOU0lHTkVEX0lOVDggICAgIDB4MTBEQQorI2RlZmluZSBDTEtfVU5TSUdORURfSU5UMTYgICAgMHgxMERCCisjZGVmaW5lIENMS19VTlNJR05FRF9JTlQzMiAgICAweDEwREMKKyNkZWZpbmUgQ0xLX0hBTEZfRkxPQVQgICAgICAgIDB4MTBERAorI2RlZmluZSBDTEtfRkxPQVQgICAgICAgICAgICAgMHgxMERFCisjZGVmaW5lIENMS19VTk9STV9JTlQyNCAgICAgICAweDEwREYKKworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfb25seSBpbWFnZTFkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfb25seSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUocmVhZF9vbmx5IGltYWdlMmRfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQoraW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfb25seSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUocmVhZF9vbmx5IGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZSh3cml0ZV9vbmx5IGltYWdlMWRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUod3JpdGVfb25seSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZSh3cml0ZV9vbmx5IGltYWdlMmRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUod3JpdGVfb25seSBpbWFnZTNkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQoraW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUocmVhZF93cml0ZSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQoraW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBSZXR1cm4gdGhlIGltYWdlIGNoYW5uZWwgb3JkZXIuIFZhbGlkIHZhbHVlcyBhcmU6CisgKiBDTEtfQQorICogQ0xLX1IKKyAqIENMS19SeAorICogQ0xLX1JHCisgKiBDTEtfUkd4CisgKiBDTEtfUkEKKyAqIENMS19SR0IKKyAqIENMS19SR0J4CisgKiBDTEtfUkdCQQorICogQ0xLX0FSR0IKKyAqIENMS19CR1JBCisgKiBDTEtfSU5URU5TSVRZCisgKiBDTEtfTFVNSU5BTkNFCisgKi8KKy8vIENoYW5uZWwgb3JkZXIsIG51bWJlcmluZyBtdXN0IGJlIGFsaWduZWQgd2l0aCBjbF9jaGFubmVsX29yZGVyIGluIGNsLmgKKy8vCisjZGVmaW5lIENMS19SICAgICAgICAgMHgxMEIwCisjZGVmaW5lIENMS19BICAgICAgICAgMHgxMEIxCisjZGVmaW5lIENMS19SRyAgICAgICAgMHgxMEIyCisjZGVmaW5lIENMS19SQSAgICAgICAgMHgxMEIzCisjZGVmaW5lIENMS19SR0IgICAgICAgMHgxMEI0CisjZGVmaW5lIENMS19SR0JBICAgICAgMHgxMEI1CisjZGVmaW5lIENMS19CR1JBICAgICAgMHgxMEI2CisjZGVmaW5lIENMS19BUkdCICAgICAgMHgxMEI3CisjZGVmaW5lIENMS19JTlRFTlNJVFkgMHgxMEI4CisjZGVmaW5lIENMS19MVU1JTkFOQ0UgMHgxMEI5CisjZGVmaW5lIENMS19SeCAgICAgICAgICAgICAgICAweDEwQkEKKyNkZWZpbmUgQ0xLX1JHeCAgICAgICAgICAgICAgIDB4MTBCQgorI2RlZmluZSBDTEtfUkdCeCAgICAgICAgICAgICAgMHgxMEJDCisjZGVmaW5lIENMS19ERVBUSCAgICAgICAgICAgICAweDEwQkQKKyNkZWZpbmUgQ0xLX0RFUFRIX1NURU5DSUwgICAgIDB4MTBCRQorI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisjZGVmaW5lIENMS19zUkdCICAgICAgICAgICAgICAweDEwQkYKKyNkZWZpbmUgQ0xLX3NSR0JBICAgICAgICAgICAgIDB4MTBDMQorI2RlZmluZSBDTEtfc1JHQnggICAgICAgICAgICAgMHgxMEMwCisjZGVmaW5lIENMS19zQkdSQSAgICAgICAgICAgICAweDEwQzIKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfb25seSBpbWFnZTFkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF9vbmx5IGltYWdlMmRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF9vbmx5IGltYWdlMmRfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF9vbmx5IGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcih3cml0ZV9vbmx5IGltYWdlMWRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcih3cml0ZV9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIod3JpdGVfb25seSBpbWFnZTJkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIod3JpdGVfb25seSBpbWFnZTNkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIod3JpdGVfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHdyaXRlX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcih3cml0ZV9vbmx5IGltYWdlMmRfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHdyaXRlX29ubHkgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcih3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX3dyaXRlIGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfd3JpdGUgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX3dyaXRlIGltYWdlMmRfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogUmV0dXJuIHRoZSAyRCBpbWFnZSB3aWR0aCBhbmQgaGVpZ2h0IGFzIGFuIGludDIKKyAqIHR5cGUuIFRoZSB3aWR0aCBpcyByZXR1cm5lZCBpbiB0aGUgeCBjb21wb25lbnQsIGFuZAorICogdGhlIGhlaWdodCBpbiB0aGUgeSBjb21wb25lbnQuCisgKi8KK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UpOworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF9vbmx5IGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworCitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbSh3cml0ZV9vbmx5IGltYWdlMmRfdCBpbWFnZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0od3JpdGVfb25seSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UpOworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0od3JpdGVfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworI2lmIGRlZmluZWQoY2xfa2hyX2dsX21zYWFfc2hhcmluZykKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHdyaXRlX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0od3JpdGVfb25seSBpbWFnZTJkX21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlKTsKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlKTsKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX3dyaXRlIGltYWdlMmRfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQoraW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF93cml0ZSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX3dyaXRlIGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIFJldHVybiB0aGUgM0QgaW1hZ2Ugd2lkdGgsIGhlaWdodCwgYW5kIGRlcHRoIGFzIGFuCisgKiBpbnQ0IHR5cGUuIFRoZSB3aWR0aCBpcyByZXR1cm5lZCBpbiB0aGUgeAorICogY29tcG9uZW50LCBoZWlnaHQgaW4gdGhlIHkgY29tcG9uZW50LCBkZXB0aCBpbiB0aGUgegorICogY29tcG9uZW50IGFuZCB0aGUgdyBjb21wb25lbnQgaXMgMC4KKyAqLworaW50NCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbSh3cml0ZV9vbmx5IGltYWdlM2RfdCBpbWFnZSk7CisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2ludDQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfd3JpdGUgaW1hZ2UzZF90IGltYWdlKTsKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogUmV0dXJuIHRoZSBpbWFnZSBhcnJheSBzaXplLgorICovCisKK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9hcnJheV9zaXplKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXkpOworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2FycmF5X3NpemUocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2FycmF5X3NpemUocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZV9hcnJheSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQorc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2FycmF5X3NpemUocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlX2FycmF5KTsKK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9hcnJheV9zaXplKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZV9hcnJheSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisKK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9hcnJheV9zaXplKHdyaXRlX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5KTsKK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9hcnJheV9zaXplKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5KTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfYXJyYXlfc2l6ZSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZV9hcnJheSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQorc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2FycmF5X3NpemUod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZV9hcnJheSk7CitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfYXJyYXlfc2l6ZSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlX2FycmF5KTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfYXJyYXlfc2l6ZShyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSk7CitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfYXJyYXlfc2l6ZShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2FycmF5X3NpemUocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2VfYXJyYXkpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworI2lmIGRlZmluZWQoY2xfa2hyX2dsX21zYWFfc2hhcmluZykKK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9hcnJheV9zaXplKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2VfYXJyYXkpOworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2FycmF5X3NpemUocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZV9hcnJheSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBhc3NvY2lhdGVkIHdpdGggaW1hZ2UKKyovCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQoraW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX3NhbXBsZXMocmVhZF9vbmx5IGltYWdlMmRfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9zYW1wbGVzKHJlYWRfb25seSBpbWFnZTJkX21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fc2FtcGxlcyhyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX3NhbXBsZXMocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9zYW1wbGVzKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9zYW1wbGVzKHdyaXRlX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX3NhbXBsZXMod3JpdGVfb25seSBpbWFnZTJkX21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fc2FtcGxlcyh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9zYW1wbGVzKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX3NhbXBsZXMod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAoraW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX3NhbXBsZXMocmVhZF93cml0ZSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fc2FtcGxlcyhyZWFkX3dyaXRlIGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9zYW1wbGVzKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX3NhbXBsZXMocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fc2FtcGxlcyhyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisjZW5kaWYKKworLy8gT3BlbkNMIHYyLjAgczYuMTMuMTUgLSBXb3JrLWdyb3VwIEZ1bmN0aW9ucworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2ludCBfX292bGQgd29ya19ncm91cF9hbGwoaW50IHByZWRpY2F0ZSk7CitpbnQgX19vdmxkIHdvcmtfZ3JvdXBfYW55KGludCBwcmVkaWNhdGUpOworCisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIHdvcmtfZ3JvdXBfYnJvYWRjYXN0KGhhbGYgYSwgc2l6ZV90IGxvY2FsX2lkKTsKK2hhbGYgX19vdmxkIHdvcmtfZ3JvdXBfYnJvYWRjYXN0KGhhbGYgYSwgc2l6ZV90IHgsIHNpemVfdCB5KTsKK2hhbGYgX19vdmxkIHdvcmtfZ3JvdXBfYnJvYWRjYXN0KGhhbGYgYSwgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgeik7CisjZW5kaWYKK2ludCBfX292bGQgd29ya19ncm91cF9icm9hZGNhc3QoaW50IGEsIHNpemVfdCBsb2NhbF9pZCk7CitpbnQgX19vdmxkIHdvcmtfZ3JvdXBfYnJvYWRjYXN0KGludCBhLCBzaXplX3QgeCwgc2l6ZV90IHkpOworaW50IF9fb3ZsZCB3b3JrX2dyb3VwX2Jyb2FkY2FzdChpbnQgYSwgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgeik7Cit1aW50IF9fb3ZsZCB3b3JrX2dyb3VwX2Jyb2FkY2FzdCh1aW50IGEsIHNpemVfdCBsb2NhbF9pZCk7Cit1aW50IF9fb3ZsZCB3b3JrX2dyb3VwX2Jyb2FkY2FzdCh1aW50IGEsIHNpemVfdCB4LCBzaXplX3QgeSk7Cit1aW50IF9fb3ZsZCB3b3JrX2dyb3VwX2Jyb2FkY2FzdCh1aW50IGEsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHopOworbG9uZyBfX292bGQgd29ya19ncm91cF9icm9hZGNhc3QobG9uZyBhLCBzaXplX3QgbG9jYWxfaWQpOworbG9uZyBfX292bGQgd29ya19ncm91cF9icm9hZGNhc3QobG9uZyBhLCBzaXplX3QgeCwgc2l6ZV90IHkpOworbG9uZyBfX292bGQgd29ya19ncm91cF9icm9hZGNhc3QobG9uZyBhLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB6KTsKK3Vsb25nIF9fb3ZsZCB3b3JrX2dyb3VwX2Jyb2FkY2FzdCh1bG9uZyBhLCBzaXplX3QgbG9jYWxfaWQpOwordWxvbmcgX19vdmxkIHdvcmtfZ3JvdXBfYnJvYWRjYXN0KHVsb25nIGEsIHNpemVfdCB4LCBzaXplX3QgeSk7Cit1bG9uZyBfX292bGQgd29ya19ncm91cF9icm9hZGNhc3QodWxvbmcgYSwgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgeik7CitmbG9hdCBfX292bGQgd29ya19ncm91cF9icm9hZGNhc3QoZmxvYXQgYSwgc2l6ZV90IGxvY2FsX2lkKTsKK2Zsb2F0IF9fb3ZsZCB3b3JrX2dyb3VwX2Jyb2FkY2FzdChmbG9hdCBhLCBzaXplX3QgeCwgc2l6ZV90IHkpOworZmxvYXQgX19vdmxkIHdvcmtfZ3JvdXBfYnJvYWRjYXN0KGZsb2F0IGEsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHopOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIHdvcmtfZ3JvdXBfYnJvYWRjYXN0KGRvdWJsZSBhLCBzaXplX3QgbG9jYWxfaWQpOworZG91YmxlIF9fb3ZsZCB3b3JrX2dyb3VwX2Jyb2FkY2FzdChkb3VibGUgYSwgc2l6ZV90IHgsIHNpemVfdCB5KTsKK2RvdWJsZSBfX292bGQgd29ya19ncm91cF9icm9hZGNhc3QoZG91YmxlIGEsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHopOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKworI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCB3b3JrX2dyb3VwX3JlZHVjZV9hZGQoaGFsZiB4KTsKK2hhbGYgX19vdmxkIHdvcmtfZ3JvdXBfcmVkdWNlX21pbihoYWxmIHgpOworaGFsZiBfX292bGQgd29ya19ncm91cF9yZWR1Y2VfbWF4KGhhbGYgeCk7CitoYWxmIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX2FkZChoYWxmIHgpOworaGFsZiBfX292bGQgd29ya19ncm91cF9zY2FuX2V4Y2x1c2l2ZV9taW4oaGFsZiB4KTsKK2hhbGYgX19vdmxkIHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWF4KGhhbGYgeCk7CitoYWxmIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX2FkZChoYWxmIHgpOworaGFsZiBfX292bGQgd29ya19ncm91cF9zY2FuX2luY2x1c2l2ZV9taW4oaGFsZiB4KTsKK2hhbGYgX19vdmxkIHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWF4KGhhbGYgeCk7CisjZW5kaWYKK2ludCBfX292bGQgd29ya19ncm91cF9yZWR1Y2VfYWRkKGludCB4KTsKK2ludCBfX292bGQgd29ya19ncm91cF9yZWR1Y2VfbWluKGludCB4KTsKK2ludCBfX292bGQgd29ya19ncm91cF9yZWR1Y2VfbWF4KGludCB4KTsKK2ludCBfX292bGQgd29ya19ncm91cF9zY2FuX2V4Y2x1c2l2ZV9hZGQoaW50IHgpOworaW50IF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbihpbnQgeCk7CitpbnQgX19vdmxkIHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWF4KGludCB4KTsKK2ludCBfX292bGQgd29ya19ncm91cF9zY2FuX2luY2x1c2l2ZV9hZGQoaW50IHgpOworaW50IF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbihpbnQgeCk7CitpbnQgX19vdmxkIHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWF4KGludCB4KTsKK3VpbnQgX19vdmxkIHdvcmtfZ3JvdXBfcmVkdWNlX2FkZCh1aW50IHgpOwordWludCBfX292bGQgd29ya19ncm91cF9yZWR1Y2VfbWluKHVpbnQgeCk7Cit1aW50IF9fb3ZsZCB3b3JrX2dyb3VwX3JlZHVjZV9tYXgodWludCB4KTsKK3VpbnQgX19vdmxkIHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfYWRkKHVpbnQgeCk7Cit1aW50IF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbih1aW50IHgpOwordWludCBfX292bGQgd29ya19ncm91cF9zY2FuX2V4Y2x1c2l2ZV9tYXgodWludCB4KTsKK3VpbnQgX19vdmxkIHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfYWRkKHVpbnQgeCk7Cit1aW50IF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbih1aW50IHgpOwordWludCBfX292bGQgd29ya19ncm91cF9zY2FuX2luY2x1c2l2ZV9tYXgodWludCB4KTsKK2xvbmcgX19vdmxkIHdvcmtfZ3JvdXBfcmVkdWNlX2FkZChsb25nIHgpOworbG9uZyBfX292bGQgd29ya19ncm91cF9yZWR1Y2VfbWluKGxvbmcgeCk7Citsb25nIF9fb3ZsZCB3b3JrX2dyb3VwX3JlZHVjZV9tYXgobG9uZyB4KTsKK2xvbmcgX19vdmxkIHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfYWRkKGxvbmcgeCk7Citsb25nIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbihsb25nIHgpOworbG9uZyBfX292bGQgd29ya19ncm91cF9zY2FuX2V4Y2x1c2l2ZV9tYXgobG9uZyB4KTsKK2xvbmcgX19vdmxkIHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfYWRkKGxvbmcgeCk7Citsb25nIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbihsb25nIHgpOworbG9uZyBfX292bGQgd29ya19ncm91cF9zY2FuX2luY2x1c2l2ZV9tYXgobG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCB3b3JrX2dyb3VwX3JlZHVjZV9hZGQodWxvbmcgeCk7Cit1bG9uZyBfX292bGQgd29ya19ncm91cF9yZWR1Y2VfbWluKHVsb25nIHgpOwordWxvbmcgX19vdmxkIHdvcmtfZ3JvdXBfcmVkdWNlX21heCh1bG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX2FkZCh1bG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbih1bG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21heCh1bG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX2FkZCh1bG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbih1bG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21heCh1bG9uZyB4KTsKK2Zsb2F0IF9fb3ZsZCB3b3JrX2dyb3VwX3JlZHVjZV9hZGQoZmxvYXQgeCk7CitmbG9hdCBfX292bGQgd29ya19ncm91cF9yZWR1Y2VfbWluKGZsb2F0IHgpOworZmxvYXQgX19vdmxkIHdvcmtfZ3JvdXBfcmVkdWNlX21heChmbG9hdCB4KTsKK2Zsb2F0IF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX2FkZChmbG9hdCB4KTsKK2Zsb2F0IF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbihmbG9hdCB4KTsKK2Zsb2F0IF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21heChmbG9hdCB4KTsKK2Zsb2F0IF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX2FkZChmbG9hdCB4KTsKK2Zsb2F0IF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbihmbG9hdCB4KTsKK2Zsb2F0IF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21heChmbG9hdCB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCB3b3JrX2dyb3VwX3JlZHVjZV9hZGQoZG91YmxlIHgpOworZG91YmxlIF9fb3ZsZCB3b3JrX2dyb3VwX3JlZHVjZV9taW4oZG91YmxlIHgpOworZG91YmxlIF9fb3ZsZCB3b3JrX2dyb3VwX3JlZHVjZV9tYXgoZG91YmxlIHgpOworZG91YmxlIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX2FkZChkb3VibGUgeCk7Citkb3VibGUgX19vdmxkIHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWluKGRvdWJsZSB4KTsKK2RvdWJsZSBfX292bGQgd29ya19ncm91cF9zY2FuX2V4Y2x1c2l2ZV9tYXgoZG91YmxlIHgpOworZG91YmxlIF9fb3ZsZCB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX2FkZChkb3VibGUgeCk7Citkb3VibGUgX19vdmxkIHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWluKGRvdWJsZSB4KTsKK2RvdWJsZSBfX292bGQgd29ya19ncm91cF9zY2FuX2luY2x1c2l2ZV9tYXgoZG91YmxlIHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLy8gT3BlbkNMIHYyLjAgczYuMTMuMTYgLSBQaXBlIEZ1bmN0aW9ucworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisjZGVmaW5lIFBJUEVfUkVTRVJWRV9JRF9WQUxJRF9CSVQgKDFVIDw8IDMwKQorI2RlZmluZSBDTEtfTlVMTF9SRVNFUlZFX0lEIChfX2J1aWx0aW5fYXN0eXBlKCgodm9pZCopKF9fU0laRV9NQVhfXykpLCByZXNlcnZlX2lkX3QpKQorYm9vbCBfX292bGQgaXNfdmFsaWRfcmVzZXJ2ZV9pZChyZXNlcnZlX2lkX3QgcmVzZXJ2ZV9pZCk7CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisKKy8vIE9wZW5DTCB2Mi4wIHM2LjEzLjE3IC0gRW5xdWV1ZSBLZXJuZWxzCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworI2RlZmluZSBDTF9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBDTF9SVU5OSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBDTF9TVUJNSVRURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSBDTF9RVUVVRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MworCisjZGVmaW5lIENMS19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDTEtfRU5RVUVVRV9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDEKKyNkZWZpbmUgQ0xLX0lOVkFMSURfUVVFVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTAyCisjZGVmaW5lIENMS19JTlZBTElEX05EUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgLTE2MAorI2RlZmluZSBDTEtfSU5WQUxJRF9FVkVOVF9XQUlUX0xJU1QgICAgICAgICAgICAgICAgIC01NworI2RlZmluZSBDTEtfREVWSUNFX1FVRVVFX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgIC0xNjEKKyNkZWZpbmUgQ0xLX0lOVkFMSURfQVJHX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAtNTEKKyNkZWZpbmUgQ0xLX0VWRU5UX0FMTE9DQVRJT05fRkFJTFVSRSAgICAgICAgICAgICAgICAtMTAwCisjZGVmaW5lIENMS19PVVRfT0ZfUkVTT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgLTUKKworI2RlZmluZSBDTEtfTlVMTF9RVUVVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ0xLX05VTExfRVZFTlQgKF9fYnVpbHRpbl9hc3R5cGUoKCh2b2lkKikoX19TSVpFX01BWF9fKSksIGNsa19ldmVudF90KSkKKworLy8gZXhlY3V0aW9uIG1vZGVsIHJlbGF0ZWQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgQ0xLX0VOUVVFVUVfRkxBR1NfTk9fV0FJVCAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgQ0xLX0VOUVVFVUVfRkxBR1NfV0FJVF9LRVJORUwgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgQ0xLX0VOUVVFVUVfRkxBR1NfV0FJVF9XT1JLX0dST1VQICAgICAgICAgICAweDIKKwordHlwZWRlZiBpbnQga2VybmVsX2VucXVldWVfZmxhZ3NfdDsKK3R5cGVkZWYgaW50IGNsa19wcm9maWxpbmdfaW5mbzsKKworLy8gUHJvZmlsaW5nIGluZm8gbmFtZSAoc2VlIGNhcHR1cmVfZXZlbnRfcHJvZmlsaW5nX2luZm8pCisjZGVmaW5lIENMS19QUk9GSUxJTkdfQ09NTUFORF9FWEVDX1RJTUUgMHgxCisKKyNkZWZpbmUgTUFYX1dPUktfRElNICAgICAgICAzCisKKy8vIFRvRG86IFJlbW92ZSBkZWZpbml0aW9uIG9mIG5kcmFuZ2VfdCBpbiBDbGFuZyBhcyBhbiBvcGFxdWUgdHlwZSBhbmQgYWRkIGJhY2sKKy8vIHRoZSBmb2xsb3dpbmcgbmRyYW5nZV90IGRlZmluaXRpb24uCisjaWYgMAordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCB3b3JrRGltZW5zaW9uOworICAgIHNpemVfdCBnbG9iYWxXb3JrT2Zmc2V0W01BWF9XT1JLX0RJTV07CisgICAgc2l6ZV90IGdsb2JhbFdvcmtTaXplW01BWF9XT1JLX0RJTV07CisgICAgc2l6ZV90IGxvY2FsV29ya1NpemVbTUFYX1dPUktfRElNXTsKK30gbmRyYW5nZV90OworI2VuZGlmCisKK25kcmFuZ2VfdCBfX292bGQgbmRyYW5nZV8xRChzaXplX3QpOworbmRyYW5nZV90IF9fb3ZsZCBuZHJhbmdlXzFEKHNpemVfdCwgc2l6ZV90KTsKK25kcmFuZ2VfdCBfX292bGQgbmRyYW5nZV8xRChzaXplX3QsIHNpemVfdCwgc2l6ZV90KTsKKworbmRyYW5nZV90IF9fb3ZsZCBuZHJhbmdlXzJEKGNvbnN0IHNpemVfdFsyXSk7CituZHJhbmdlX3QgX19vdmxkIG5kcmFuZ2VfMkQoY29uc3Qgc2l6ZV90WzJdLCBjb25zdCBzaXplX3RbMl0pOworbmRyYW5nZV90IF9fb3ZsZCBuZHJhbmdlXzJEKGNvbnN0IHNpemVfdFsyXSwgY29uc3Qgc2l6ZV90WzJdLCBjb25zdCBzaXplX3RbMl0pOworCituZHJhbmdlX3QgX19vdmxkIG5kcmFuZ2VfM0QoY29uc3Qgc2l6ZV90WzNdKTsKK25kcmFuZ2VfdCBfX292bGQgbmRyYW5nZV8zRChjb25zdCBzaXplX3RbM10sIGNvbnN0IHNpemVfdFszXSk7CituZHJhbmdlX3QgX19vdmxkIG5kcmFuZ2VfM0QoY29uc3Qgc2l6ZV90WzNdLCBjb25zdCBzaXplX3RbM10sIGNvbnN0IHNpemVfdFszXSk7CisKK2ludCBfX292bGQgZW5xdWV1ZV9tYXJrZXIocXVldWVfdCwgdWludCwgY29uc3QgX19wcml2YXRlIGNsa19ldmVudF90KiwgX19wcml2YXRlIGNsa19ldmVudF90Kik7CisKK3ZvaWQgX19vdmxkIHJldGFpbl9ldmVudChjbGtfZXZlbnRfdCk7CisKK3ZvaWQgX19vdmxkIHJlbGVhc2VfZXZlbnQoY2xrX2V2ZW50X3QpOworCitjbGtfZXZlbnRfdCBjcmVhdGVfdXNlcl9ldmVudCh2b2lkKTsKKwordm9pZCBfX292bGQgc2V0X3VzZXJfZXZlbnRfc3RhdHVzKGNsa19ldmVudF90IGUsIGludCBzdGF0ZSk7CisKK2Jvb2wgaXNfdmFsaWRfZXZlbnQgKGNsa19ldmVudF90IGV2ZW50KTsKKwordm9pZCBfX292bGQgY2FwdHVyZV9ldmVudF9wcm9maWxpbmdfaW5mbyhjbGtfZXZlbnRfdCwgY2xrX3Byb2ZpbGluZ19pbmZvLCBfX2dsb2JhbCB2b2lkKiB2YWx1ZSk7CisKK3F1ZXVlX3QgX19vdmxkIGdldF9kZWZhdWx0X3F1ZXVlKHZvaWQpOworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLy8gT3BlbkNMIEV4dGVuc2lvbiB2Mi4wIHM5LjE3IC0gU3ViLWdyb3VwcworCisjaWYgZGVmaW5lZChjbF9pbnRlbF9zdWJncm91cHMpIHx8IGRlZmluZWQoY2xfa2hyX3N1Ymdyb3VwcykKKy8vIFNoYXJlZCBTdWIgR3JvdXAgRnVuY3Rpb25zCit1aW50ICAgIF9fb3ZsZCBnZXRfc3ViX2dyb3VwX3NpemUodm9pZCk7Cit1aW50ICAgIF9fb3ZsZCBnZXRfbWF4X3N1Yl9ncm91cF9zaXplKHZvaWQpOwordWludCAgICBfX292bGQgZ2V0X251bV9zdWJfZ3JvdXBzKHZvaWQpOworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCit1aW50ICAgIF9fb3ZsZCBnZXRfZW5xdWV1ZWRfbnVtX3N1Yl9ncm91cHModm9pZCk7CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAordWludCAgICBfX292bGQgZ2V0X3N1Yl9ncm91cF9pZCh2b2lkKTsKK3VpbnQgICAgX19vdmxkIGdldF9zdWJfZ3JvdXBfbG9jYWxfaWQodm9pZCk7CisKK3ZvaWQgICAgX19vdmxkIHN1Yl9ncm91cF9iYXJyaWVyKGNsX21lbV9mZW5jZV9mbGFncyBmbGFncyk7CisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK3ZvaWQgICAgX19vdmxkIHN1Yl9ncm91cF9iYXJyaWVyKGNsX21lbV9mZW5jZV9mbGFncyBmbGFncywgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKK2ludCAgICAgX19vdmxkIHN1Yl9ncm91cF9hbGwoaW50IHByZWRpY2F0ZSk7CitpbnQgICAgIF9fb3ZsZCBzdWJfZ3JvdXBfYW55KGludCBwcmVkaWNhdGUpOworCitpbnQgICAgIF9fb3ZsZCBzdWJfZ3JvdXBfYnJvYWRjYXN0KGludCAgIHgsIHVpbnQgc3ViX2dyb3VwX2xvY2FsX2lkKTsKK3VpbnQgICAgX19vdmxkIHN1Yl9ncm91cF9icm9hZGNhc3QodWludCAgeCwgdWludCBzdWJfZ3JvdXBfbG9jYWxfaWQpOworbG9uZyAgICBfX292bGQgc3ViX2dyb3VwX2Jyb2FkY2FzdChsb25nICB4LCB1aW50IHN1Yl9ncm91cF9sb2NhbF9pZCk7Cit1bG9uZyAgIF9fb3ZsZCBzdWJfZ3JvdXBfYnJvYWRjYXN0KHVsb25nIHgsIHVpbnQgc3ViX2dyb3VwX2xvY2FsX2lkKTsKK2Zsb2F0ICAgX19vdmxkIHN1Yl9ncm91cF9icm9hZGNhc3QoZmxvYXQgeCwgdWludCBzdWJfZ3JvdXBfbG9jYWxfaWQpOworCitpbnQgICAgIF9fb3ZsZCBzdWJfZ3JvdXBfcmVkdWNlX2FkZChpbnQgICB4KTsKK3VpbnQgICAgX19vdmxkIHN1Yl9ncm91cF9yZWR1Y2VfYWRkKHVpbnQgIHgpOworbG9uZyAgICBfX292bGQgc3ViX2dyb3VwX3JlZHVjZV9hZGQobG9uZyAgeCk7Cit1bG9uZyAgIF9fb3ZsZCBzdWJfZ3JvdXBfcmVkdWNlX2FkZCh1bG9uZyB4KTsKK2Zsb2F0ICAgX19vdmxkIHN1Yl9ncm91cF9yZWR1Y2VfYWRkKGZsb2F0IHgpOworaW50ICAgICBfX292bGQgc3ViX2dyb3VwX3JlZHVjZV9taW4oaW50ICAgeCk7Cit1aW50ICAgIF9fb3ZsZCBzdWJfZ3JvdXBfcmVkdWNlX21pbih1aW50ICB4KTsKK2xvbmcgICAgX19vdmxkIHN1Yl9ncm91cF9yZWR1Y2VfbWluKGxvbmcgIHgpOwordWxvbmcgICBfX292bGQgc3ViX2dyb3VwX3JlZHVjZV9taW4odWxvbmcgeCk7CitmbG9hdCAgIF9fb3ZsZCBzdWJfZ3JvdXBfcmVkdWNlX21pbihmbG9hdCB4KTsKK2ludCAgICAgX19vdmxkIHN1Yl9ncm91cF9yZWR1Y2VfbWF4KGludCAgIHgpOwordWludCAgICBfX292bGQgc3ViX2dyb3VwX3JlZHVjZV9tYXgodWludCAgeCk7Citsb25nICAgIF9fb3ZsZCBzdWJfZ3JvdXBfcmVkdWNlX21heChsb25nICB4KTsKK3Vsb25nICAgX19vdmxkIHN1Yl9ncm91cF9yZWR1Y2VfbWF4KHVsb25nIHgpOworZmxvYXQgICBfX292bGQgc3ViX2dyb3VwX3JlZHVjZV9tYXgoZmxvYXQgeCk7CisKK2ludCAgICAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9hZGQoaW50ICAgeCk7Cit1aW50ICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfYWRkKHVpbnQgIHgpOworbG9uZyAgICBfX292bGQgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX2FkZChsb25nICB4KTsKK3Vsb25nICAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9hZGQodWxvbmcgeCk7CitmbG9hdCAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfYWRkKGZsb2F0IHgpOworaW50ICAgICBfX292bGQgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbihpbnQgICB4KTsKK3VpbnQgICAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9taW4odWludCAgeCk7Citsb25nICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWluKGxvbmcgIHgpOwordWxvbmcgICBfX292bGQgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbih1bG9uZyB4KTsKK2Zsb2F0ICAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9taW4oZmxvYXQgeCk7CitpbnQgICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWF4KGludCAgIHgpOwordWludCAgICBfX292bGQgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21heCh1aW50ICB4KTsKK2xvbmcgICAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9tYXgobG9uZyAgeCk7Cit1bG9uZyAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWF4KHVsb25nIHgpOworZmxvYXQgICBfX292bGQgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21heChmbG9hdCB4KTsKKworaW50ICAgICBfX292bGQgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX2FkZChpbnQgICB4KTsKK3VpbnQgICAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9hZGQodWludCAgeCk7Citsb25nICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfYWRkKGxvbmcgIHgpOwordWxvbmcgICBfX292bGQgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX2FkZCh1bG9uZyB4KTsKK2Zsb2F0ICAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9hZGQoZmxvYXQgeCk7CitpbnQgICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWluKGludCAgIHgpOwordWludCAgICBfX292bGQgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbih1aW50ICB4KTsKK2xvbmcgICAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9taW4obG9uZyAgeCk7Cit1bG9uZyAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWluKHVsb25nIHgpOworZmxvYXQgICBfX292bGQgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbihmbG9hdCB4KTsKK2ludCAgICAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9tYXgoaW50ICAgeCk7Cit1aW50ICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWF4KHVpbnQgIHgpOworbG9uZyAgICBfX292bGQgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX21heChsb25nICB4KTsKK3Vsb25nICAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9tYXgodWxvbmcgeCk7CitmbG9hdCAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWF4KGZsb2F0IHgpOworCisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgICAgX19vdmxkIHN1Yl9ncm91cF9icm9hZGNhc3QoaGFsZiB4LCB1aW50IHN1Yl9ncm91cF9sb2NhbF9pZCk7CitoYWxmICAgIF9fb3ZsZCBzdWJfZ3JvdXBfcmVkdWNlX2FkZChoYWxmIHgpOworaGFsZiAgICBfX292bGQgc3ViX2dyb3VwX3JlZHVjZV9taW4oaGFsZiB4KTsKK2hhbGYgICAgX19vdmxkIHN1Yl9ncm91cF9yZWR1Y2VfbWF4KGhhbGYgeCk7CitoYWxmICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfYWRkKGhhbGYgeCk7CitoYWxmICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWluKGhhbGYgeCk7CitoYWxmICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWF4KGhhbGYgeCk7CitoYWxmICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfYWRkKGhhbGYgeCk7CitoYWxmICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWluKGhhbGYgeCk7CitoYWxmICAgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWF4KGhhbGYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSAgX19vdmxkIHN1Yl9ncm91cF9icm9hZGNhc3QoZG91YmxlIHgsIHVpbnQgc3ViX2dyb3VwX2xvY2FsX2lkKTsKK2RvdWJsZSAgX19vdmxkIHN1Yl9ncm91cF9yZWR1Y2VfYWRkKGRvdWJsZSB4KTsKK2RvdWJsZSAgX19vdmxkIHN1Yl9ncm91cF9yZWR1Y2VfbWluKGRvdWJsZSB4KTsKK2RvdWJsZSAgX19vdmxkIHN1Yl9ncm91cF9yZWR1Y2VfbWF4KGRvdWJsZSB4KTsKK2RvdWJsZSAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9hZGQoZG91YmxlIHgpOworZG91YmxlICBfX292bGQgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbihkb3VibGUgeCk7Citkb3VibGUgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWF4KGRvdWJsZSB4KTsKK2RvdWJsZSAgX19vdmxkIHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9hZGQoZG91YmxlIHgpOworZG91YmxlICBfX292bGQgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbihkb3VibGUgeCk7Citkb3VibGUgIF9fb3ZsZCBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWF4KGRvdWJsZSB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKyNlbmRpZiAvL2NsX2tocl9zdWJncm91cHMgY2xfaW50ZWxfc3ViZ3JvdXBzCisKKy8vIERpc2FibGUgYW55IGV4dGVuc2lvbnMgd2UgbWF5IGhhdmUgZW5hYmxlZCBwcmV2aW91c2x5LgorI3ByYWdtYSBPUEVOQ0wgRVhURU5TSU9OIGFsbCA6IGRpc2FibGUKKworI3VuZGVmIF9fY25mbgorI3VuZGVmIF9fb3ZsZAorI2VuZGlmIC8vX09QRU5DTF9IXwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9wa3VpbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcGt1aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1NDU5NAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcGt1aW50cmluLmgKQEAgLTAsMCArMSw0OCBAQAorLyo9PT0tLS0tLS0tLS0tLS0tIHBrdWludHJpbi5oIC0gUEtVIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHBrdWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19QS1VJTlRSSU5fSAorI2RlZmluZSBfX1BLVUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicGt1IikpKQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcmRwa3J1X3UzMih2b2lkKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcmRwa3J1KCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfd3Jwa3J1KHVuc2lnbmVkIGludCBfX3ZhbCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3dycGtydShfX3ZhbCk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3BtbWludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9wbW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjEwNTgwCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9wbW1pbnRyaW4uaApAQCAtMCwwICsxLDMxMSBAQAorLyo9PT0tLS0tIHBtbWludHJpbi5oIC0gU1NFMyBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1BNTUlOVFJJTl9ICisjZGVmaW5lIF9fUE1NSU5UUklOX0gKKworI2luY2x1ZGUgPGVtbWludHJpbi5oPgorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBcCisgIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygic3NlMyIpKSkKKworLy8vIFxicmllZiBMb2FkcyBkYXRhIGZyb20gYW4gdW5hbGlnbmVkIG1lbW9yeSBsb2NhdGlvbiB0byBlbGVtZW50cyBpbiBhIDEyOC1iaXQKKy8vLyAgICB2ZWN0b3IuIElmIHRoZSBhZGRyZXNzIG9mIHRoZSBkYXRhIGlzIG5vdCAxNi1ieXRlIGFsaWduZWQsIHRoZQorLy8vICAgIGluc3RydWN0aW9uIG1heSByZWFkIHR3byBhZGphY2VudCBhbGlnbmVkIGJsb2NrcyBvZiBtZW1vcnkgdG8gcmV0cmlldmUKKy8vLyAgICB0aGUgcmVxdWVzdGVkIGRhdGEuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkxERFFVIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBpbnRlZ2VyIHZhbHVlcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG1vdmVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbGRkcXVfc2kxMjgoX19tMTI4aSBjb25zdCAqX19wKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfbGRkcXUoKGNoYXIgY29uc3QgKilfX3ApOworfQorCisvLy8gXGJyaWVmIEFkZHMgdGhlIGV2ZW4taW5kZXhlZCB2YWx1ZXMgYW5kIHN1YnRyYWN0cyB0aGUgb2RkLWluZGV4ZWQgdmFsdWVzIG9mCisvLy8gICAgdHdvIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQUREU1VCUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBsZWZ0IHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHJpZ2h0IHNvdXJjZSBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgYWx0ZXJuYXRpbmcgc3VtcyBhbmQKKy8vLyAgICBkaWZmZXJlbmNlcyBvZiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHN1Yl9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfYWRkc3VicHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBIb3Jpem9udGFsbHkgYWRkcyB0aGUgYWRqYWNlbnQgcGFpcnMgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiB0d28KKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkhBRERQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgc3VtcyBvZgorLy8vICAgIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfaGFkZHBzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IHN1YnRyYWN0cyB0aGUgYWRqYWNlbnQgcGFpcnMgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiB0d28KKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkhTVUJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGhvcml6b250YWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyCisvLy8gICAgYml0cyBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIKKy8vLyAgICBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwKKy8vLyAgICBkaWZmZXJlbmNlcyBvZiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2hzdWJwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIE1vdmVzIGFuZCBkdXBsaWNhdGVzIGhpZ2gtb3JkZXIgKG9kZC1pbmRleGVkKSB2YWx1ZXMgZnJvbSBhIDEyOC1iaXQKKy8vLyAgICB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gdG8gZmxvYXQgdmFsdWVzIHN0b3JlZCBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBmbG9hdF0uCisvLy8gICAgQml0cyBbMTI3Ojk2XSBvZiB0aGUgc291cmNlIGFyZSB3cml0dGVuIHRvIGJpdHMgWzEyNzo5Nl0gYW5kIFs5NTo2NF0gb2YKKy8vLyAgICB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIHdyaXR0ZW4gdG8gYml0cyBbNjM6MzJdIGFuZCBbMzE6MF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlNIRFVQIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBtb3ZlZCBhbmQgZHVwbGljYXRlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlaGR1cF9wcyhfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19hLCAxLCAxLCAzLCAzKTsKK30KKworLy8vIFxicmllZiBEdXBsaWNhdGVzIGxvdy1vcmRlciAoZXZlbi1pbmRleGVkKSB2YWx1ZXMgZnJvbSBhIDEyOC1iaXQKKy8vLyAgICB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gdG8gZmxvYXQgdmFsdWVzIHN0b3JlZCBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBmbG9hdF0uCisvLy8gICAgQml0cyBbOTU6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTI3Ojk2XSBhbmQgWzk1OjY0XSBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjMyXSBhbmQgWzMxOjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZTTERVUCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbW92ZWQgYW5kIGR1cGxpY2F0ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZWxkdXBfcHMoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYSwgMCwgMCwgMiwgMik7Cit9CisKKy8vLyBcYnJpZWYgQWRkcyB0aGUgZXZlbi1pbmRleGVkIHZhbHVlcyBhbmQgc3VidHJhY3RzIHRoZSBvZGQtaW5kZXhlZCB2YWx1ZXMgb2YKKy8vLyAgICB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQUREU1VCUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgbGVmdCBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgcmlnaHQgc291cmNlIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgYWx0ZXJuYXRpbmcgc3VtcworLy8vICAgIGFuZCBkaWZmZXJlbmNlcyBvZiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRzdWJfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfYWRkc3VicGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBIb3Jpem9udGFsbHkgYWRkcyB0aGUgcGFpcnMgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiB0d28gMTI4LWJpdAorLy8vICAgIHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZIQUREUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBzdW0gb2YgdGhlIHZhbHVlcyBpcyBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGhvcml6b250YWwgc3VtIG9mIHRoZSB2YWx1ZXMgaXMgc3RvcmVkIGluIHRoZSB1cHBlciBiaXRzIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgc3VtcyBvZgorLy8vICAgIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfaGFkZHBkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IHN1YnRyYWN0cyB0aGUgcGFpcnMgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiB0d28gMTI4LWJpdAorLy8vICAgIHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZIU1VCUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBkaWZmZXJlbmNlIG9mIHRoZSB2YWx1ZXMgaXMgc3RvcmVkIGluIHRoZSBsb3dlciBiaXRzIG9mCisvLy8gICAgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vICAgIFRoZSBob3Jpem9udGFsIGRpZmZlcmVuY2Ugb2YgdGhlIHZhbHVlcyBpcyBzdG9yZWQgaW4gdGhlIHVwcGVyIGJpdHMgb2YKKy8vLyAgICB0aGUgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbAorLy8vICAgIGRpZmZlcmVuY2VzIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfaHN1YnBkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgTW92ZXMgYW5kIGR1cGxpY2F0ZXMgb25lIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgdG8gZG91YmxlLXByZWNpc2lvbgorLy8vICAgIHZhbHVlcyBzdG9yZWQgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOGQgX21tX2xvYWRkdXBfcGQoZG91YmxlIGNvbnN0ICogZHApOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkREVVAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gZHAKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIHRvIGJlIG1vdmVkIGFuZCBkdXBsaWNhdGVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIG1vdmVkIGFuZAorLy8vICAgIGR1cGxpY2F0ZWQgdmFsdWVzLgorI2RlZmluZSAgICAgICAgX21tX2xvYWRkdXBfcGQoZHApICAgICAgICBfbW1fbG9hZDFfcGQoZHApCisKKy8vLyBcYnJpZWYgTW92ZXMgYW5kIGR1cGxpY2F0ZXMgdGhlIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaW4gdGhlIGxvd2VyIGJpdHMgb2YKKy8vLyAgICBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSB0byBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBzdG9yZWQgaW4gYQorLy8vICAgIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WRERVUCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gQml0cyBbNjM6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cworLy8vICAgIFsxMjc6NjRdIGFuZCBbNjM6MF0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIG1vdmVkIGFuZAorLy8vICAgIGR1cGxpY2F0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlZHVwX3BkKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkZilfX2EsIChfX3YyZGYpX19hLCAwLCAwKTsKK30KKworI2RlZmluZSBfTU1fREVOT1JNQUxTX1pFUk9fT04gICAoMHgwMDQwKQorI2RlZmluZSBfTU1fREVOT1JNQUxTX1pFUk9fT0ZGICAoMHgwMDAwKQorCisjZGVmaW5lIF9NTV9ERU5PUk1BTFNfWkVST19NQVNLICgweDAwNDApCisKKyNkZWZpbmUgX01NX0dFVF9ERU5PUk1BTFNfWkVST19NT0RFKCkgKF9tbV9nZXRjc3IoKSAmIF9NTV9ERU5PUk1BTFNfWkVST19NQVNLKQorI2RlZmluZSBfTU1fU0VUX0RFTk9STUFMU19aRVJPX01PREUoeCkgKF9tbV9zZXRjc3IoKF9tbV9nZXRjc3IoKSAmIH5fTU1fREVOT1JNQUxTX1pFUk9fTUFTSykgfCAoeCkpKQorCisvLy8gXGJyaWVmIEVzdGFibGlzaGVzIGEgbGluZWFyIGFkZHJlc3MgbWVtb3J5IHJhbmdlIHRvIGJlIG1vbml0b3JlZCBhbmQgcHV0cworLy8vICAgIHRoZSBwcm9jZXNzb3IgaW4gdGhlIG1vbml0b3IgZXZlbnQgcGVuZGluZyBzdGF0ZS4gRGF0YSBzdG9yZWQgaW4gdGhlCisvLy8gICAgbW9uaXRvcmVkIGFkZHJlc3MgcmFuZ2UgY2F1c2VzIHRoZSBwcm9jZXNzb3IgdG8gZXhpdCB0aGUgcGVuZGluZyBzdGF0ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBNT05JVE9SIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIFRoZSBtZW1vcnkgcmFuZ2UgdG8gYmUgbW9uaXRvcmVkLiBUaGUgc2l6ZSBvZiB0aGUgcmFuZ2UgaXMgZGV0ZXJtaW5lZCBieQorLy8vICAgIENQVUlEIGZ1bmN0aW9uIDAwMDBfMDAwNWguCisvLy8gXHBhcmFtIF9fZXh0ZW5zaW9ucworLy8vICAgIE9wdGlvbmFsIGV4dGVuc2lvbnMgZm9yIHRoZSBtb25pdG9yaW5nIHN0YXRlLgorLy8vIFxwYXJhbSBfX2hpbnRzCisvLy8gICAgT3B0aW9uYWwgaGludHMgZm9yIHRoZSBtb25pdG9yaW5nIHN0YXRlLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb25pdG9yKHZvaWQgY29uc3QgKl9fcCwgdW5zaWduZWQgX19leHRlbnNpb25zLCB1bnNpZ25lZCBfX2hpbnRzKQoreworICBfX2J1aWx0aW5faWEzMl9tb25pdG9yKCh2b2lkICopX19wLCBfX2V4dGVuc2lvbnMsIF9faGludHMpOworfQorCisvLy8gXGJyaWVmIFVzZWQgd2l0aCB0aGUgTU9OSVRPUiBpbnN0cnVjdGlvbiB0byB3YWl0IHdoaWxlIHRoZSBwcm9jZXNzb3IgaXMgaW4KKy8vLyAgICB0aGUgbW9uaXRvciBldmVudCBwZW5kaW5nIHN0YXRlLiBEYXRhIHN0b3JlZCBpbiB0aGUgbW9uaXRvcmVkIGFkZHJlc3MKKy8vLyAgICByYW5nZSBjYXVzZXMgdGhlIHByb2Nlc3NvciB0byBleGl0IHRoZSBwZW5kaW5nIHN0YXRlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIE1XQUlUIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fZXh0ZW5zaW9ucworLy8vICAgIE9wdGlvbmFsIGV4dGVuc2lvbnMgZm9yIHRoZSBtb25pdG9yaW5nIHN0YXRlLCB3aGljaCBtYXkgdmFyeSBieQorLy8vICAgIHByb2Nlc3Nvci4KKy8vLyBccGFyYW0gX19oaW50cworLy8vICAgIE9wdGlvbmFsIGhpbnRzIGZvciB0aGUgbW9uaXRvcmluZyBzdGF0ZSwgd2hpY2ggbWF5IHZhcnkgYnkgcHJvY2Vzc29yLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9td2FpdCh1bnNpZ25lZCBfX2V4dGVuc2lvbnMsIHVuc2lnbmVkIF9faGludHMpCit7CisgIF9fYnVpbHRpbl9pYTMyX213YWl0KF9fZXh0ZW5zaW9ucywgX19oaW50cyk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fUE1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcG9wY250aW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3BvcGNudGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMmYxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3BvcGNudGludHJpbi5oCkBAIC0wLDAgKzEsOTggQEAKKy8qPT09LS0tLSBwb3BjbnRpbnRyaW4uaCAtIFBPUENOVCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX1BPUENOVElOVFJJTl9ICisjZGVmaW5lIF9QT1BDTlRJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInBvcGNudCIpKSkKKworLy8vIFxicmllZiBDb3VudHMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBzb3VyY2Ugb3BlcmFuZCBoYXZpbmcgYSB2YWx1ZSBvZiAxLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBPUENOVCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX0EKKy8vLyAgICBBbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMzItYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGJpdHMgd2l0aCB2YWx1ZSAxIGluIHRoZQorLy8vICAgIHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BvcGNudF91MzIodW5zaWduZWQgaW50IF9fQSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudChfX0EpOworfQorCisvLy8gXGJyaWVmIENvdW50cyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIHNvdXJjZSBvcGVyYW5kIGhhdmluZyBhIHZhbHVlIG9mIDEuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE9QQ05UIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fQQorLy8vICAgIEEgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgYml0cyB3aXRoIHZhbHVlIDEgaW4gdGhlCisvLy8gICAgc291cmNlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcG9wY250MzIoaW50IF9fQSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudChfX0EpOworfQorCisjaWZkZWYgX194ODZfNjRfXworLy8vIFxicmllZiBDb3VudHMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBzb3VyY2Ugb3BlcmFuZCBoYXZpbmcgYSB2YWx1ZSBvZiAxLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBPUENOVCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX0EKKy8vLyAgICBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGJpdHMgd2l0aCB2YWx1ZSAxIGluIHRoZQorLy8vICAgIHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BvcGNudF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fQSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKF9fQSk7Cit9CisKKy8vLyBcYnJpZWYgQ291bnRzIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgc291cmNlIG9wZXJhbmQgaGF2aW5nIGEgdmFsdWUgb2YgMS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQT1BDTlQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19BCisvLy8gICAgQSBzaWduZWQgNjQtYml0IGludGVnZXIgb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBiaXRzIHdpdGggdmFsdWUgMSBpbiB0aGUKKy8vLyAgICBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19wb3BjbnQ2NChsb25nIGxvbmcgX19BKQoreworICByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwoX19BKTsKK30KKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9QT1BDTlRJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9wcmZjaHdpbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcHJmY2h3aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwMjg1NwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcHJmY2h3aW50cmluLmgKQEAgLTAsMCArMSw0NSBAQAorLyo9PT0tLS0tIHByZmNod2ludHJpbi5oIC0gUFJFRkVUQ0hXIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmICFkZWZpbmVkKF9fWDg2SU5UUklOX0gpICYmICFkZWZpbmVkKF9NTTNETk9XX0hfSU5DTFVERUQpCisjZXJyb3IgIk5ldmVyIHVzZSA8cHJmY2h3aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gb3IgPG1tM2Rub3cuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX1BSRkNIV0lOVFJJTl9ICisjZGVmaW5lIF9fUFJGQ0hXSU5UUklOX0gKKworI2lmIGRlZmluZWQoX19QUkZDSFdfXykgfHwgZGVmaW5lZChfXzNkTk9XX18pCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfbV9wcmVmZXRjaCh2b2lkICpfX1ApCit7CisgIF9fYnVpbHRpbl9wcmVmZXRjaCAoX19QLCAwLCAzIC8qIF9NTV9ISU5UX1QwICovKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX21fcHJlZmV0Y2h3KHZvaWQgKl9fUCkKK3sKKyAgX19idWlsdGluX3ByZWZldGNoIChfX1AsIDEsIDMgLyogX01NX0hJTlRfVDAgKi8pOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1BSRkNIV0lOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Jkc2VlZGludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9yZHNlZWRpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjFmNGVhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9yZHNlZWRpbnRyaW4uaApAQCAtMCwwICsxLDU2IEBACisvKj09PS0tLS0gcmRzZWVkaW50cmluLmggLSBSRFNFRUQgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fWDg2SU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxyZHNlZWRpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHg4NmludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fUkRTRUVESU5UUklOX0gKKyNkZWZpbmUgX19SRFNFRURJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInJkc2VlZCIpKSkKKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX3Jkc2VlZDE2X3N0ZXAodW5zaWduZWQgc2hvcnQgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Jkc2VlZDE2X3N0ZXAoX19wKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX3Jkc2VlZDMyX3N0ZXAodW5zaWduZWQgaW50ICpfX3ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHNlZWQzMl9zdGVwKF9fcCk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcmRzZWVkNjRfc3RlcCh1bnNpZ25lZCBsb25nIGxvbmcgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Jkc2VlZDY0X3N0ZXAoX19wKTsKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX1JEU0VFRElOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3J0bWludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ydG1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmE1OGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ydG1pbnRyaW4uaApAQCAtMCwwICsxLDU5IEBACisvKj09PS0tLS0gcnRtaW50cmluLmggLSBSVE0gaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxydG1pbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fUlRNSU5UUklOX0gKKyNkZWZpbmUgX19SVE1JTlRSSU5fSAorCisjZGVmaW5lIF9YQkVHSU5fU1RBUlRFRCAgICh+MHUpCisjZGVmaW5lIF9YQUJPUlRfRVhQTElDSVQgICgxIDw8IDApCisjZGVmaW5lIF9YQUJPUlRfUkVUUlkgICAgICgxIDw8IDEpCisjZGVmaW5lIF9YQUJPUlRfQ09ORkxJQ1QgICgxIDw8IDIpCisjZGVmaW5lIF9YQUJPUlRfQ0FQQUNJVFkgICgxIDw8IDMpCisjZGVmaW5lIF9YQUJPUlRfREVCVUcgICAgICgxIDw8IDQpCisjZGVmaW5lIF9YQUJPUlRfTkVTVEVEICAgICgxIDw8IDUpCisjZGVmaW5lIF9YQUJPUlRfQ09ERSh4KSAgICgoKHgpID4+IDI0KSAmIDB4RkYpCisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicnRtIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeGJlZ2luKHZvaWQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl94YmVnaW4oKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194ZW5kKHZvaWQpCit7CisgIF9fYnVpbHRpbl9pYTMyX3hlbmQoKTsKK30KKworI2RlZmluZSBfeGFib3J0KGltbSkgX19idWlsdGluX2lhMzJfeGFib3J0KChpbW0pKQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX1JUTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3MzOTBpbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvczM5MGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTI3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3MzOTBpbnRyaW4uaApAQCAtMCwwICsxLDM5IEBACisvKj09PS0tLS0gczM5MGludHJpbi5oIC0gU3lzdGVtWiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fUzM5MElOVFJJTl9ICisjZGVmaW5lIF9fUzM5MElOVFJJTl9ICisKKyNpZm5kZWYgX19zMzkwX18KKyNlcnJvciAiPHMzOTBpbnRyaW4uaD4gaXMgZm9yIHMzOTAgb25seSIKKyNlbmRpZgorCisjaWZkZWYgX19IVE1fXworI2luY2x1ZGUgPGh0bWludHJpbi5oPgorI2VuZGlmCisKKyNpZmRlZiBfX1ZFQ19fCisjaW5jbHVkZSA8dmVjaW50cmluLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9fUzM5MElOVFJJTl9IKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2FsbG9jYXRvcl9pbnRlcmZhY2UuaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2FsbG9jYXRvcl9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjIwNjMxCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvYWxsb2NhdG9yX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8vPT09LS0gYWxsb2NhdG9yX2ludGVyZmFjZS5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIgZm9yIGFsbG9jYXRvciB1c2VkIGluIHNhbml0aXplcnMgKEFTYW4vVFNhbi9NU2FuKS4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisjaWZuZGVmIFNBTklUSVpFUl9BTExPQ0FUT1JfSU5URVJGQUNFX0gKKyNkZWZpbmUgU0FOSVRJWkVSX0FMTE9DQVRPUl9JTlRFUkZBQ0VfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyAgLyogUmV0dXJucyB0aGUgZXN0aW1hdGVkIG51bWJlciBvZiBieXRlcyB0aGF0IHdpbGwgYmUgcmVzZXJ2ZWQgYnkgYWxsb2NhdG9yCisgICAgIGZvciByZXF1ZXN0IG9mICJzaXplIiBieXRlcy4gSWYgYWxsb2NhdG9yIGNhbid0IGFsbG9jYXRlIHRoYXQgbXVjaAorICAgICBtZW1vcnksIHJldHVybnMgdGhlIG1heGltYWwgcG9zc2libGUgYWxsb2NhdGlvbiBzaXplLCBvdGhlcndpc2UgcmV0dXJucworICAgICAic2l6ZSIuICovCisgIHNpemVfdCBfX3Nhbml0aXplcl9nZXRfZXN0aW1hdGVkX2FsbG9jYXRlZF9zaXplKHNpemVfdCBzaXplKTsKKworICAvKiBSZXR1cm5zIHRydWUgaWYgcCB3YXMgcmV0dXJuZWQgYnkgdGhlIGFsbG9jYXRvciBhbmQKKyAgICAgaXMgbm90IHlldCBmcmVlZC4gKi8KKyAgaW50IF9fc2FuaXRpemVyX2dldF9vd25lcnNoaXAoY29uc3Qgdm9sYXRpbGUgdm9pZCAqcCk7CisKKyAgLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlc2VydmVkIGZvciB0aGUgcG9pbnRlciBwLgorICAgICBSZXF1aXJlcyAoZ2V0X293bmVyc2hpcChwKSA9PSB0cnVlKSBvciAocCA9PSAwKS4gKi8KKyAgc2l6ZV90IF9fc2FuaXRpemVyX2dldF9hbGxvY2F0ZWRfc2l6ZShjb25zdCB2b2xhdGlsZSB2b2lkICpwKTsKKworICAvKiBOdW1iZXIgb2YgYnl0ZXMsIGFsbG9jYXRlZCBhbmQgbm90IHlldCBmcmVlZCBieSB0aGUgYXBwbGljYXRpb24uICovCisgIHNpemVfdCBfX3Nhbml0aXplcl9nZXRfY3VycmVudF9hbGxvY2F0ZWRfYnl0ZXMoKTsKKworICAvKiBOdW1iZXIgb2YgYnl0ZXMsIG1tYXBlZCBieSB0aGUgYWxsb2NhdG9yIHRvIGZ1bGZpbGwgYWxsb2NhdGlvbiByZXF1ZXN0cy4KKyAgICAgR2VuZXJhbGx5LCBmb3IgcmVxdWVzdCBvZiBYIGJ5dGVzLCBhbGxvY2F0b3IgY2FuIHJlc2VydmUgYW5kIGFkZCB0byBmcmVlCisgICAgIGxpc3RzIGEgbGFyZ2UgbnVtYmVyIG9mIGNodW5rcyBvZiBzaXplIFggdG8gdXNlIHRoZW0gZm9yIGZ1dHVyZSByZXF1ZXN0cy4KKyAgICAgQWxsIHRoZXNlIGNodW5rcyBjb3VudCB0b3dhcmQgdGhlIGhlYXAgc2l6ZS4gQ3VycmVudGx5LCBhbGxvY2F0b3IgbmV2ZXIKKyAgICAgcmVsZWFzZXMgbWVtb3J5IHRvIE9TIChpbnN0ZWFkLCBpdCBqdXN0IHB1dHMgZnJlZWQgY2h1bmtzIHRvIGZyZWUKKyAgICAgbGlzdHMpLiAqLworICBzaXplX3QgX19zYW5pdGl6ZXJfZ2V0X2hlYXBfc2l6ZSgpOworCisgIC8qIE51bWJlciBvZiBieXRlcywgbW1hcGVkIGJ5IHRoZSBhbGxvY2F0b3IsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGZ1bGZpbGwKKyAgICAgYWxsb2NhdGlvbiByZXF1ZXN0cy4gV2hlbiBhIHVzZXIgcHJvZ3JhbSBmcmVlcyBtZW1vcnkgY2h1bmssIGl0IGNhbiBmaXJzdAorICAgICBmYWxsIGludG8gcXVhcmFudGluZSBhbmQgd2lsbCBjb3VudCB0b3dhcmQgX19zYW5pdGl6ZXJfZ2V0X2ZyZWVfYnl0ZXMoKQorICAgICBsYXRlci4gKi8KKyAgc2l6ZV90IF9fc2FuaXRpemVyX2dldF9mcmVlX2J5dGVzKCk7CisKKyAgLyogTnVtYmVyIG9mIGJ5dGVzIGluIHVubWFwcGVkIHBhZ2VzLCB0aGF0IGFyZSByZWxlYXNlZCB0byBPUy4gQ3VycmVudGx5LAorICAgICBhbHdheXMgcmV0dXJucyAwLiAqLworICBzaXplX3QgX19zYW5pdGl6ZXJfZ2V0X3VubWFwcGVkX2J5dGVzKCk7CisKKyAgLyogTWFsbG9jIGhvb2tzIHRoYXQgbWF5IGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdXNlci4KKyAgICAgX19zYW5pdGl6ZXJfbWFsbG9jX2hvb2socHRyLCBzaXplKSBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIKKyAgICAgICBhbGxvY2F0aW9uIG9mICJzaXplIiBieXRlcywgd2hpY2ggcmV0dXJuZWQgInB0ciIuCisgICAgIF9fc2FuaXRpemVyX2ZyZWVfaG9vayhwdHIpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUKKyAgICAgICBkZWFsbG9jYXRpb24gb2YgInB0ciIuICovCisgIHZvaWQgX19zYW5pdGl6ZXJfbWFsbG9jX2hvb2soY29uc3Qgdm9sYXRpbGUgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisgIHZvaWQgX19zYW5pdGl6ZXJfZnJlZV9ob29rKGNvbnN0IHZvbGF0aWxlIHZvaWQgKnB0cik7CisKKyAgLyogSW5zdGFsbHMgYSBwYWlyIG9mIGhvb2tzIGZvciBtYWxsb2MvZnJlZS4KKyAgICAgU2V2ZXJhbCAoY3VycmVudGx5LCA1KSBob29rIHBhaXJzIG1heSBiZSBpbnN0YWxsZWQsIHRoZXkgYXJlIGV4ZWN1dGVkCisgICAgIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgaW5zdGFsbGVkIGFuZCBhZnRlciBjYWxsaW5nCisgICAgIF9fc2FuaXRpemVyX21hbGxvY19ob29rL19fc2FuaXRpemVyX2ZyZWVfaG9vay4KKyAgICAgVW5saWtlIF9fc2FuaXRpemVyX21hbGxvY19ob29rL19fc2FuaXRpemVyX2ZyZWVfaG9vayB0aGVzZSBob29rcyBjYW4gYmUKKyAgICAgY2hhaW5lZCBhbmQgZG8gbm90IHJlbHkgb24gd2VhayBzeW1ib2xzIHdvcmtpbmcgb24gdGhlIHBsYXRmb3JtLCBidXQKKyAgICAgcmVxdWlyZSBfX3Nhbml0aXplcl9pbnN0YWxsX21hbGxvY19hbmRfZnJlZV9ob29rcyB0byBiZSBjYWxsZWQgYXQgc3RhcnR1cAorICAgICBhbmQgdGh1cyB3aWxsIG5vdCBiZSBjYWxsZWQgb24gbWFsbG9jL2ZyZWUgdmVyeSBlYXJseSBpbiB0aGUgcHJvY2Vzcy4KKyAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGhvb2tzIGN1cnJlbnRseSBpbnN0YWxsZWQgb3IgMCBvbiBmYWlsdXJlLgorICAgICBOb3QgdGhyZWFkLXNhZmUsIHNob3VsZCBiZSBjYWxsZWQgaW4gdGhlIG1haW4gdGhyZWFkIGJlZm9yZSBzdGFydGluZworICAgICBvdGhlciB0aHJlYWRzLgorICAqLworICBpbnQgX19zYW5pdGl6ZXJfaW5zdGFsbF9tYWxsb2NfYW5kX2ZyZWVfaG9va3MoCisgICAgICB2b2lkICgqbWFsbG9jX2hvb2spKGNvbnN0IHZvbGF0aWxlIHZvaWQgKiwgc2l6ZV90KSwKKyAgICAgIHZvaWQgKCpmcmVlX2hvb2spKGNvbnN0IHZvbGF0aWxlIHZvaWQgKikpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2FzYW5faW50ZXJmYWNlLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9hc2FuX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YmEwY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9hc2FuX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsMTUxIEBACisvLz09PS0tIHNhbml0aXplci9hc2FuX2ludGVyZmFjZS5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotIEMrKyAtKi09PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vIFRoaXMgZmlsZSBpcyBhIHBhcnQgb2YgQWRkcmVzc1Nhbml0aXplci4KKy8vCisvLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlci4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisjaWZuZGVmIFNBTklUSVpFUl9BU0FOX0lOVEVSRkFDRV9ICisjZGVmaW5lIFNBTklUSVpFUl9BU0FOX0lOVEVSRkFDRV9ICisKKyNpbmNsdWRlIDxzYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyAgLy8gTWFya3MgbWVtb3J5IHJlZ2lvbiBbYWRkciwgYWRkcitzaXplKSBhcyB1bmFkZHJlc3NhYmxlLgorICAvLyBUaGlzIG1lbW9yeSBtdXN0IGJlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIHByb2dyYW0uIEFjY2Vzc2luZworICAvLyBhZGRyZXNzZXMgaW4gdGhpcyByZWdpb24gZnJvbSBpbnN0cnVtZW50ZWQgY29kZSBpcyBmb3JiaWRkZW4gdW50aWwKKyAgLy8gdGhpcyByZWdpb24gaXMgdW5wb2lzb25lZC4gVGhpcyBmdW5jdGlvbiBpcyBub3QgZ3VhcmFudGVlZCB0byBwb2lzb24KKyAgLy8gdGhlIHdob2xlIHJlZ2lvbiAtIGl0IG1heSBwb2lzb24gb25seSBzdWJyZWdpb24gb2YgW2FkZHIsIGFkZHIrc2l6ZSkgZHVlCisgIC8vIHRvIEFTYW4gYWxpZ25tZW50IHJlc3RyaWN0aW9ucy4KKyAgLy8gTWV0aG9kIGlzIE5PVCB0aHJlYWQtc2FmZSBpbiB0aGUgc2Vuc2UgdGhhdCBubyB0d28gdGhyZWFkcyBjYW4KKyAgLy8gKHVuKXBvaXNvbiBtZW1vcnkgaW4gdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiBzaW11bHRhbmVvdXNseS4KKyAgdm9pZCBfX2FzYW5fcG9pc29uX21lbW9yeV9yZWdpb24odm9pZCBjb25zdCB2b2xhdGlsZSAqYWRkciwgc2l6ZV90IHNpemUpOworICAvLyBNYXJrcyBtZW1vcnkgcmVnaW9uIFthZGRyLCBhZGRyK3NpemUpIGFzIGFkZHJlc3NhYmxlLgorICAvLyBUaGlzIG1lbW9yeSBtdXN0IGJlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIHByb2dyYW0uIEFjY2Vzc2luZworICAvLyBhZGRyZXNzZXMgaW4gdGhpcyByZWdpb24gaXMgYWxsb3dlZCB1bnRpbCB0aGlzIHJlZ2lvbiBpcyBwb2lzb25lZCBhZ2Fpbi4KKyAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgdW5wb2lzb24gYSBzdXBlcnJlZ2lvbiBvZiBbYWRkciwgYWRkcitzaXplKSBkdWUgdG8KKyAgLy8gQVNhbiBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zLgorICAvLyBNZXRob2QgaXMgTk9UIHRocmVhZC1zYWZlIGluIHRoZSBzZW5zZSB0aGF0IG5vIHR3byB0aHJlYWRzIGNhbgorICAvLyAodW4pcG9pc29uIG1lbW9yeSBpbiB0aGUgc2FtZSBtZW1vcnkgcmVnaW9uIHNpbXVsdGFuZW91c2x5LgorICB2b2lkIF9fYXNhbl91bnBvaXNvbl9tZW1vcnlfcmVnaW9uKHZvaWQgY29uc3Qgdm9sYXRpbGUgKmFkZHIsIHNpemVfdCBzaXplKTsKKworLy8gVXNlciBjb2RlIHNob3VsZCB1c2UgbWFjcm9zIGluc3RlYWQgb2YgZnVuY3Rpb25zLgorI2lmIF9faGFzX2ZlYXR1cmUoYWRkcmVzc19zYW5pdGl6ZXIpIHx8IGRlZmluZWQoX19TQU5JVElaRV9BRERSRVNTX18pCisjZGVmaW5lIEFTQU5fUE9JU09OX01FTU9SWV9SRUdJT04oYWRkciwgc2l6ZSkgXAorICBfX2FzYW5fcG9pc29uX21lbW9yeV9yZWdpb24oKGFkZHIpLCAoc2l6ZSkpCisjZGVmaW5lIEFTQU5fVU5QT0lTT05fTUVNT1JZX1JFR0lPTihhZGRyLCBzaXplKSBcCisgIF9fYXNhbl91bnBvaXNvbl9tZW1vcnlfcmVnaW9uKChhZGRyKSwgKHNpemUpKQorI2Vsc2UKKyNkZWZpbmUgQVNBTl9QT0lTT05fTUVNT1JZX1JFR0lPTihhZGRyLCBzaXplKSBcCisgICgodm9pZCkoYWRkciksICh2b2lkKShzaXplKSkKKyNkZWZpbmUgQVNBTl9VTlBPSVNPTl9NRU1PUllfUkVHSU9OKGFkZHIsIHNpemUpIFwKKyAgKCh2b2lkKShhZGRyKSwgKHZvaWQpKHNpemUpKQorI2VuZGlmCisKKyAgLy8gUmV0dXJucyAxIGlmIGFkZHIgaXMgcG9pc29uZWQgKGkuZS4gMS1ieXRlIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoaXMKKyAgLy8gYWRkcmVzcyB3aWxsIHJlc3VsdCBpbiBlcnJvciByZXBvcnQgZnJvbSBBZGRyZXNzU2FuaXRpemVyKS4KKyAgLy8gT3RoZXJ3aXNlIHJldHVybnMgMC4KKyAgaW50IF9fYXNhbl9hZGRyZXNzX2lzX3BvaXNvbmVkKHZvaWQgY29uc3Qgdm9sYXRpbGUgKmFkZHIpOworCisgIC8vIElmIGF0IGxlYXN0IG9uZSBieXRlIGluIFtiZWcsIGJlZytzaXplKSBpcyBwb2lzb25lZCwgcmV0dXJuIHRoZSBhZGRyZXNzCisgIC8vIG9mIHRoZSBmaXJzdCBzdWNoIGJ5dGUuIE90aGVyd2lzZSByZXR1cm4gMC4KKyAgdm9pZCAqX19hc2FuX3JlZ2lvbl9pc19wb2lzb25lZCh2b2lkICpiZWcsIHNpemVfdCBzaXplKTsKKworICAvLyBQcmludCB0aGUgZGVzY3JpcHRpb24gb2YgYWRkciAodXNlZnVsIHdoZW4gZGVidWdnaW5nIGluIGdkYikuCisgIHZvaWQgX19hc2FuX2Rlc2NyaWJlX2FkZHJlc3Modm9pZCAqYWRkcik7CisKKyAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gYSBkZWJ1Z2dlciB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgYW4gQVNhbiBlcnJvci4KKyAgLy8gUmV0dXJucyAxIGlmIGFuIGVycm9yIGhhcyBiZWVuIChvciBpcyBiZWluZykgcmVwb3J0ZWQsIG90aGVyd2lzZSByZXR1cm5zIDAuCisgIGludCBfX2FzYW5fcmVwb3J0X3ByZXNlbnQoKTsKKworICAvLyBVc2VmdWwgZm9yIGNhbGxpbmcgZnJvbSBhIGRlYnVnZ2VyIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhbiBBU2FuIGVycm9yLgorICAvLyBJZiBhbiBlcnJvciBoYXMgYmVlbiAob3IgaXMgYmVpbmcpIHJlcG9ydGVkLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyByZXR1cm4KKyAgLy8gdGhlIHBjLCBicCwgc3AsIGFkZHJlc3MsIGFjY2VzcyB0eXBlICgwID0gcmVhZCwgMSA9IHdyaXRlKSwgYWNjZXNzIHNpemUgYW5kCisgIC8vIGJ1ZyBkZXNjcmlwdGlvbiAoZS5nLiAiaGVhcC11c2UtYWZ0ZXItZnJlZSIpLiBPdGhlcndpc2UgdGhleSByZXR1cm4gMC4KKyAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfcGMoKTsKKyAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfYnAoKTsKKyAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfc3AoKTsKKyAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfYWRkcmVzcygpOworICBpbnQgX19hc2FuX2dldF9yZXBvcnRfYWNjZXNzX3R5cGUoKTsKKyAgc2l6ZV90IF9fYXNhbl9nZXRfcmVwb3J0X2FjY2Vzc19zaXplKCk7CisgIGNvbnN0IGNoYXIgKl9fYXNhbl9nZXRfcmVwb3J0X2Rlc2NyaXB0aW9uKCk7CisKKyAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gdGhlIGRlYnVnZ2VyIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhIHBvaW50ZXIuCisgIC8vIFJldHVybnMgdGhlIGNhdGVnb3J5IG9mIHRoZSBnaXZlbiBwb2ludGVyIGFzIGEgY29uc3RhbnQgc3RyaW5nLgorICAvLyBQb3NzaWJsZSByZXR1cm4gdmFsdWVzIGFyZSAiZ2xvYmFsIiwgInN0YWNrIiwgInN0YWNrLWZha2UiLCAiaGVhcCIsCisgIC8vICJoZWFwLWludmFsaWQiLCAic2hhZG93LWxvdyIsICJzaGFkb3ctZ2FwIiwgInNoYWRvdy1oaWdoIiwgInVua25vd24iLgorICAvLyBJZiBnbG9iYWwgb3Igc3RhY2ssIHRyaWVzIHRvIGFsc28gcmV0dXJuIHRoZSB2YXJpYWJsZSBuYW1lLCBhZGRyZXNzIGFuZAorICAvLyBzaXplLiBJZiBoZWFwLCB0cmllcyB0byByZXR1cm4gdGhlIGNodW5rIGFkZHJlc3MgYW5kIHNpemUuICduYW1lJyBzaG91bGQKKyAgLy8gcG9pbnQgdG8gYW4gYWxsb2NhdGVkIGJ1ZmZlciBvZiBzaXplICduYW1lX3NpemUnLgorICBjb25zdCBjaGFyICpfX2FzYW5fbG9jYXRlX2FkZHJlc3Modm9pZCAqYWRkciwgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipyZWdpb25fYWRkcmVzcywgc2l6ZV90ICpyZWdpb25fc2l6ZSk7CisKKyAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gdGhlIGRlYnVnZ2VyIHRvIGdldCB0aGUgYWxsb2NhdGlvbiBzdGFjayB0cmFjZQorICAvLyBhbmQgdGhyZWFkIElEIGZvciBhIGhlYXAgYWRkcmVzcy4gU3RvcmVzIHVwIHRvICdzaXplJyBmcmFtZXMgaW50byAndHJhY2UnLAorICAvLyByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RvcmVkIGZyYW1lcyBvciAwIG9uIGVycm9yLgorICBzaXplX3QgX19hc2FuX2dldF9hbGxvY19zdGFjayh2b2lkICphZGRyLCB2b2lkICoqdHJhY2UsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnRocmVhZF9pZCk7CisKKyAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gdGhlIGRlYnVnZ2VyIHRvIGdldCB0aGUgZnJlZSBzdGFjayB0cmFjZQorICAvLyBhbmQgdGhyZWFkIElEIGZvciBhIGhlYXAgYWRkcmVzcy4gU3RvcmVzIHVwIHRvICdzaXplJyBmcmFtZXMgaW50byAndHJhY2UnLAorICAvLyByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RvcmVkIGZyYW1lcyBvciAwIG9uIGVycm9yLgorICBzaXplX3QgX19hc2FuX2dldF9mcmVlX3N0YWNrKHZvaWQgKmFkZHIsIHZvaWQgKip0cmFjZSwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp0aHJlYWRfaWQpOworCisgIC8vIFVzZWZ1bCBmb3IgY2FsbGluZyBmcm9tIHRoZSBkZWJ1Z2dlciB0byBnZXQgdGhlIGN1cnJlbnQgc2hhZG93IG1lbW9yeQorICAvLyBtYXBwaW5nLgorICB2b2lkIF9fYXNhbl9nZXRfc2hhZG93X21hcHBpbmcoc2l6ZV90ICpzaGFkb3dfc2NhbGUsIHNpemVfdCAqc2hhZG93X29mZnNldCk7CisKKyAgLy8gVGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byByZXBvcnQgYW4gZXJyb3IuCisgIC8vIEhvd2V2ZXIgaXQgaXMgc3RpbGwgYSBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UgYmVjYXVzZSB1c2VycyBtYXkgd2FudCB0bworICAvLyBzZXQgYSBicmVha3BvaW50IG9uIHRoaXMgZnVuY3Rpb24gaW4gYSBkZWJ1Z2dlci4KKyAgdm9pZCBfX2FzYW5fcmVwb3J0X2Vycm9yKHZvaWQgKnBjLCB2b2lkICpicCwgdm9pZCAqc3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphZGRyLCBpbnQgaXNfd3JpdGUsIHNpemVfdCBhY2Nlc3Nfc2l6ZSk7CisKKyAgLy8gRGVwcmVjYXRlZC4gQ2FsbCBfX3Nhbml0aXplcl9zZXRfZGVhdGhfY2FsbGJhY2sgaW5zdGVhZC4KKyAgdm9pZCBfX2FzYW5fc2V0X2RlYXRoX2NhbGxiYWNrKHZvaWQgKCpjYWxsYmFjaykodm9pZCkpOworCisgIHZvaWQgX19hc2FuX3NldF9lcnJvcl9yZXBvcnRfY2FsbGJhY2sodm9pZCAoKmNhbGxiYWNrKShjb25zdCBjaGFyKikpOworCisgIC8vIFVzZXIgbWF5IHByb3ZpZGUgZnVuY3Rpb24gdGhhdCB3b3VsZCBiZSBjYWxsZWQgcmlnaHQgd2hlbiBBU2FuIGRldGVjdHMKKyAgLy8gYW4gZXJyb3IuIFRoaXMgY2FuIGJlIHVzZWQgdG8gbm90aWNlIGNhc2VzIHdoZW4gQVNhbiBkZXRlY3RzIGFuIGVycm9yLCBidXQKKyAgLy8gdGhlIHByb2dyYW0gY3Jhc2hlcyBiZWZvcmUgQVNhbiByZXBvcnQgaXMgcHJpbnRlZC4KKyAgdm9pZCBfX2FzYW5fb25fZXJyb3IoKTsKKworICAvLyBQcmludHMgYWNjdW11bGF0ZWQgc3RhdHMgdG8gc3RkZXJyLiBVc2VkIGZvciBkZWJ1Z2dpbmcuCisgIHZvaWQgX19hc2FuX3ByaW50X2FjY3VtdWxhdGVkX3N0YXRzKCk7CisKKyAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgb3B0aW9uYWxseSBwcm92aWRlZCBieSB1c2VyIGFuZCBzaG91bGQgcmV0dXJuCisgIC8vIGEgc3RyaW5nIGNvbnRhaW5pbmcgQVNhbiBydW50aW1lIG9wdGlvbnMuIFNlZSBhc2FuX2ZsYWdzLmggZm9yIGRldGFpbHMuCisgIGNvbnN0IGNoYXIqIF9fYXNhbl9kZWZhdWx0X29wdGlvbnMoKTsKKworICAvLyBUaGUgZm9sbG93aW5nIDIgZnVuY3Rpb25zIGZhY2lsaXRhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGluIHByZXNlbmNlIG9mCisgIC8vIGFzYW4ncyBmYWtlIHN0YWNrLgorCisgIC8vIFJldHVybnMgYW4gb3BhcXVlIGhhbmRsZXIgdG8gYmUgdXNlZCBsYXRlciBpbiBfX2FzYW5fYWRkcl9pc19pbl9mYWtlX3N0YWNrLgorICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIGN1cnJlbnQgdGhyZWFkIGRvZXMgbm90IGhhdmUgYSBmYWtlIHN0YWNrLgorICB2b2lkICpfX2FzYW5fZ2V0X2N1cnJlbnRfZmFrZV9zdGFjaygpOworCisgIC8vIElmIGZha2Vfc3RhY2sgaXMgbm9uLU5VTEwgYW5kIGFkZHIgYmVsb25ncyB0byBhIGZha2UgZnJhbWUgaW4KKyAgLy8gZmFrZV9zdGFjaywgcmV0dXJucyB0aGUgYWRkcmVzcyBvbiByZWFsIHN0YWNrIHRoYXQgY29ycmVzcG9uZHMgdG8KKyAgLy8gdGhlIGZha2UgZnJhbWUgYW5kIHNldHMgYmVnL2VuZCB0byB0aGUgYm91bmRhcmllcyBvZiB0aGlzIGZha2UgZnJhbWUuCisgIC8vIE90aGVyd2lzZSByZXR1cm5zIE5VTEwgYW5kIGRvZXMgbm90IHRvdWNoIGJlZy9lbmQuCisgIC8vIElmIGJlZy9lbmQgYXJlIE5VTEwsIHRoZXkgYXJlIG5vdCB0b3VjaGVkLgorICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhIHRocmVhZCBvdGhlciB0aGFuIHRoZSBvd25lciBvZgorICAvLyBmYWtlX3N0YWNrLCBidXQgdGhlIG93bmVyIHRocmVhZCBuZWVkIHRvIGJlIGFsaXZlLgorICB2b2lkICpfX2FzYW5fYWRkcl9pc19pbl9mYWtlX3N0YWNrKHZvaWQgKmZha2Vfc3RhY2ssIHZvaWQgKmFkZHIsIHZvaWQgKipiZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmVuZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gU0FOSVRJWkVSX0FTQU5fSU5URVJGQUNFX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FhNThlOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oCkBAIC0wLDAgKzEsMTY2IEBACisvLz09PS0tIHNhbml0aXplci9jb21tb25faW50ZXJmYWNlX2RlZnMuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotIEMrKyAtKi09PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vIENvbW1vbiBwYXJ0IG9mIHRoZSBwdWJsaWMgc2FuaXRpemVyIGludGVyZmFjZS4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNpZm5kZWYgU0FOSVRJWkVSX0NPTU1PTl9JTlRFUkZBQ0VfREVGU19ICisjZGVmaW5lIFNBTklUSVpFUl9DT01NT05fSU5URVJGQUNFX0RFRlNfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8vIEdDQyBkb2VzIG5vdCB1bmRlcnN0YW5kIF9faGFzX2ZlYXR1cmUuCisjaWYgIWRlZmluZWQoX19oYXNfZmVhdHVyZSkKKyMgZGVmaW5lIF9faGFzX2ZlYXR1cmUoeCkgMAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyAgLy8gQXJndW1lbnRzIGZvciBfX3Nhbml0aXplcl9zYW5kYm94X29uX25vdGlmeSgpIGJlbG93LgorICB0eXBlZGVmIHN0cnVjdCB7CisgICAgLy8gRW5hYmxlIHNhbmRib3ggc3VwcG9ydCBpbiBzYW5pdGl6ZXIgY292ZXJhZ2UuCisgICAgaW50IGNvdmVyYWdlX3NhbmRib3hlZDsKKyAgICAvLyBGaWxlIGRlc2NyaXB0b3IgdG8gd3JpdGUgY292ZXJhZ2UgZGF0YSB0by4gSWYgLTEgaXMgcGFzc2VkLCBhIGZpbGUgd2lsbAorICAgIC8vIGJlIHByZS1vcGVuZWQgYnkgX19zYW5pdGl6ZXJfc2FuZG9ieF9vbl9ub3RpZnkoKS4gVGhpcyBmaWVsZCBoYXMgbm8KKyAgICAvLyBlZmZlY3QgaWYgY292ZXJhZ2Vfc2FuZGJveGVkID09IDAuCisgICAgaW50cHRyX3QgY292ZXJhZ2VfZmQ7CisgICAgLy8gSWYgbm9uLXplcm8sIHNwbGl0IHRoZSBjb3ZlcmFnZSBkYXRhIGludG8gd2VsbC1mb3JtZWQgYmxvY2tzLiBUaGlzIGlzCisgICAgLy8gdXNlZnVsIHdoZW4gY292ZXJhZ2VfZmQgaXMgYSBzb2NrZXQgZGVzY3JpcHRvci4gRWFjaCBibG9jayB3aWxsIGNvbnRhaW4KKyAgICAvLyBhIGhlYWRlciwgYWxsb3dpbmcgZGF0YSBmcm9tIG11bHRpcGxlIHByb2Nlc3NlcyB0byBiZSBzZW50IG92ZXIgdGhlIHNhbWUKKyAgICAvLyBzb2NrZXQuCisgICAgdW5zaWduZWQgaW50IGNvdmVyYWdlX21heF9ibG9ja19zaXplOworICB9IF9fc2FuaXRpemVyX3NhbmRib3hfYXJndW1lbnRzOworCisgIC8vIFRlbGwgdGhlIHRvb2xzIHRvIHdyaXRlIHRoZWlyIHJlcG9ydHMgdG8gInBhdGguPHBpZD4iIGluc3RlYWQgb2Ygc3RkZXJyLgorICB2b2lkIF9fc2FuaXRpemVyX3NldF9yZXBvcnRfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKKyAgLy8gVGVsbCB0aGUgdG9vbHMgdG8gd3JpdGUgdGhlaXIgcmVwb3J0cyB0byB0aGUgcHJvdmlkZWQgZmlsZSBkZXNjcmlwdG9yCisgIC8vIChjYXN0ZWQgdG8gdm9pZCAqKS4KKyAgdm9pZCBfX3Nhbml0aXplcl9zZXRfcmVwb3J0X2ZkKHZvaWQgKmZkKTsKKworICAvLyBOb3RpZnkgdGhlIHRvb2xzIHRoYXQgdGhlIHNhbmRib3ggaXMgZ29pbmcgdG8gYmUgdHVybmVkIG9uLiBUaGUgcmVzZXJ2ZWQKKyAgLy8gcGFyYW1ldGVyIHdpbGwgYmUgdXNlZCBpbiB0aGUgZnV0dXJlIHRvIGhvbGQgYSBzdHJ1Y3R1cmUgd2l0aCBmdW5jdGlvbnMKKyAgLy8gdGhhdCB0aGUgdG9vbHMgbWF5IGNhbGwgdG8gYnlwYXNzIHRoZSBzYW5kYm94LgorICB2b2lkIF9fc2FuaXRpemVyX3NhbmRib3hfb25fbm90aWZ5KF9fc2FuaXRpemVyX3NhbmRib3hfYXJndW1lbnRzICphcmdzKTsKKworICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdG9vbCB3aGVuIGl0IGhhcyBqdXN0IGZpbmlzaGVkIHJlcG9ydGluZworICAvLyBhbiBlcnJvci4gJ2Vycm9yX3N1bW1hcnknIGlzIGEgb25lLWxpbmUgc3RyaW5nIHRoYXQgc3VtbWFyaXplcworICAvLyB0aGUgZXJyb3IgbWVzc2FnZS4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY2xpZW50LgorICB2b2lkIF9fc2FuaXRpemVyX3JlcG9ydF9lcnJvcl9zdW1tYXJ5KGNvbnN0IGNoYXIgKmVycm9yX3N1bW1hcnkpOworCisgIC8vIFNvbWUgb2YgdGhlIHNhbml0aXplcnMgKGUuZy4gYXNhbi90c2FuKSBtYXkgbWlzcyBidWdzIHRoYXQgaGFwcGVuCisgIC8vIGluIHVuYWxpZ25lZCBsb2Fkcy9zdG9yZXMuIEluIG9yZGVyIHRvIGZpbmQgc3VjaCBidWdzIHJlbGlhYmx5IG9uZSBuZWVkcworICAvLyB0byByZXBsYWNlIHBsYWluIHVuYWxpZ25lZCBsb2Fkcy9zdG9yZXMgd2l0aCB0aGVzZSBjYWxscy4KKyAgdWludDE2X3QgX19zYW5pdGl6ZXJfdW5hbGlnbmVkX2xvYWQxNihjb25zdCB2b2lkICpwKTsKKyAgdWludDMyX3QgX19zYW5pdGl6ZXJfdW5hbGlnbmVkX2xvYWQzMihjb25zdCB2b2lkICpwKTsKKyAgdWludDY0X3QgX19zYW5pdGl6ZXJfdW5hbGlnbmVkX2xvYWQ2NChjb25zdCB2b2lkICpwKTsKKyAgdm9pZCBfX3Nhbml0aXplcl91bmFsaWduZWRfc3RvcmUxNih2b2lkICpwLCB1aW50MTZfdCB4KTsKKyAgdm9pZCBfX3Nhbml0aXplcl91bmFsaWduZWRfc3RvcmUzMih2b2lkICpwLCB1aW50MzJfdCB4KTsKKyAgdm9pZCBfX3Nhbml0aXplcl91bmFsaWduZWRfc3RvcmU2NCh2b2lkICpwLCB1aW50NjRfdCB4KTsKKworICAvLyBBbm5vdGF0ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGNvbnRpZ3VvdXMgY29udGFpbmVyLCBzdWNoIGFzCisgIC8vIHN0ZDo6dmVjdG9yLCBzdGQ6OnN0cmluZyBvciBzaW1pbGFyLgorICAvLyBBIGNvbnRpZ3VvdXMgY29udGFpbmVyIGlzIGEgY29udGFpbmVyIHRoYXQga2VlcHMgYWxsIG9mIGl0cyBlbGVtZW50cworICAvLyBpbiBhIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIG1lbW9yeS4gVGhlIGNvbnRhaW5lciBvd25zIHRoZSByZWdpb24gb2YgbWVtb3J5CisgIC8vIFtiZWcsIGVuZCk7IHRoZSBtZW1vcnkgW2JlZywgbWlkKSBpcyB1c2VkIHRvIHN0b3JlIHRoZSBjdXJyZW50IGVsZW1lbnRzCisgIC8vIGFuZCB0aGUgbWVtb3J5IFttaWQsIGVuZCkgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBlbGVtZW50czsKKyAgLy8gYmVnIDw9IG1pZCA8PSBlbmQuIEZvciBleGFtcGxlLCBpbiAic3RkOjp2ZWN0b3I8PiB2IgorICAvLyAgIGJlZyA9ICZ2WzBdOworICAvLyAgIGVuZCA9IGJlZyArIHYuY2FwYWNpdHkoKSAqIHNpemVvZih2WzBdKTsKKyAgLy8gICBtaWQgPSBiZWcgKyB2LnNpemUoKSAgICAgKiBzaXplb2YodlswXSk7CisgIC8vCisgIC8vIFRoaXMgYW5ub3RhdGlvbiB0ZWxscyB0aGUgU2FuaXRpemVyIHRvb2wgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisgIC8vIGNvbnRhaW5lciBzbyB0aGF0IHRoZSB0b29sIGNhbiByZXBvcnQgZXJyb3JzIHdoZW4gbWVtb3J5IGZyb20gW21pZCwgZW5kKQorICAvLyBpcyBhY2Nlc3NlZC4gSW5zZXJ0IHRoaXMgYW5ub3RhdGlvbiBpbnRvIG1ldGhvZHMgbGlrZSBwdXNoX2JhY2svcG9wX2JhY2suCisgIC8vIFN1cHBseSB0aGUgb2xkIGFuZCB0aGUgbmV3IHZhbHVlcyBvZiBtaWQgKG9sZF9taWQvbmV3X21pZCkuCisgIC8vIEluIHRoZSBpbml0aWFsIHN0YXRlIG1pZCA9PSBlbmQgYW5kIHNvIHNob3VsZCBiZSB0aGUgZmluYWwKKyAgLy8gc3RhdGUgd2hlbiB0aGUgY29udGFpbmVyIGlzIGRlc3Ryb3llZCBvciB3aGVuIGl0IHJlYWxsb2NhdGVzIHRoZSBzdG9yYWdlLgorICAvLworICAvLyBVc2Ugd2l0aCBjYXV0aW9uIGFuZCBkb24ndCB1c2UgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gdmVjdG9yLWxpa2UgY2xhc3Nlcy4KKyAgLy8KKyAgLy8gRm9yIEFkZHJlc3NTYW5pdGl6ZXIsICdiZWcnIHNob3VsZCBiZSA4LWFsaWduZWQgYW5kICdlbmQnIHNob3VsZAorICAvLyBiZSBlaXRoZXIgOC1hbGlnbmVkIG9yIGl0IHNob3VsZCBwb2ludCB0byB0aGUgZW5kIG9mIGEgc2VwYXJhdGUgaGVhcC0sCisgIC8vIHN0YWNrLSwgb3IgZ2xvYmFsLSBhbGxvY2F0ZWQgYnVmZmVyLiBJLmUuIHRoZSBmb2xsb3dpbmcgd2lsbCBub3Qgd29yazoKKyAgLy8gICBpbnQ2NF90IHhbMl07ICAvLyAxNiBieXRlcywgOC1hbGlnbmVkLgorICAvLyAgIGNoYXIgKmJlZyA9IChjaGFyICopJnhbMF07CisgIC8vICAgY2hhciAqZW5kID0gYmVnICsgMTI7ICAvLyBOb3QgOCBhbGlnbmVkLCBub3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorICAvLyBUaGlzIGhvd2V2ZXIgd2lsbCB3b3JrIGZpbmU6CisgIC8vICAgaW50MzJfdCB4WzNdOyAgLy8gMTIgYnl0ZXMsIGJ1dCA4LWFsaWduZWQgdW5kZXIgQWRkcmVzc1Nhbml0aXplci4KKyAgLy8gICBjaGFyICpiZWcgPSAoY2hhciopJnhbMF07CisgIC8vICAgY2hhciAqZW5kID0gYmVnICsgMTI7ICAvLyBOb3QgOC1hbGlnbmVkLCBidXQgaXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorICB2b2lkIF9fc2FuaXRpemVyX2Fubm90YXRlX2NvbnRpZ3VvdXNfY29udGFpbmVyKGNvbnN0IHZvaWQgKmJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb2xkX21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpuZXdfbWlkKTsKKyAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250aWd1b3VzIGNvbnRhaW5lciBbYmVnLCBlbmQpIGlzIHByb3Blcmx5IHBvaXNvbmVkCisgIC8vIChlLmcuIHdpdGggX19zYW5pdGl6ZXJfYW5ub3RhdGVfY29udGlndW91c19jb250YWluZXIpLCBpLmUuIGlmCisgIC8vICAtIFtiZWcsIG1pZCkgaXMgYWRkcmVzc2FibGUsCisgIC8vICAtIFttaWQsIGVuZCkgaXMgdW5hZGRyZXNzYWJsZS4KKyAgLy8gRnVsbCB2ZXJpZmljYXRpb24gcmVxdWlyZXMgTyhlbmQtYmVnKSB0aW1lOyB0aGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGF2b2lkCisgIC8vIHN1Y2ggY29tcGxleGl0eSBieSB0b3VjaGluZyBvbmx5IHBhcnRzIG9mIHRoZSBjb250YWluZXIgYXJvdW5kIGJlZy9taWQvZW5kLgorICBpbnQgX19zYW5pdGl6ZXJfdmVyaWZ5X2NvbnRpZ3VvdXNfY29udGFpbmVyKGNvbnN0IHZvaWQgKmJlZywgY29uc3Qgdm9pZCAqbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmVuZCk7CisKKyAgLy8gU2ltaWxhciB0byBfX3Nhbml0aXplcl92ZXJpZnlfY29udGlndW91c19jb250YWluZXIgYnV0IHJldHVybnMgdGhlIGFkZHJlc3MKKyAgLy8gb2YgdGhlIGZpcnN0IGltcHJvcGVybHkgcG9pc29uZWQgYnl0ZSBvdGhlcndpc2UuIFJldHVybnMgbnVsbCBpZiB0aGUgYXJlYQorICAvLyBpcyBwb2lzb25lZCBwcm9wZXJseS4KKyAgY29uc3Qgdm9pZCAqX19zYW5pdGl6ZXJfY29udGlndW91c19jb250YWluZXJfZmluZF9iYWRfYWRkcmVzcygKKyAgICAgIGNvbnN0IHZvaWQgKmJlZywgY29uc3Qgdm9pZCAqbWlkLCBjb25zdCB2b2lkICplbmQpOworCisgIC8vIFByaW50IHRoZSBzdGFjayB0cmFjZSBsZWFkaW5nIHRvIHRoaXMgY2FsbC4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcgdXNlciBjb2RlLgorICB2b2lkIF9fc2FuaXRpemVyX3ByaW50X3N0YWNrX3RyYWNlKCk7CisKKyAgLy8gU2V0cyB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHJpZ2h0IGJlZm9yZSBkZWF0aCBvbiBlcnJvci4KKyAgLy8gUGFzc2luZyAwIHdpbGwgdW5zZXQgdGhlIGNhbGxiYWNrLgorICB2b2lkIF9fc2FuaXRpemVyX3NldF9kZWF0aF9jYWxsYmFjayh2b2lkICgqY2FsbGJhY2spKHZvaWQpKTsKKworICAvLyBJbnRlcmNlcHRvciBob29rcy4KKyAgLy8gV2hlbmV2ZXIgYSBsaWJjIGZ1bmN0aW9uIGludGVyY2VwdG9yIGlzIGNhbGxlZCBpdCBjaGVja3MgaWYgdGhlCisgIC8vIGNvcnJlc3BvbmRpbmcgd2VhayBob29rIGlzIGRlZmluZWQsIGFuZCBpdCBzbyAtLSBjYWxscyBpdC4KKyAgLy8gVGhlIHByaW1hcnkgdXNlIGNhc2UgaXMgZGF0YS1mbG93LWd1aWRlZCBmdXp6aW5nLCB3aGVyZSB0aGUgZnV6emVyIG5lZWRzCisgIC8vIHRvIGtub3cgd2hhdCBpcyBiZWluZyBwYXNzZWQgdG8gbGliYyBmdW5jdGlvbnMsIGUuZy4gbWVtY21wLgorICAvLyBGSVhNRTogaW1wbGVtZW50IG1vcmUgaG9va3MuCisgIHZvaWQgX19zYW5pdGl6ZXJfd2Vha19ob29rX21lbWNtcCh2b2lkICpjYWxsZWRfcGMsIGNvbnN0IHZvaWQgKnMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqczIsIHNpemVfdCBuLCBpbnQgcmVzdWx0KTsKKyAgdm9pZCBfX3Nhbml0aXplcl93ZWFrX2hvb2tfc3RybmNtcCh2b2lkICpjYWxsZWRfcGMsIGNvbnN0IGNoYXIgKnMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqczIsIHNpemVfdCBuLCBpbnQgcmVzdWx0KTsKKyAgdm9pZCBfX3Nhbml0aXplcl93ZWFrX2hvb2tfc3RyY21wKHZvaWQgKmNhbGxlZF9wYywgY29uc3QgY2hhciAqczEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzMiwgaW50IHJlc3VsdCk7CisKKyAgLy8gUHJpbnRzIHN0YWNrIHRyYWNlcyBmb3IgYWxsIGxpdmUgaGVhcCBhbGxvY2F0aW9ucyBvcmRlcmVkIGJ5IHRvdGFsCisgIC8vIGFsbG9jYXRpb24gc2l6ZSB1bnRpbCBgdG9wX3BlcmNlbnRgIG9mIHRvdGFsIGxpdmUgaGVhcCBpcyBzaG93bi4KKyAgLy8gYHRvcF9wZXJjZW50YCBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAxMDAuCisgIC8vIEV4cGVyaW1lbnRhbCBmZWF0dXJlIGN1cnJlbnRseSBhdmFpbGFibGUgb25seSB3aXRoIGFzYW4gb24gTGludXgveDg2XzY0LgorICB2b2lkIF9fc2FuaXRpemVyX3ByaW50X21lbW9yeV9wcm9maWxlKHNpemVfdCB0b3BfcGVyY2VudCk7CisKKyAgLy8gRmliZXIgYW5ub3RhdGlvbiBpbnRlcmZhY2UuCisgIC8vIEJlZm9yZSBzd2l0Y2hpbmcgdG8gYSBkaWZmZXJlbnQgc3RhY2ssIG9uZSBtdXN0IGNhbGwKKyAgLy8gX19zYW5pdGl6ZXJfc3RhcnRfc3dpdGNoX2ZpYmVyIHdpdGggYSBwb2ludGVyIHRvIHRoZSBib3R0b20gb2YgdGhlCisgIC8vIGRlc3RpbmF0aW9uIHN0YWNrIGFuZCBpdHMgc2l6ZS4gV2hlbiBjb2RlIHN0YXJ0cyBydW5uaW5nIG9uIHRoZSBuZXcgc3RhY2ssCisgIC8vIGl0IG11c3QgY2FsbCBfX3Nhbml0aXplcl9maW5pc2hfc3dpdGNoX2ZpYmVyIHRvIGZpbmFsaXplIHRoZSBzd2l0Y2guCisgIC8vIFRoZSBzdGFydF9zd2l0Y2ggZnVuY3Rpb24gdGFrZXMgYSB2b2lkKiogdG8gc3RvcmUgdGhlIGN1cnJlbnQgZmFrZSBzdGFjayBpZgorICAvLyB0aGVyZSBpcyBvbmUgKGl0IGlzIG5lZWRlZCB3aGVuIGRldGVjdF9zdGFja191c2VfYWZ0ZXJfcmV0dXJuIGlzIGVuYWJsZWQpLgorICAvLyBXaGVuIHJlc3RvcmluZyBhIHN0YWNrLCB0aGlzIHBvaW50ZXIgbXVzdCBiZSBnaXZlbiB0byB0aGUgZmluaXNoX3N3aXRjaAorICAvLyBmdW5jdGlvbi4gSW4gbW9zdCBjYXNlcywgdGhpcyB2b2lkKiBjYW4gYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBqdXN0IGJlZm9yZQorICAvLyBzd2l0Y2hpbmcuICBXaGVuIGxlYXZpbmcgYSBmaWJlciBkZWZpbml0ZWx5LCBudWxsIG11c3QgYmUgcGFzc2VkIGFzIGZpcnN0CisgIC8vIGFyZ3VtZW50IHRvIHRoZSBzdGFydF9zd2l0Y2ggZnVuY3Rpb24gc28gdGhhdCB0aGUgZmFrZSBzdGFjayBpcyBkZXN0cm95ZWQuCisgIC8vIElmIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0IGZvciBzdGFjayB1c2UtYWZ0ZXItcmV0dXJuIGRldGVjdGlvbiwgeW91IGNhbgorICAvLyBhbHdheXMgcGFzcyBudWxsIHRvIHRoZXNlIHR3byBmdW5jdGlvbnMuCisgIC8vIE5vdGUgdGhhdCB0aGUgZmFrZSBzdGFjayBtZWNoYW5pc20gaXMgZGlzYWJsZWQgZHVyaW5nIGZpYmVyIHN3aXRjaCwgc28gaWYgYQorICAvLyBzaWduYWwgY2FsbGJhY2sgcnVucyBkdXJpbmcgdGhlIHN3aXRjaCwgaXQgd2lsbCBub3QgYmVuZWZpdCBmcm9tIHRoZSBzdGFjaworICAvLyB1c2UtYWZ0ZXItcmV0dXJuIGRldGVjdGlvbi4KKyAgdm9pZCBfX3Nhbml0aXplcl9zdGFydF9zd2l0Y2hfZmliZXIodm9pZCAqKmZha2Vfc3RhY2tfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYm90dG9tLCBzaXplX3Qgc2l6ZSk7CisgIHZvaWQgX19zYW5pdGl6ZXJfZmluaXNoX3N3aXRjaF9maWJlcih2b2lkICpmYWtlX3N0YWNrX3NhdmUpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBTQU5JVElaRVJfQ09NTU9OX0lOVEVSRkFDRV9ERUZTX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2NvdmVyYWdlX2ludGVyZmFjZS5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvY292ZXJhZ2VfaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRjYzA5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2NvdmVyYWdlX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8vPT09LS0gc2FuaXRpemVyL2NvdmVyYWdlX2ludGVyZmFjZS5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0gQysrIC0qLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gUHVibGljIGludGVyZmFjZSBmb3Igc2FuaXRpemVyIGNvdmVyYWdlLgorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKworI2lmbmRlZiBTQU5JVElaRVJfQ09WRVJBR19JTlRFUkZBQ0VfSAorI2RlZmluZSBTQU5JVElaRVJfQ09WRVJBR19JTlRFUkZBQ0VfSAorCisjaW5jbHVkZSA8c2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyAgLy8gSW5pdGlhbGl6ZSBjb3ZlcmFnZS4KKyAgdm9pZCBfX3Nhbml0aXplcl9jb3ZfaW5pdCgpOworICAvLyBSZWNvcmQgYW5kIGR1bXAgY292ZXJhZ2UgaW5mby4KKyAgdm9pZCBfX3Nhbml0aXplcl9jb3ZfZHVtcCgpOworICAvLyBPcGVuIDxuYW1lPi5zYW5jb3YucGFja2VkIGluIHRoZSBjb3ZlcmFnZSBkaXJlY3RvcnkgYW5kIHJldHVybiB0aGUgZmlsZQorICAvLyBkZXNjcmlwdG9yLiBSZXR1cm5zIC0xIG9uIGZhaWx1cmUsIG9yIGlmIGNvdmVyYWdlIGR1bXBpbmcgaXMgZGlzYWJsZWQuCisgIC8vIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBzYW5kYm94aW5nIGNvZGUuCisgIGludHB0cl90IF9fc2FuaXRpemVyX21heWJlX29wZW5fY292X2ZpbGUoY29uc3QgY2hhciAqbmFtZSk7CisgIC8vIEdldCB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBjb3ZlcmVkIGJsb2NrcyAob3IgZWRnZXMpLgorICAvLyBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGNvdmVyYWdlLWRpcmVjdGVkIGluLXByb2Nlc3MgZnV6emVycy4KKyAgdWludHB0cl90IF9fc2FuaXRpemVyX2dldF90b3RhbF91bmlxdWVfY292ZXJhZ2UoKTsKKyAgLy8gR2V0IHRoZSBudW1iZXIgb2YgdW5pcXVlIGluZGlyZWN0IGNhbGxlci1jYWxsZWUgcGFpcnMuCisgIHVpbnRwdHJfdCBfX3Nhbml0aXplcl9nZXRfdG90YWxfdW5pcXVlX2NhbGxlcl9jYWxsZWVfcGFpcnMoKTsKKworICAvLyBSZXNldCB0aGUgYmFzaWMtYmxvY2sgKGVkZ2UpIGNvdmVyYWdlIHRvIHRoZSBpbml0aWFsIHN0YXRlLgorICAvLyBVc2VmdWwgZm9yIGluLXByb2Nlc3MgZnV6emluZyB0byBzdGFydCBjb2xsZWN0aW5nIGNvdmVyYWdlIGZyb20gc2NyYXRjaC4KKyAgLy8gRXhwZXJpbWVudGFsLCB3aWxsIGxpa2VseSBub3Qgd29yayBmb3IgbXVsdGktdGhyZWFkZWQgcHJvY2Vzcy4KKyAgdm9pZCBfX3Nhbml0aXplcl9yZXNldF9jb3ZlcmFnZSgpOworICAvLyBTZXQgKmRhdGEgdG8gdGhlIGFycmF5IG9mIGNvdmVyZWQgUENzIGFuZCByZXR1cm4gdGhlIHNpemUgb2YgdGhhdCBhcnJheS4KKyAgLy8gU29tZSBvZiB0aGUgZW50cmllcyBpbiAqZGF0YSB3aWxsIGJlIHplcm8uCisgIHVpbnRwdHJfdCBfX3Nhbml0aXplcl9nZXRfY292ZXJhZ2VfZ3VhcmRzKHVpbnRwdHJfdCAqKmRhdGEpOworCisgIC8vIFNldCAqZGF0YSB0byB0aGUgZ3Jvd2luZyBidWZmZXIgd2l0aCBjb3ZlcmVkIFBDcyBhbmQgcmV0dXJuIHRoZSBzaXplCisgIC8vIG9mIHRoZSBidWZmZXIuIFRoZSBlbnRyaWVzIGFyZSBuZXZlciB6ZXJvLgorICAvLyBXaGVuIG9ubHkgdW5pcXVlIHBjcyBhcmUgY29sbGVjdGVkLCB0aGUgc2l6ZSBpcyBlcXVhbCB0bworICAvLyBfX3Nhbml0aXplcl9nZXRfdG90YWxfdW5pcXVlX2NvdmVyYWdlLgorICAvLyBXQVJOSU5HOiBFWFBFUklNRU5UQUwgQVBJLgorICB1aW50cHRyX3QgX19zYW5pdGl6ZXJfZ2V0X2NvdmVyYWdlX3BjX2J1ZmZlcih1aW50cHRyX3QgKipkYXRhKTsKKworICAvLyBUaGUgY292ZXJhZ2UgaW5zdHJ1bWVudGF0aW9uIG1heSBvcHRpb25hbGx5IHByb3ZpZGUgaW1wcmVjaXNlIGNvdW50ZXJzLgorICAvLyBSYXRoZXIgdGhhbiBleHBvc2luZyB0aGUgY291bnRlciB2YWx1ZXMgdG8gdGhlIHVzZXIgd2UgaW5zdGVhZCBtYXAKKyAgLy8gdGhlIGNvdW50ZXJzIHRvIGEgYml0c2V0LgorICAvLyBFdmVyeSBjb3VudGVyIGlzIGFzc29jaWF0ZWQgd2l0aCA4IGJpdHMgaW4gdGhlIGJpdHNldC4KKyAgLy8gV2UgZGVmaW5lIDggdmFsdWUgcmFuZ2VzOiAxLCAyLCAzLCA0LTcsIDgtMTUsIDE2LTMxLCAzMi0xMjcsIDEyOCsKKyAgLy8gVGhlIGktdGggYml0IGlzIHNldCB0byAxIGlmIHRoZSBjb3VudGVyIHZhbHVlIGlzIGluIHRoZSBpLXRoIHJhbmdlLgorICAvLyBUaGlzIGNvdW50ZXItYmFzZWQgY292ZXJhZ2UgaW1wbGVtZW50YXRpb24gaXMgKm5vdCogdGhyZWFkLXNhZmUuCisKKyAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgY292ZXJhZ2UgY291bnRlcnMuCisgIHVpbnRwdHJfdCBfX3Nhbml0aXplcl9nZXRfbnVtYmVyX29mX2NvdW50ZXJzKCk7CisgIC8vIFVwZGF0ZXMgdGhlIGNvdW50ZXIgJ2JpdHNldCcsIGNsZWFycyB0aGUgY291bnRlcnMgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZgorICAvLyBuZXcgYml0cyBpbiAnYml0c2V0Jy4KKyAgLy8gSWYgJ2JpdHNldCcgaXMgbnVsbHB0ciwgb25seSBjbGVhcnMgdGhlIGNvdW50ZXJzLgorICAvLyBPdGhlcndpc2UgJ2JpdHNldCcgc2hvdWxkIGJlIGF0IGxlYXN0CisgIC8vIF9fc2FuaXRpemVyX2dldF9udW1iZXJfb2ZfY291bnRlcnMgYnl0ZXMgbG9uZyBhbmQgOC1hbGlnbmVkLgorICB1aW50cHRyX3QKKyAgX19zYW5pdGl6ZXJfdXBkYXRlX2NvdW50ZXJfYml0c2V0X2FuZF9jbGVhcl9jb3VudGVycyh1aW50OF90ICpiaXRzZXQpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBTQU5JVElaRVJfQ09WRVJBR19JTlRFUkZBQ0VfSApkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvZGZzYW5faW50ZXJmYWNlLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9kZnNhbl9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTY2NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvZGZzYW5faW50ZXJmYWNlLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8vPT09LS0gZGZzYW5faW50ZXJmYWNlLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBEYXRhRmxvd1Nhbml0aXplci4KKy8vCisvLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlci4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisjaWZuZGVmIERGU0FOX0lOVEVSRkFDRV9ICisjZGVmaW5lIERGU0FOX0lOVEVSRkFDRV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiB1aW50MTZfdCBkZnNhbl9sYWJlbDsKKworLy8vIFN0b3JlcyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsYWJlbCBpZGVudGlmaWVyLiAgQSBsYWJlbAorLy8vIG1heSBiZSBhIGJhc2UgbGFiZWwgY3JlYXRlZCB1c2luZyBkZnNhbl9jcmVhdGVfbGFiZWwsIHdpdGggYXNzb2NpYXRlZAorLy8vIHRleHQgZGVzY3JpcHRpb24gYW5kIHVzZXIgZGF0YSwgb3IgYW4gYXV0b21hdGljYWxseSBjcmVhdGVkIHVuaW9uIGxhYmVsLAorLy8vIHdoaWNoIHJlcHJlc2VudHMgdGhlIHVuaW9uIG9mIHR3byBsYWJlbCBpZGVudGlmaWVycyAod2hpY2ggbWF5IHRoZW1zZWx2ZXMKKy8vLyBiZSBiYXNlIG9yIHVuaW9uIGxhYmVscykuCitzdHJ1Y3QgZGZzYW5fbGFiZWxfaW5mbyB7CisgIC8vIEZpZWxkcyBmb3IgdW5pb24gbGFiZWxzLCBzZXQgdG8gMCBmb3IgYmFzZSBsYWJlbHMuCisgIGRmc2FuX2xhYmVsIGwxOworICBkZnNhbl9sYWJlbCBsMjsKKworICAvLyBGaWVsZHMgZm9yIGJhc2UgbGFiZWxzLgorICBjb25zdCBjaGFyICpkZXNjOworICB2b2lkICp1c2VyZGF0YTsKK307CisKKy8vLyBTaWduYXR1cmUgb2YgdGhlIGNhbGxiYWNrIGFyZ3VtZW50IHRvIGRmc2FuX3NldF93cml0ZV9jYWxsYmFjaygpLgordHlwZWRlZiB2b2lkICgqZGZzYW5fd3JpdGVfY2FsbGJhY2tfdCkoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CisKKy8vLyBDb21wdXRlcyB0aGUgdW5pb24gb2YgXGMgbDEgYW5kIFxjIGwyLCBwb3NzaWJseSBjcmVhdGluZyBhIHVuaW9uIGxhYmVsIGluCisvLy8gdGhlIHByb2Nlc3MuCitkZnNhbl9sYWJlbCBkZnNhbl91bmlvbihkZnNhbl9sYWJlbCBsMSwgZGZzYW5fbGFiZWwgbDIpOworCisvLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIGJhc2UgbGFiZWwgd2l0aCB0aGUgZ2l2ZW4gZGVzY3JpcHRpb24gYW5kIHVzZXIgZGF0YS4KK2Rmc2FuX2xhYmVsIGRmc2FuX2NyZWF0ZV9sYWJlbChjb25zdCBjaGFyICpkZXNjLCB2b2lkICp1c2VyZGF0YSk7CisKKy8vLyBTZXRzIHRoZSBsYWJlbCBmb3IgZWFjaCBhZGRyZXNzIGluIFthZGRyLGFkZHIrc2l6ZSkgdG8gXGMgbGFiZWwuCit2b2lkIGRmc2FuX3NldF9sYWJlbChkZnNhbl9sYWJlbCBsYWJlbCwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOworCisvLy8gU2V0cyB0aGUgbGFiZWwgZm9yIGVhY2ggYWRkcmVzcyBpbiBbYWRkcixhZGRyK3NpemUpIHRvIHRoZSB1bmlvbiBvZiB0aGUKKy8vLyBjdXJyZW50IGxhYmVsIGZvciB0aGF0IGFkZHJlc3MgYW5kIFxjIGxhYmVsLgordm9pZCBkZnNhbl9hZGRfbGFiZWwoZGZzYW5fbGFiZWwgbGFiZWwsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKTsKKworLy8vIFJldHJpZXZlcyB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBkYXRhLgorLy8vCisvLy8gVGhlIHR5cGUgb2YgJ2RhdGEnIGlzIGFyYml0cmFyeS4gIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGEgdmFsdWUgb2YgYW55IHR5cGUsCisvLy8gd2hpY2ggY2FuIGJlIHRydW5jYXRlZCBvciBleHRlbmRlZCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5KSBhcyBuZWNlc3NhcnkuCisvLy8gVGhlIHRydW5jYXRpb24vZXh0ZW5zaW9uIG9wZXJhdGlvbnMgd2lsbCBwcmVzZXJ2ZSB0aGUgbGFiZWwgb2YgdGhlIG9yaWdpbmFsCisvLy8gdmFsdWUuCitkZnNhbl9sYWJlbCBkZnNhbl9nZXRfbGFiZWwobG9uZyBkYXRhKTsKKworLy8vIFJldHJpZXZlcyB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhIGF0IHRoZSBnaXZlbiBhZGRyZXNzLgorZGZzYW5fbGFiZWwgZGZzYW5fcmVhZF9sYWJlbChjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7CisKKy8vLyBSZXRyaWV2ZXMgYSBwb2ludGVyIHRvIHRoZSBkZnNhbl9sYWJlbF9pbmZvIHN0cnVjdCBmb3IgdGhlIGdpdmVuIGxhYmVsLgorY29uc3Qgc3RydWN0IGRmc2FuX2xhYmVsX2luZm8gKmRmc2FuX2dldF9sYWJlbF9pbmZvKGRmc2FuX2xhYmVsIGxhYmVsKTsKKworLy8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gbGFiZWwgbGFiZWwgY29udGFpbnMgdGhlIGxhYmVsIGVsZW0uCitpbnQgZGZzYW5faGFzX2xhYmVsKGRmc2FuX2xhYmVsIGxhYmVsLCBkZnNhbl9sYWJlbCBlbGVtKTsKKworLy8vIElmIHRoZSBnaXZlbiBsYWJlbCBsYWJlbCBjb250YWlucyBhIGxhYmVsIHdpdGggdGhlIGRlc2NyaXB0aW9uIGRlc2MsIHJldHVybnMKKy8vLyB0aGF0IGxhYmVsLCBlbHNlIHJldHVybnMgMC4KK2Rmc2FuX2xhYmVsIGRmc2FuX2hhc19sYWJlbF93aXRoX2Rlc2MoZGZzYW5fbGFiZWwgbGFiZWwsIGNvbnN0IGNoYXIgKmRlc2MpOworCisvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxhYmVscyBhbGxvY2F0ZWQuCitzaXplX3QgZGZzYW5fZ2V0X2xhYmVsX2NvdW50KHZvaWQpOworCisvLy8gU2V0cyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gY2FsbHMgdG8gd3JpdGUoKS4gIFRoZSBjYWxsYmFjayBpcyBpbnZva2VkCisvLy8gYmVmb3JlIHRoZSB3cml0ZSBpcyBkb25lLiAgVGhlIHdyaXRlIGlzIG5vdCBndWFyYW50ZWVkIHRvIHN1Y2NlZWQgd2hlbiB0aGUKKy8vLyBjYWxsYmFjayBleGVjdXRlcy4gIFBhc3MgaW4gTlVMTCB0byByZW1vdmUgYW55IGNhbGxiYWNrLgordm9pZCBkZnNhbl9zZXRfd3JpdGVfY2FsbGJhY2soZGZzYW5fd3JpdGVfY2FsbGJhY2tfdCBsYWJlbGVkX3dyaXRlX2NhbGxiYWNrKTsKKworLy8vIFdyaXRlcyB0aGUgbGFiZWxzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBwcm9ncmFtIHRvIHRoZSBnaXZlbiBmaWxlCisvLy8gZGVzY3JpcHRvci4gVGhlIGxpbmVzIG9mIHRoZSBvdXRwdXQgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKy8vLworLy8vIDxsYWJlbD4gPHBhcmVudCBsYWJlbCAxPiA8cGFyZW50IGxhYmVsIDI+IDxsYWJlbCBkZXNjcmlwdGlvbiBpZiBhbnk+Cit2b2lkIGRmc2FuX2R1bXBfbGFiZWxzKGludCBmZCk7CisKKy8vLyBJbnRlcmNlcHRvciBob29rcy4KKy8vLyBXaGVuZXZlciBhIGRmc2FuJ3MgY3VzdG9tIGZ1bmN0aW9uIGlzIGNhbGxlZCB0aGUgY29ycmVzcG9uZGluZworLy8vIGhvb2sgaXMgY2FsbGVkIGl0IG5vbi16ZXJvLiBUaGUgaG9va3Mgc2hvdWxkIGJlIGRlZmluZWQgYnkgdGhlIHVzZXIuCisvLy8gVGhlIHByaW1hcnkgdXNlIGNhc2UgaXMgdGFpbnQtZ3VpZGVkIGZ1enppbmcsIHdoZXJlIHRoZSBmdXp6ZXIKKy8vLyBuZWVkcyB0byBzZWUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgbGFiZWxzLgorLy8vIEZJWE1FOiBpbXBsZW1lbnQgbW9yZSBob29rcy4KK3ZvaWQgZGZzYW5fd2Vha19ob29rX21lbWNtcCh2b2lkICpjYWxsZXJfcGMsIGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiwgZGZzYW5fbGFiZWwgczFfbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZzYW5fbGFiZWwgczJfbGFiZWwsIGRmc2FuX2xhYmVsIG5fbGFiZWwpOwordm9pZCBkZnNhbl93ZWFrX2hvb2tfc3RybmNtcCh2b2lkICpjYWxsZXJfcGMsIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4sIGRmc2FuX2xhYmVsIHMxX2xhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNhbl9sYWJlbCBzMl9sYWJlbCwgZGZzYW5fbGFiZWwgbl9sYWJlbCk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIGRmc2FuX3NldF9sYWJlbChkZnNhbl9sYWJlbCBsYWJlbCwgVCAmZGF0YSkgeyAgLy8gTk9MSU5UCisgIGRmc2FuX3NldF9sYWJlbChsYWJlbCwgKHZvaWQgKikmZGF0YSwgc2l6ZW9mKFQpKTsKK30KKworI2VuZGlmCisKKyNlbmRpZiAgLy8gREZTQU5fSU5URVJGQUNFX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2VzYW5faW50ZXJmYWNlLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9lc2FuX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZTliOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9lc2FuX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8vPT09LS0gc2FuaXRpemVyL2VzYW5faW50ZXJmYWNlLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0gQysrIC0qLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBFZmZpY2llbmN5U2FuaXRpemVyLCBhIGZhbWlseSBvZiBwZXJmb3JtYW5jZSB0dW5lcnMuCisvLworLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIuCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworI2lmbmRlZiBTQU5JVElaRVJfRVNBTl9JTlRFUkZBQ0VfSAorI2RlZmluZSBTQU5JVElaRVJfRVNBTl9JTlRFUkZBQ0VfSAorCisjaW5jbHVkZSA8c2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oPgorCisvLyBXZSBkZWNsYXJlIG91ciBpbnRlcmZhY2Ugcm91dGluZXMgYXMgd2VhayB0byBhbGxvdyB0aGUgdXNlciB0byBhdm9pZAorLy8gaWZkZWZzIGFuZCBpbnN0ZWFkIHVzZSB0aGlzIHBhdHRlcm4gdG8gYWxsb3cgYnVpbGRpbmcgdGhlIHNhbWUgc291cmNlcworLy8gd2l0aCBhbmQgd2l0aG91dCBvdXIgcnVudGltZSBsaWJyYXJ5OgorLy8gICAgIGlmIChfX2VzYW5fcmVwb3J0KQorLy8gICAgICAgX19lc2FuX3JlcG9ydCgpOworI2lmZGVmIF9NU0NfVkVSCisvKiBzZWxlY3RhbnkgaXMgYXMgY2xvc2UgdG8gd2VhayBhcyB3ZSdsbCBnZXQuICovCisjZGVmaW5lIENPTVBJTEVSX1JUX1dFQUsgX19kZWNsc3BlYyhzZWxlY3RhbnkpCisjZWxpZiBfX0dOVUNfXworI2RlZmluZSBDT01QSUxFUl9SVF9XRUFLIF9fYXR0cmlidXRlX18oKHdlYWspKQorI2Vsc2UKKyNkZWZpbmUgQ09NUElMRVJfUlRfV0VBSworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG1pZC1ydW4gKG9yIGF0IHRoZSBlbmQgb2YgYSBydW4gZm9yCisvLyBhIHNlcnZlciBwcm9jZXNzIHRoYXQgZG9lc24ndCBzaHV0IGRvd24gbm9ybWFsbHkpIHRvIHJlcXVlc3QgdGhhdAorLy8gZGF0YSBmb3IgdGhhdCBwb2ludCBpbiB0aGUgcnVuIGJlIHJlcG9ydGVkIGZyb20gdGhlIHRvb2wuCit2b2lkIENPTVBJTEVSX1JUX1dFQUsgX19lc2FuX3JlcG9ydCgpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAvLyBTQU5JVElaRVJfRVNBTl9JTlRFUkZBQ0VfSApkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvbGludXhfc3lzY2FsbF9ob29rcy5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvbGludXhfc3lzY2FsbF9ob29rcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZjI2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9saW51eF9zeXNjYWxsX2hvb2tzLmgKQEAgLTAsMCArMSwzMDgzIEBACisvLz09PS0tIGxpbnV4X3N5c2NhbGxfaG9va3MuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vIFRoaXMgZmlsZSBpcyBhIHBhcnQgb2YgcHVibGljIHNhbml0aXplciBpbnRlcmZhY2UuCisvLworLy8gU3lzdGVtIGNhbGwgaGFuZGxlcnMuCisvLworLy8gSW50ZXJmYWNlIG1ldGhvZHMgZGVjbGFyZWQgaW4gdGhpcyBoZWFkZXIgaW1wbGVtZW50IHByZS0gYW5kIHBvc3QtIHN5c2NhbGwKKy8vIGFjdGlvbnMgZm9yIHRoZSBhY3RpdmUgc2FuaXRpemVyLgorLy8gVXNhZ2U6CisvLyAgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGZvbyguLi5hcmdzLi4uKTsKKy8vICAgbG9uZyByZXMgPSBzeXNjYWxsKF9fTlJfZ2V0Zm9vLCAuLi5hcmdzLi4uKTsKKy8vICAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGZvbyhyZXMsIC4uLmFyZ3MuLi4pOworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKyNpZm5kZWYgU0FOSVRJWkVSX0xJTlVYX1NZU0NBTExfSE9PS1NfSAorI2RlZmluZSBTQU5JVElaRVJfTElOVVhfU1lTQ0FMTF9IT09LU19ICisKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZSh0bG9jKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZSgobG9uZykodGxvYykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lKHJlcywgdGxvYykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lKHJlcywgKGxvbmcpKHRsb2MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zdGltZSh0cHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RpbWUoKGxvbmcpKHRwdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3RpbWUocmVzLCB0cHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0aW1lKHJlcywgKGxvbmcpKHRwdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR0aW1lb2ZkYXkodHYsIHR6KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0dGltZW9mZGF5KChsb25nKSh0diksIChsb25nKSh0eikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXR0aW1lb2ZkYXkocmVzLCB0diwgdHopIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0dGltZW9mZGF5KHJlcywgKGxvbmcpKHR2KSwgKGxvbmcpKHR6KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0dGltZW9mZGF5KHR2LCB0eikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHRpbWVvZmRheSgobG9uZykodHYpLCAobG9uZykodHopKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0dGltZW9mZGF5KHJlcywgdHYsIHR6KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHRpbWVvZmRheShyZXMsIChsb25nKSh0diksIChsb25nKSh0eikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2FkanRpbWV4KHR4Y19wKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWRqdGltZXgoKGxvbmcpKHR4Y19wKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FkanRpbWV4KHJlcywgdHhjX3ApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWRqdGltZXgocmVzLCAobG9uZykodHhjX3ApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcyh0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXMoKGxvbmcpKHRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXMocmVzLCB0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVzKHJlcywgKGxvbmcpKHRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR0aWQoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHRpZCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXR0aWQocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHRpZChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25hbm9zbGVlcChycXRwLCBybXRwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmFub3NsZWVwKChsb25nKShycXRwKSwgKGxvbmcpKHJtdHApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmFub3NsZWVwKHJlcywgcnF0cCwgcm10cCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uYW5vc2xlZXAocmVzLCAobG9uZykocnF0cCksIChsb25nKShybXRwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYWxhcm0oc2Vjb25kcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FsYXJtKChsb25nKShzZWNvbmRzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FsYXJtKHJlcywgc2Vjb25kcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hbGFybShyZXMsIChsb25nKShzZWNvbmRzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cGlkKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwaWQoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cGlkKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwaWQocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRwcGlkKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwcGlkKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHBwaWQocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBwaWQocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR1aWQoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHVpZCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXR1aWQocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHVpZChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGV1aWQoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGV1aWQoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0ZXVpZChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZXVpZChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGdpZCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z2lkKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGdpZChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z2lkKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0ZWdpZCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZWdpZCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRlZ2lkKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRlZ2lkKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cmVzdWlkKHJ1aWQsIGV1aWQsIHN1aWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRyZXN1aWQoKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cmVzdWlkKHJlcywgcnVpZCwgZXVpZCwgc3VpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXN1aWQocmVzLCAobG9uZykocnVpZCksIChsb25nKShldWlkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRyZXNnaWQocmdpZCwgZWdpZCwgc2dpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJlc2dpZCgobG9uZykocmdpZCksIChsb25nKShlZ2lkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2dpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRyZXNnaWQocmVzLCByZ2lkLCBlZ2lkLCBzZ2lkKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc2dpZChyZXMsIChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2dpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHBnaWQocGlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGdpZCgobG9uZykocGlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHBnaWQocmVzLCBwaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cGdpZChyZXMsIChsb25nKShwaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRwZ3JwKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwZ3JwKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHBncnAocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBncnAocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRzaWQocGlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0c2lkKChsb25nKShwaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0c2lkKHJlcywgcGlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHNpZChyZXMsIChsb25nKShwaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRncm91cHMoZ2lkc2V0c2l6ZSwgZ3JvdXBsaXN0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z3JvdXBzKChsb25nKShnaWRzZXRzaXplKSwgKGxvbmcpKGdyb3VwbGlzdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRncm91cHMocmVzLCBnaWRzZXRzaXplLCBncm91cGxpc3QpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z3JvdXBzKHJlcywgKGxvbmcpKGdpZHNldHNpemUpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwbGlzdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlZ2lkKHJnaWQsIGVnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZWdpZCgobG9uZykocmdpZCksIChsb25nKShlZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlZ2lkKHJlcywgcmdpZCwgZWdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZWdpZChyZXMsIChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRnaWQoZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z2lkKChsb25nKShnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0Z2lkKHJlcywgZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdpZChyZXMsIChsb25nKShnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXVpZChydWlkLCBldWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmV1aWQoKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXVpZChyZXMsIHJ1aWQsIGV1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmV1aWQocmVzLCAobG9uZykocnVpZCksIChsb25nKShldWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0dWlkKHVpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHVpZCgobG9uZykodWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHVpZChyZXMsIHVpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR1aWQocmVzLCAobG9uZykodWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmVzdWlkKHJ1aWQsIGV1aWQsIHN1aWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXN1aWQoKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVzdWlkKHJlcywgcnVpZCwgZXVpZCwgc3VpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXN1aWQocmVzLCAobG9uZykocnVpZCksIChsb25nKShldWlkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXNnaWQocmdpZCwgZWdpZCwgc2dpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlc2dpZCgobG9uZykocmdpZCksIChsb25nKShlZ2lkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2dpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXNnaWQocmVzLCByZ2lkLCBlZ2lkLCBzZ2lkKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlc2dpZChyZXMsIChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2dpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGZzdWlkKHVpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGZzdWlkKChsb25nKSh1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0ZnN1aWQocmVzLCB1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnN1aWQocmVzLCAobG9uZykodWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0ZnNnaWQoZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0ZnNnaWQoKGxvbmcpKGdpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRmc2dpZChyZXMsIGdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRmc2dpZChyZXMsIChsb25nKShnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRwZ2lkKHBpZCwgcGdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHBnaWQoKGxvbmcpKHBpZCksIChsb25nKShwZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHBnaWQocmVzLCBwaWQsIHBnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cGdpZChyZXMsIChsb25nKShwaWQpLCAobG9uZykocGdpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHNpZCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0c2lkKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHNpZChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0c2lkKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0Z3JvdXBzKGdpZHNldHNpemUsIGdyb3VwbGlzdCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGdyb3VwcygobG9uZykoZ2lkc2V0c2l6ZSksIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0Z3JvdXBzKHJlcywgZ2lkc2V0c2l6ZSwgZ3JvdXBsaXN0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdyb3VwcyhyZXMsIChsb25nKShnaWRzZXRzaXplKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9hY2N0KG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hY2N0KChsb25nKShuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FjY3QocmVzLCBuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FjY3QocmVzLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2NhcGdldChoZWFkZXIsIGRhdGFwdHIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jYXBnZXQoKGxvbmcpKGhlYWRlciksIChsb25nKShkYXRhcHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2NhcGdldChyZXMsIGhlYWRlciwgZGF0YXB0cikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jYXBnZXQocmVzLCAobG9uZykoaGVhZGVyKSwgKGxvbmcpKGRhdGFwdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jYXBzZXQoaGVhZGVyLCBkYXRhKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2Fwc2V0KChsb25nKShoZWFkZXIpLCAobG9uZykoZGF0YSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jYXBzZXQocmVzLCBoZWFkZXIsIGRhdGEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2Fwc2V0KHJlcywgKGxvbmcpKGhlYWRlciksIChsb25nKShkYXRhKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGVyc29uYWxpdHkocGVyc29uYWxpdHkpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wZXJzb25hbGl0eSgobG9uZykocGVyc29uYWxpdHkpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGVyc29uYWxpdHkocmVzLCBwZXJzb25hbGl0eSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wZXJzb25hbGl0eShyZXMsIChsb25nKShwZXJzb25hbGl0eSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NpZ3BlbmRpbmcoc2V0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lncGVuZGluZygobG9uZykoc2V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ3BlbmRpbmcocmVzLCBzZXQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lncGVuZGluZyhyZXMsIChsb25nKShzZXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWdwcm9jbWFzayhob3csIHNldCwgb3NldCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ3Byb2NtYXNrKChsb25nKShob3cpLCAobG9uZykoc2V0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvc2V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ3Byb2NtYXNrKHJlcywgaG93LCBzZXQsIG9zZXQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lncHJvY21hc2socmVzLCAobG9uZykoaG93KSwgKGxvbmcpKHNldCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9zZXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRpdGltZXIod2hpY2gsIHZhbHVlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0aXRpbWVyKChsb25nKSh3aGljaCksIChsb25nKSh2YWx1ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRpdGltZXIocmVzLCB3aGljaCwgdmFsdWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0aXRpbWVyKHJlcywgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHZhbHVlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0aXRpbWVyKHdoaWNoLCB2YWx1ZSwgb3ZhbHVlKSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGl0aW1lcigobG9uZykod2hpY2gpLCAobG9uZykodmFsdWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvdmFsdWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0aXRpbWVyKHJlcywgd2hpY2gsIHZhbHVlLCBvdmFsdWUpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGl0aW1lcihyZXMsIChsb25nKSh3aGljaCksIChsb25nKSh2YWx1ZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvdmFsdWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcl9jcmVhdGUod2hpY2hfY2xvY2ssIHRpbWVyX2V2ZW50X3NwZWMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRfdGltZXJfaWQpICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJfY3JlYXRlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHdoaWNoX2Nsb2NrKSwgKGxvbmcpKHRpbWVyX2V2ZW50X3NwZWMpLCAobG9uZykoY3JlYXRlZF90aW1lcl9pZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcl9jcmVhdGUoICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXMsIHdoaWNoX2Nsb2NrLCB0aW1lcl9ldmVudF9zcGVjLCBjcmVhdGVkX3RpbWVyX2lkKSAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcl9jcmVhdGUocmVzLCAobG9uZykod2hpY2hfY2xvY2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodGltZXJfZXZlbnRfc3BlYyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjcmVhdGVkX3RpbWVyX2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXJfZ2V0dGltZSh0aW1lcl9pZCwgc2V0dGluZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyX2dldHRpbWUoKGxvbmcpKHRpbWVyX2lkKSwgKGxvbmcpKHNldHRpbmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJfZ2V0dGltZShyZXMsIHRpbWVyX2lkLCBzZXR0aW5nKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2dldHRpbWUocmVzLCAobG9uZykodGltZXJfaWQpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2V0dGluZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVyX2dldG92ZXJydW4odGltZXJfaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9nZXRvdmVycnVuKChsb25nKSh0aW1lcl9pZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcl9nZXRvdmVycnVuKHJlcywgdGltZXJfaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfZ2V0b3ZlcnJ1bihyZXMsIChsb25nKSh0aW1lcl9pZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVyX3NldHRpbWUodGltZXJfaWQsIGZsYWdzLCBuZXdfc2V0dGluZywgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX3NldHRpbmcpICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJfc2V0dGltZSgobG9uZykodGltZXJfaWQpLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3X3NldHRpbmcpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob2xkX3NldHRpbmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJfc2V0dGltZShyZXMsIHRpbWVyX2lkLCBmbGFncywgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3NldHRpbmcsIG9sZF9zZXR0aW5nKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX3NldHRpbWUoICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykodGltZXJfaWQpLCAobG9uZykoZmxhZ3MpLCAobG9uZykobmV3X3NldHRpbmcpLCAgICAgICAgIFwKKyAgICAgIChsb25nKShvbGRfc2V0dGluZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVyX2RlbGV0ZSh0aW1lcl9pZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyX2RlbGV0ZSgobG9uZykodGltZXJfaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJfZGVsZXRlKHJlcywgdGltZXJfaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfZGVsZXRlKHJlcywgKGxvbmcpKHRpbWVyX2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2xvY2tfc2V0dGltZSh3aGljaF9jbG9jaywgdHApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19zZXR0aW1lKChsb25nKSh3aGljaF9jbG9jayksIChsb25nKSh0cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jbG9ja19zZXR0aW1lKHJlcywgd2hpY2hfY2xvY2ssIHRwKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX3NldHRpbWUocmVzLCAobG9uZykod2hpY2hfY2xvY2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHRwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2xvY2tfZ2V0dGltZSh3aGljaF9jbG9jaywgdHApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19nZXR0aW1lKChsb25nKSh3aGljaF9jbG9jayksIChsb25nKSh0cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jbG9ja19nZXR0aW1lKHJlcywgd2hpY2hfY2xvY2ssIHRwKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX2dldHRpbWUocmVzLCAobG9uZykod2hpY2hfY2xvY2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHRwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2xvY2tfYWRqdGltZSh3aGljaF9jbG9jaywgdHgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19hZGp0aW1lKChsb25nKSh3aGljaF9jbG9jayksIChsb25nKSh0eCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jbG9ja19hZGp0aW1lKHJlcywgd2hpY2hfY2xvY2ssIHR4KSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX2FkanRpbWUocmVzLCAobG9uZykod2hpY2hfY2xvY2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHR4KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2xvY2tfZ2V0cmVzKHdoaWNoX2Nsb2NrLCB0cCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX2dldHJlcygobG9uZykod2hpY2hfY2xvY2spLCAobG9uZykodHApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2xvY2tfZ2V0cmVzKHJlcywgd2hpY2hfY2xvY2ssIHRwKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX2dldHJlcyhyZXMsIChsb25nKSh3aGljaF9jbG9jayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nsb2NrX25hbm9zbGVlcCh3aGljaF9jbG9jaywgZmxhZ3MsIHJxdHAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtdHApICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX25hbm9zbGVlcCggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykod2hpY2hfY2xvY2spLCAobG9uZykoZmxhZ3MpLCAobG9uZykocnF0cCksIChsb25nKShybXRwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nsb2NrX25hbm9zbGVlcChyZXMsIHdoaWNoX2Nsb2NrLCBmbGFncywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJxdHAsIHJtdHApICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX25hbm9zbGVlcCggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHdoaWNoX2Nsb2NrKSwgKGxvbmcpKGZsYWdzKSwgKGxvbmcpKHJxdHApLCAobG9uZykocm10cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25pY2UoaW5jcmVtZW50KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmljZSgobG9uZykoaW5jcmVtZW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25pY2UocmVzLCBpbmNyZW1lbnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmljZShyZXMsIChsb25nKShpbmNyZW1lbnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9zZXRzY2hlZHVsZXIocGlkLCBwb2xpY3ksIHBhcmFtKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9zZXRzY2hlZHVsZXIoKGxvbmcpKHBpZCksIChsb25nKShwb2xpY3kpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwYXJhbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9zZXRzY2hlZHVsZXIocmVzLCBwaWQsIHBvbGljeSwgcGFyYW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfc2V0c2NoZWR1bGVyKCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHBvbGljeSksIChsb25nKShwYXJhbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX3NldHBhcmFtKHBpZCwgcGFyYW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9zZXRwYXJhbSgobG9uZykocGlkKSwgKGxvbmcpKHBhcmFtKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX3NldHBhcmFtKHJlcywgcGlkLCBwYXJhbSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9zZXRwYXJhbShyZXMsIChsb25nKShwaWQpLCAobG9uZykocGFyYW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9nZXRzY2hlZHVsZXIocGlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0c2NoZWR1bGVyKChsb25nKShwaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2NoZWRfZ2V0c2NoZWR1bGVyKHJlcywgcGlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldHNjaGVkdWxlcihyZXMsIChsb25nKShwaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9nZXRwYXJhbShwaWQsIHBhcmFtKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0cGFyYW0oKGxvbmcpKHBpZCksIChsb25nKShwYXJhbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9nZXRwYXJhbShyZXMsIHBpZCwgcGFyYW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0cGFyYW0ocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHBhcmFtKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfc2V0YWZmaW5pdHkocGlkLCBsZW4sIHVzZXJfbWFza19wdHIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9zZXRhZmZpbml0eSgobG9uZykocGlkKSwgKGxvbmcpKGxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXNlcl9tYXNrX3B0cikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9zZXRhZmZpbml0eShyZXMsIHBpZCwgbGVuLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX21hc2tfcHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3NldGFmZmluaXR5KCAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShwaWQpLCAobG9uZykobGVuKSwgKGxvbmcpKHVzZXJfbWFza19wdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9nZXRhZmZpbml0eShwaWQsIGxlbiwgdXNlcl9tYXNrX3B0cikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldGFmZmluaXR5KChsb25nKShwaWQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1c2VyX21hc2tfcHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX2dldGFmZmluaXR5KHJlcywgcGlkLCBsZW4sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfbWFza19wdHIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0YWZmaW5pdHkoICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHBpZCksIChsb25nKShsZW4pLCAobG9uZykodXNlcl9tYXNrX3B0cikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX3lpZWxkKCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX3lpZWxkKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX3lpZWxkKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF95aWVsZChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX2dldF9wcmlvcml0eV9tYXgocG9saWN5KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCgobG9uZykocG9saWN5KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX2dldF9wcmlvcml0eV9tYXgocmVzLCBwb2xpY3kpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0X3ByaW9yaXR5X21heChyZXMsIChsb25nKShwb2xpY3kpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9nZXRfcHJpb3JpdHlfbWluKHBvbGljeSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9taW4oKGxvbmcpKHBvbGljeSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9nZXRfcHJpb3JpdHlfbWluKHJlcywgcG9saWN5KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9taW4ocmVzLCAobG9uZykocG9saWN5KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfcnJfZ2V0X2ludGVydmFsKHBpZCwgaW50ZXJ2YWwpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwoKGxvbmcpKHBpZCksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGludGVydmFsKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX3JyX2dldF9pbnRlcnZhbChyZXMsIHBpZCwgaW50ZXJ2YWwpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfcnJfZ2V0X2ludGVydmFsKHJlcywgKGxvbmcpKHBpZCksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShpbnRlcnZhbCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHByaW9yaXR5KHdoaWNoLCB3aG8sIG5pY2V2YWwpICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRwcmlvcml0eSgobG9uZykod2hpY2gpLCAobG9uZykod2hvKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuaWNldmFsKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHByaW9yaXR5KHJlcywgd2hpY2gsIHdobywgbmljZXZhbCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRwcmlvcml0eShyZXMsIChsb25nKSh3aGljaCksIChsb25nKSh3aG8pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuaWNldmFsKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cHJpb3JpdHkod2hpY2gsIHdobykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHByaW9yaXR5KChsb25nKSh3aGljaCksIChsb25nKSh3aG8pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cHJpb3JpdHkocmVzLCB3aGljaCwgd2hvKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHByaW9yaXR5KHJlcywgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHdobykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NodXRkb3duKGFyZzAsIGFyZzEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaHV0ZG93bigobG9uZykoYXJnMCksIChsb25nKShhcmcxKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NodXRkb3duKHJlcywgYXJnMCwgYXJnMSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaHV0ZG93bihyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWJvb3QobWFnaWMxLCBtYWdpYzIsIGNtZCwgYXJnKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWJvb3QoKGxvbmcpKG1hZ2ljMSksIChsb25nKShtYWdpYzIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjbWQpLCAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlYm9vdChyZXMsIG1hZ2ljMSwgbWFnaWMyLCBjbWQsIGFyZykgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlYm9vdChyZXMsIChsb25nKShtYWdpYzEpLCAobG9uZykobWFnaWMyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZXN0YXJ0X3N5c2NhbGwoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVzdGFydF9zeXNjYWxsKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Jlc3RhcnRfc3lzY2FsbChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVzdGFydF9zeXNjYWxsKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfa2V4ZWNfbG9hZChlbnRyeSwgbnJfc2VnbWVudHMsIHNlZ21lbnRzLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9rZXhlY19sb2FkKChsb25nKShlbnRyeSksIChsb25nKShucl9zZWdtZW50cyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZWdtZW50cyksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9rZXhlY19sb2FkKHJlcywgZW50cnksIG5yX3NlZ21lbnRzLCBzZWdtZW50cywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfa2V4ZWNfbG9hZChyZXMsIChsb25nKShlbnRyeSksICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5yX3NlZ21lbnRzKSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZWdtZW50cyksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2V4aXQoZXJyb3JfY29kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2V4aXQoKGxvbmcpKGVycm9yX2NvZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXhpdChyZXMsIGVycm9yX2NvZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXhpdChyZXMsIChsb25nKShlcnJvcl9jb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXhpdF9ncm91cChlcnJvcl9jb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXhpdF9ncm91cCgobG9uZykoZXJyb3JfY29kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9leGl0X2dyb3VwKHJlcywgZXJyb3JfY29kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9leGl0X2dyb3VwKHJlcywgKGxvbmcpKGVycm9yX2NvZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV93YWl0NChwaWQsIHN0YXRfYWRkciwgb3B0aW9ucywgcnUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dhaXQ0KChsb25nKShwaWQpLCAobG9uZykoc3RhdF9hZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRpb25zKSwgKGxvbmcpKHJ1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3dhaXQ0KHJlcywgcGlkLCBzdGF0X2FkZHIsIG9wdGlvbnMsIHJ1KSAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdDQocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHN0YXRfYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGlvbnMpLCAobG9uZykocnUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV93YWl0aWQod2hpY2gsIHBpZCwgaW5mb3AsIG9wdGlvbnMsIHJ1KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd2FpdGlkKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKSh3aGljaCksIChsb25nKShwaWQpLCAobG9uZykoaW5mb3ApLCAobG9uZykob3B0aW9ucyksIChsb25nKShydSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF93YWl0aWQocmVzLCB3aGljaCwgcGlkLCBpbmZvcCwgb3B0aW9ucywgcnUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdGlkKHJlcywgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHBpZCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGluZm9wKSwgKGxvbmcpKG9wdGlvbnMpLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocnUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV93YWl0cGlkKHBpZCwgc3RhdF9hZGRyLCBvcHRpb25zKSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd2FpdHBpZCgobG9uZykocGlkKSwgKGxvbmcpKHN0YXRfYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRpb25zKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3dhaXRwaWQocmVzLCBwaWQsIHN0YXRfYWRkciwgb3B0aW9ucykgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93YWl0cGlkKHJlcywgKGxvbmcpKHBpZCksIChsb25nKShzdGF0X2FkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGlvbnMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRfdGlkX2FkZHJlc3ModGlkcHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0X3RpZF9hZGRyZXNzKChsb25nKSh0aWRwdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0X3RpZF9hZGRyZXNzKHJlcywgdGlkcHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldF90aWRfYWRkcmVzcyhyZXMsIChsb25nKSh0aWRwdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbml0X21vZHVsZSh1bW9kLCBsZW4sIHVhcmdzKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbml0X21vZHVsZSgobG9uZykodW1vZCksIChsb25nKShsZW4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVhcmdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2luaXRfbW9kdWxlKHJlcywgdW1vZCwgbGVuLCB1YXJncykgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2luaXRfbW9kdWxlKHJlcywgKGxvbmcpKHVtb2QpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodWFyZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9kZWxldGVfbW9kdWxlKG5hbWVfdXNlciwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kZWxldGVfbW9kdWxlKChsb25nKShuYW1lX3VzZXIpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZGVsZXRlX21vZHVsZShyZXMsIG5hbWVfdXNlciwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZGVsZXRlX21vZHVsZShyZXMsIChsb25nKShuYW1lX3VzZXIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfc2lncHJvY21hc2soaG93LCBzZXQsIG9zZXQsIHNpZ3NldHNpemUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ydF9zaWdwcm9jbWFzayggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShob3cpLCAobG9uZykoc2V0KSwgKGxvbmcpKG9zZXQpLCAobG9uZykoc2lnc2V0c2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ydF9zaWdwcm9jbWFzayhyZXMsIGhvdywgc2V0LCBvc2V0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdzZXRzaXplKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3J0X3NpZ3Byb2NtYXNrKCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShob3cpLCAobG9uZykoc2V0KSwgKGxvbmcpKG9zZXQpLCAobG9uZykoc2lnc2V0c2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3BlbmRpbmcoc2V0LCBzaWdzZXRzaXplKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lncGVuZGluZygobG9uZykoc2V0KSwgKGxvbmcpKHNpZ3NldHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lncGVuZGluZyhyZXMsIHNldCwgc2lnc2V0c2l6ZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWdwZW5kaW5nKHJlcywgKGxvbmcpKHNldCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaWdzZXRzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfc2lndGltZWR3YWl0KHV0aGVzZSwgdWluZm8sIHV0cywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnc2V0c2l6ZSkgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lndGltZWR3YWl0KCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKSh1dGhlc2UpLCAobG9uZykodWluZm8pLCAobG9uZykodXRzKSwgKGxvbmcpKHNpZ3NldHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lndGltZWR3YWl0KHJlcywgdXRoZXNlLCB1aW5mbywgdXRzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnc2V0c2l6ZSkgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lndGltZWR3YWl0KCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykodXRoZXNlKSwgKGxvbmcpKHVpbmZvKSwgKGxvbmcpKHV0cyksIChsb25nKShzaWdzZXRzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfdGdzaWdxdWV1ZWluZm8odGdpZCwgcGlkLCBzaWcsIHVpbmZvKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfdGdzaWdxdWV1ZWluZm8oKGxvbmcpKHRnaWQpLCAobG9uZykocGlkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaWcpLCAobG9uZykodWluZm8pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfdGdzaWdxdWV1ZWluZm8ocmVzLCB0Z2lkLCBwaWQsIHNpZywgdWluZm8pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfdGdzaWdxdWV1ZWluZm8oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKSh0Z2lkKSwgKGxvbmcpKHBpZCksIChsb25nKShzaWcpLCAobG9uZykodWluZm8pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9raWxsKHBpZCwgc2lnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfa2lsbCgobG9uZykocGlkKSwgKGxvbmcpKHNpZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9raWxsKHJlcywgcGlkLCBzaWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfa2lsbChyZXMsIChsb25nKShwaWQpLCAobG9uZykoc2lnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGdraWxsKHRnaWQsIHBpZCwgc2lnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGdraWxsKChsb25nKSh0Z2lkKSwgKGxvbmcpKHBpZCksIChsb25nKShzaWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGdraWxsKHJlcywgdGdpZCwgcGlkLCBzaWcpICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Rna2lsbChyZXMsIChsb25nKSh0Z2lkKSwgKGxvbmcpKHBpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90a2lsbChwaWQsIHNpZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RraWxsKChsb25nKShwaWQpLCAobG9uZykoc2lnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RraWxsKHJlcywgcGlkLCBzaWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGtpbGwocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHNpZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3F1ZXVlaW5mbyhwaWQsIHNpZywgdWluZm8pICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3NpZ3F1ZXVlaW5mbygobG9uZykocGlkKSwgKGxvbmcpKHNpZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVpbmZvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3J0X3NpZ3F1ZXVlaW5mbyhyZXMsIHBpZCwgc2lnLCB1aW5mbykgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3J0X3NpZ3F1ZXVlaW5mbyhyZXMsIChsb25nKShwaWQpLCAobG9uZykoc2lnKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVpbmZvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2dldG1hc2soKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2dldG1hc2soKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2dldG1hc2socmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NnZXRtYXNrKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3NldG1hc2sobmV3bWFzaykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NzZXRtYXNrKChsb25nKShuZXdtYXNrKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NzZXRtYXNrKHJlcywgbmV3bWFzaykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zc2V0bWFzayhyZXMsIChsb25nKShuZXdtYXNrKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lnbmFsKHNpZywgaGFuZGxlcikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ25hbCgobG9uZykoc2lnKSwgKGxvbmcpKGhhbmRsZXIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2lnbmFsKHJlcywgc2lnLCBoYW5kbGVyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ25hbChyZXMsIChsb25nKShzaWcpLCAobG9uZykoaGFuZGxlcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BhdXNlKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wYXVzZSgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wYXVzZShyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGF1c2UocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zeW5jKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW5jKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N5bmMocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5bmMocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mc3luYyhmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzeW5jKChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mc3luYyhyZXMsIGZkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzeW5jKHJlcywgKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmRhdGFzeW5jKGZkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmRhdGFzeW5jKChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mZGF0YXN5bmMocmVzLCBmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mZGF0YXN5bmMocmVzLCAobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9iZGZsdXNoKGZ1bmMsIGRhdGEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9iZGZsdXNoKChsb25nKShmdW5jKSwgKGxvbmcpKGRhdGEpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYmRmbHVzaChyZXMsIGZ1bmMsIGRhdGEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYmRmbHVzaChyZXMsIChsb25nKShmdW5jKSwgKGxvbmcpKGRhdGEpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tb3VudChkZXZfbmFtZSwgZGlyX25hbWUsIHR5cGUsIGZsYWdzLCBkYXRhKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbW91bnQoKGxvbmcpKGRldl9uYW1lKSwgKGxvbmcpKGRpcl9uYW1lKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodHlwZSksIChsb25nKShmbGFncyksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShkYXRhKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21vdW50KHJlcywgZGV2X25hbWUsIGRpcl9uYW1lLCB0eXBlLCBmbGFncywgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tb3VudChyZXMsIChsb25nKShkZXZfbmFtZSksIChsb25nKShkaXJfbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHR5cGUpLCAobG9uZykoZmxhZ3MpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShkYXRhKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdW1vdW50KG5hbWUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW1vdW50KChsb25nKShuYW1lKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Vtb3VudChyZXMsIG5hbWUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Vtb3VudChyZXMsIChsb25nKShuYW1lKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkdW1vdW50KG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGR1bW91bnQoKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkdW1vdW50KHJlcywgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGR1bW91bnQocmVzLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RydW5jYXRlKHBhdGgsIGxlbmd0aCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RydW5jYXRlKChsb25nKShwYXRoKSwgKGxvbmcpKGxlbmd0aCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90cnVuY2F0ZShyZXMsIHBhdGgsIGxlbmd0aCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90cnVuY2F0ZShyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKGxlbmd0aCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Z0cnVuY2F0ZShmZCwgbGVuZ3RoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnRydW5jYXRlKChsb25nKShmZCksIChsb25nKShsZW5ndGgpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnRydW5jYXRlKHJlcywgZmQsIGxlbmd0aCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mdHJ1bmNhdGUocmVzLCAobG9uZykoZmQpLCAobG9uZykobGVuZ3RoKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3RhdChmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0YXQoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3RhdChyZXMsIGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0YXQocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N0YXRmcyhwYXRoLCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0ZnMoKGxvbmcpKHBhdGgpLCAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N0YXRmcyhyZXMsIHBhdGgsIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0ZnMocmVzLCAobG9uZykocGF0aCksIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zdGF0ZnM2NChwYXRoLCBzeiwgYnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RhdGZzNjQoKGxvbmcpKHBhdGgpLCAobG9uZykoc3opLCAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N0YXRmczY0KHJlcywgcGF0aCwgc3osIGJ1ZikgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3RhdGZzNjQocmVzLCAobG9uZykocGF0aCksIChsb25nKShzeiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZzdGF0ZnMoZmQsIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzdGF0ZnMoKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mc3RhdGZzKHJlcywgZmQsIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdGZzKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZzdGF0ZnM2NChmZCwgc3osIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzdGF0ZnM2NCgobG9uZykoZmQpLCAobG9uZykoc3opLCAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZzdGF0ZnM2NChyZXMsIGZkLCBzeiwgYnVmKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdGZzNjQocmVzLCAobG9uZykoZmQpLCAobG9uZykoc3opLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbHN0YXQoZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sc3RhdCgobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sc3RhdChyZXMsIGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xzdGF0KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mc3RhdChmZCwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzdGF0KChsb25nKShmZCksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZzdGF0KHJlcywgZmQsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXQocmVzLCAobG9uZykoZmQpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25ld3N0YXQoZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXdzdGF0KChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25ld3N0YXQocmVzLCBmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdzdGF0KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9uZXdsc3RhdChmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25ld2xzdGF0KChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25ld2xzdGF0KHJlcywgZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3bHN0YXQocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25ld2ZzdGF0KGZkLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3ZnN0YXQoKGxvbmcpKGZkKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmV3ZnN0YXQocmVzLCBmZCwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdmc3RhdChyZXMsIChsb25nKShmZCksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdXN0YXQoZGV2LCB1YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXN0YXQoKGxvbmcpKGRldiksIChsb25nKSh1YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3VzdGF0KHJlcywgZGV2LCB1YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VzdGF0KHJlcywgKGxvbmcpKGRldiksIChsb25nKSh1YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3RhdDY0KGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RhdDY0KChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N0YXQ2NChyZXMsIGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0YXQ2NChyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnN0YXQ2NChmZCwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzdGF0NjQoKGxvbmcpKGZkKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnN0YXQ2NChyZXMsIGZkLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0NjQocmVzLCAobG9uZykoZmQpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xzdGF0NjQoZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sc3RhdDY0KChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xzdGF0NjQocmVzLCBmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sc3RhdDY0KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXR4YXR0cihwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXR4YXR0ciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykocGF0aCksIChsb25nKShuYW1lKSwgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0eGF0dHIocmVzLCBwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0eGF0dHIocmVzLCAobG9uZykocGF0aCksIChsb25nKShuYW1lKSwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sc2V0eGF0dHIocGF0aCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHNldHhhdHRyKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpLCAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sc2V0eGF0dHIocmVzLCBwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xzZXR4YXR0cihyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mc2V0eGF0dHIoZmQsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzZXR4YXR0ciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKGZkKSwgKGxvbmcpKG5hbWUpLCAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mc2V0eGF0dHIocmVzLCBmZCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzZXR4YXR0cihyZXMsIChsb25nKShmZCksIChsb25nKShuYW1lKSwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR4YXR0cihwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSkgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0eGF0dHIoKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXR4YXR0cihyZXMsIHBhdGgsIG5hbWUsIHZhbHVlLCBzaXplKSAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0eGF0dHIocmVzLCAobG9uZykocGF0aCksIChsb25nKShuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xnZXR4YXR0cihwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSkgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGdldHhhdHRyKChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xnZXR4YXR0cihyZXMsIHBhdGgsIG5hbWUsIHZhbHVlLCBzaXplKSAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGdldHhhdHRyKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmdldHhhdHRyKGZkLCBuYW1lLCB2YWx1ZSwgc2l6ZSkgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmdldHhhdHRyKChsb25nKShmZCksIChsb25nKShuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mZ2V0eGF0dHIocmVzLCBmZCwgbmFtZSwgdmFsdWUsIHNpemUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mZ2V0eGF0dHIocmVzLCAobG9uZykoZmQpLCAobG9uZykobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGlzdHhhdHRyKHBhdGgsIGxpc3QsIHNpemUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saXN0eGF0dHIoKGxvbmcpKHBhdGgpLCAobG9uZykobGlzdCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGlzdHhhdHRyKHJlcywgcGF0aCwgbGlzdCwgc2l6ZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9saXN0eGF0dHIocmVzLCAobG9uZykocGF0aCksIChsb25nKShsaXN0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sbGlzdHhhdHRyKHBhdGgsIGxpc3QsIHNpemUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sbGlzdHhhdHRyKChsb25nKShwYXRoKSwgKGxvbmcpKGxpc3QpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sbGlzdHhhdHRyKHJlcywgcGF0aCwgbGlzdCwgc2l6ZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sbGlzdHhhdHRyKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobGlzdCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZsaXN0eGF0dHIoZmQsIGxpc3QsIHNpemUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mbGlzdHhhdHRyKChsb25nKShmZCksIChsb25nKShsaXN0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmxpc3R4YXR0cihyZXMsIGZkLCBsaXN0LCBzaXplKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZsaXN0eGF0dHIocmVzLCAobG9uZykoZmQpLCAobG9uZykobGlzdCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlbW92ZXhhdHRyKHBhdGgsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW1vdmV4YXR0cigobG9uZykocGF0aCksIChsb25nKShuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlbW92ZXhhdHRyKHJlcywgcGF0aCwgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZW1vdmV4YXR0cihyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9scmVtb3ZleGF0dHIocGF0aCwgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xyZW1vdmV4YXR0cigobG9uZykocGF0aCksIChsb25nKShuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xyZW1vdmV4YXR0cihyZXMsIHBhdGgsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHJlbW92ZXhhdHRyKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZyZW1vdmV4YXR0cihmZCwgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZyZW1vdmV4YXR0cigobG9uZykoZmQpLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mcmVtb3ZleGF0dHIocmVzLCBmZCwgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mcmVtb3ZleGF0dHIocmVzLCAobG9uZykoZmQpLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2JyayhicmspIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9icmsoKGxvbmcpKGJyaykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9icmsocmVzLCBicmspIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYnJrKHJlcywgKGxvbmcpKGJyaykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21wcm90ZWN0KHN0YXJ0LCBsZW4sIHByb3QpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcHJvdGVjdCgobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwcm90KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21wcm90ZWN0KHJlcywgc3RhcnQsIGxlbiwgcHJvdCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcHJvdGVjdChyZXMsIChsb25nKShzdGFydCksIChsb25nKShsZW4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwcm90KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXJlbWFwKGFkZHIsIG9sZF9sZW4sIG5ld19sZW4sIGZsYWdzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYWRkcikgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21yZW1hcCgobG9uZykoYWRkciksIChsb25nKShvbGRfbGVuKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld19sZW4pLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdfYWRkcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tcmVtYXAocmVzLCBhZGRyLCBvbGRfbGVuLCBuZXdfbGVuLCBmbGFncywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19hZGRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXJlbWFwKHJlcywgKGxvbmcpKGFkZHIpLCAobG9uZykob2xkX2xlbiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3X2xlbiksIChsb25nKShmbGFncyksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld19hZGRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVtYXBfZmlsZV9wYWdlcyhzdGFydCwgc2l6ZSwgcHJvdCwgcGdvZmYsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW1hcF9maWxlX3BhZ2VzKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShzdGFydCksIChsb25nKShzaXplKSwgKGxvbmcpKHByb3QpLCAobG9uZykocGdvZmYpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVtYXBfZmlsZV9wYWdlcyhyZXMsIHN0YXJ0LCBzaXplLCBwcm90LCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnb2ZmLCBmbGFncykgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVtYXBfZmlsZV9wYWdlcyhyZXMsIChsb25nKShzdGFydCksICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplKSwgKGxvbmcpKHByb3QpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBnb2ZmKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXN5bmMoc3RhcnQsIGxlbiwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc3luYygobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21zeW5jKHJlcywgc3RhcnQsIGxlbiwgZmxhZ3MpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc3luYyhyZXMsIChsb25nKShzdGFydCksIChsb25nKShsZW4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX211bm1hcChhZGRyLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tdW5tYXAoKGxvbmcpKGFkZHIpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X211bm1hcChyZXMsIGFkZHIsIGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5tYXAocmVzLCAobG9uZykoYWRkciksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tbG9jayhzdGFydCwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWxvY2soKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tbG9jayhyZXMsIHN0YXJ0LCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWxvY2socmVzLCAobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXVubG9jayhzdGFydCwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXVubG9jaygobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X211bmxvY2socmVzLCBzdGFydCwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX211bmxvY2socmVzLCAobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWxvY2thbGwoZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tbG9ja2FsbCgobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWxvY2thbGwocmVzLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tbG9ja2FsbChyZXMsIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX211bmxvY2thbGwoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXVubG9ja2FsbCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tdW5sb2NrYWxsKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5sb2NrYWxsKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWFkdmlzZShzdGFydCwgbGVuLCBiZWhhdmlvcikgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWFkdmlzZSgobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJlaGF2aW9yKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21hZHZpc2UocmVzLCBzdGFydCwgbGVuLCBiZWhhdmlvcikgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21hZHZpc2UocmVzLCAobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShiZWhhdmlvcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21pbmNvcmUoc3RhcnQsIGxlbiwgdmVjKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWluY29yZSgobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgKGxvbmcpKHZlYykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9taW5jb3JlKHJlcywgc3RhcnQsIGxlbiwgdmVjKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9taW5jb3JlKHJlcywgKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmVjKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGl2b3Rfcm9vdChuZXdfcm9vdCwgcHV0X29sZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Bpdm90X3Jvb3QoKGxvbmcpKG5ld19yb290KSwgKGxvbmcpKHB1dF9vbGQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGl2b3Rfcm9vdChyZXMsIG5ld19yb290LCBwdXRfb2xkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Bpdm90X3Jvb3QocmVzLCAobG9uZykobmV3X3Jvb3QpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocHV0X29sZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nocm9vdChmaWxlbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nocm9vdCgobG9uZykoZmlsZW5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2hyb290KHJlcywgZmlsZW5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2hyb290KHJlcywgKGxvbmcpKGZpbGVuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWtub2QoZmlsZW5hbWUsIG1vZGUsIGRldikgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta25vZCgobG9uZykoZmlsZW5hbWUpLCAobG9uZykobW9kZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZGV2KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21rbm9kKHJlcywgZmlsZW5hbWUsIG1vZGUsIGRldikgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWtub2QocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykobW9kZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGRldikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xpbmsob2xkbmFtZSwgbmV3bmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xpbmsoKGxvbmcpKG9sZG5hbWUpLCAobG9uZykobmV3bmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9saW5rKHJlcywgb2xkbmFtZSwgbmV3bmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9saW5rKHJlcywgKGxvbmcpKG9sZG5hbWUpLCAobG9uZykobmV3bmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5bWxpbmsob2xkLCBuZXdfKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3ltbGluaygobG9uZykob2xkKSwgKGxvbmcpKG5ld18pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3ltbGluayhyZXMsIG9sZCwgbmV3XykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeW1saW5rKHJlcywgKGxvbmcpKG9sZCksIChsb25nKShuZXdfKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdW5saW5rKHBhdGhuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW5saW5rKChsb25nKShwYXRobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91bmxpbmsocmVzLCBwYXRobmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bmxpbmsocmVzLCAobG9uZykocGF0aG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZW5hbWUob2xkbmFtZSwgbmV3bmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlbmFtZSgobG9uZykob2xkbmFtZSksIChsb25nKShuZXduYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlbmFtZShyZXMsIG9sZG5hbWUsIG5ld25hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVuYW1lKHJlcywgKGxvbmcpKG9sZG5hbWUpLCAobG9uZykobmV3bmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2NobW9kKGZpbGVuYW1lLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2htb2QoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2htb2QocmVzLCBmaWxlbmFtZSwgbW9kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaG1vZChyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNobW9kKGZkLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNobW9kKChsb25nKShmZCksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZjaG1vZChyZXMsIGZkLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG1vZChyZXMsIChsb25nKShmZCksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNudGwoZmQsIGNtZCwgYXJnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNudGwoKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmNudGwocmVzLCBmZCwgY21kLCBhcmcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNudGwocmVzLCAobG9uZykoZmQpLCAobG9uZykoY21kKSwgKGxvbmcpKGFyZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZjbnRsNjQoZmQsIGNtZCwgYXJnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNudGw2NCgobG9uZykoZmQpLCAobG9uZykoY21kKSwgKGxvbmcpKGFyZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY250bDY0KHJlcywgZmQsIGNtZCwgYXJnKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY250bDY0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGlwZShmaWxkZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9waXBlKChsb25nKShmaWxkZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGlwZShyZXMsIGZpbGRlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9waXBlKHJlcywgKGxvbmcpKGZpbGRlcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BpcGUyKGZpbGRlcywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9waXBlMigobG9uZykoZmlsZGVzKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BpcGUyKHJlcywgZmlsZGVzLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9waXBlMihyZXMsIChsb25nKShmaWxkZXMpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9kdXAoZmlsZGVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZHVwKChsb25nKShmaWxkZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZHVwKHJlcywgZmlsZGVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2R1cChyZXMsIChsb25nKShmaWxkZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9kdXAyKG9sZGZkLCBuZXdmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2R1cDIoKGxvbmcpKG9sZGZkKSwgKGxvbmcpKG5ld2ZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2R1cDIocmVzLCBvbGRmZCwgbmV3ZmQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZHVwMihyZXMsIChsb25nKShvbGRmZCksIChsb25nKShuZXdmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2R1cDMob2xkZmQsIG5ld2ZkLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2R1cDMoKGxvbmcpKG9sZGZkKSwgKGxvbmcpKG5ld2ZkKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2R1cDMocmVzLCBvbGRmZCwgbmV3ZmQsIGZsYWdzKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZHVwMyhyZXMsIChsb25nKShvbGRmZCksIChsb25nKShuZXdmZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pb3Blcm0oZnJvbSwgbnVtLCBvbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvcGVybSgobG9uZykoZnJvbSksIChsb25nKShudW0pLCAobG9uZykob24pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW9wZXJtKHJlcywgZnJvbSwgbnVtLCBvbikgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvcGVybShyZXMsIChsb25nKShmcm9tKSwgKGxvbmcpKG51bSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvY3RsKGZkLCBjbWQsIGFyZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvY3RsKChsb25nKShmZCksIChsb25nKShjbWQpLCAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvY3RsKHJlcywgZmQsIGNtZCwgYXJnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvY3RsKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mbG9jayhmZCwgY21kKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmxvY2soKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mbG9jayhyZXMsIGZkLCBjbWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmxvY2socmVzLCAobG9uZykoZmQpLCAobG9uZykoY21kKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9fc2V0dXAobnJfcmVxcywgY3R4KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fc2V0dXAoKGxvbmcpKG5yX3JlcXMpLCAobG9uZykoY3R4KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvX3NldHVwKHJlcywgbnJfcmVxcywgY3R4KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX3NldHVwKHJlcywgKGxvbmcpKG5yX3JlcXMpLCAobG9uZykoY3R4KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9fZGVzdHJveShjdHgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19kZXN0cm95KChsb25nKShjdHgpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW9fZGVzdHJveShyZXMsIGN0eCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19kZXN0cm95KHJlcywgKGxvbmcpKGN0eCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19nZXRldmVudHMoKGxvbmcpKGN0eF9pZCksIChsb25nKShtaW5fbnIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuciksIChsb25nKShldmVudHMpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodGltZW91dCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb19nZXRldmVudHMocmVzLCBjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fZ2V0ZXZlbnRzKHJlcywgKGxvbmcpKGN0eF9pZCksICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobWluX25yKSwgKGxvbmcpKG5yKSwgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGV2ZW50cyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9fc3VibWl0KGN0eF9pZCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvX3N1Ym1pdCgobG9uZykoY3R4X2lkKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvX3N1Ym1pdChyZXMsIGN0eF9pZCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19zdWJtaXQocmVzLCAobG9uZykoY3R4X2lkKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvX2NhbmNlbChjdHhfaWQsIGlvY2IsIHJlc3VsdCkgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19jYW5jZWwoKGxvbmcpKGN0eF9pZCksIChsb25nKShpb2NiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocmVzdWx0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvX2NhbmNlbChyZXMsIGN0eF9pZCwgaW9jYiwgcmVzdWx0KSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19jYW5jZWwocmVzLCAobG9uZykoY3R4X2lkKSwgKGxvbmcpKGlvY2IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocmVzdWx0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VuZGZpbGUob3V0X2ZkLCBpbl9mZCwgb2Zmc2V0LCBjb3VudCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRmaWxlKChsb25nKShvdXRfZmQpLCAobG9uZykoaW5fZmQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9mZnNldCksIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW5kZmlsZShyZXMsIG91dF9mZCwgaW5fZmQsIG9mZnNldCwgY291bnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZGZpbGUocmVzLCAobG9uZykob3V0X2ZkKSwgKGxvbmcpKGluX2ZkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob2Zmc2V0KSwgKGxvbmcpKGNvdW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VuZGZpbGU2NChvdXRfZmQsIGluX2ZkLCBvZmZzZXQsIGNvdW50KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZGZpbGU2NCgobG9uZykob3V0X2ZkKSwgKGxvbmcpKGluX2ZkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9mZnNldCksIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW5kZmlsZTY0KHJlcywgb3V0X2ZkLCBpbl9mZCwgb2Zmc2V0LCBjb3VudCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kZmlsZTY0KHJlcywgKGxvbmcpKG91dF9mZCksIChsb25nKShpbl9mZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob2Zmc2V0KSwgKGxvbmcpKGNvdW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZGxpbmsocGF0aCwgYnVmLCBidWZzaXopICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZGxpbmsoKGxvbmcpKHBhdGgpLCAobG9uZykoYnVmKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidWZzaXopKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVhZGxpbmsocmVzLCBwYXRoLCBidWYsIGJ1ZnNpeikgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZGxpbmsocmVzLCAobG9uZykocGF0aCksIChsb25nKShidWYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidWZzaXopKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jcmVhdChwYXRobmFtZSwgbW9kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NyZWF0KChsb25nKShwYXRobmFtZSksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2NyZWF0KHJlcywgcGF0aG5hbWUsIG1vZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY3JlYXQocmVzLCAobG9uZykocGF0aG5hbWUpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29wZW4oZmlsZW5hbWUsIGZsYWdzLCBtb2RlKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb3BlbigobG9uZykoZmlsZW5hbWUpLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vcGVuKHJlcywgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29wZW4ocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jbG9zZShmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb3NlKChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jbG9zZShyZXMsIGZkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb3NlKHJlcywgKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYWNjZXNzKGZpbGVuYW1lLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWNjZXNzKChsb25nKShmaWxlbmFtZSksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FjY2VzcyhyZXMsIGZpbGVuYW1lLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FjY2VzcyhyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdmhhbmd1cCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdmhhbmd1cCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF92aGFuZ3VwKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF92aGFuZ3VwKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2hvd24oZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaG93bigobG9uZykoZmlsZW5hbWUpLCAobG9uZykodXNlciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2hvd24ocmVzLCBmaWxlbmFtZSwgdXNlciwgZ3JvdXApICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaG93bihyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKSh1c2VyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sY2hvd24oZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sY2hvd24oKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHVzZXIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sY2hvd24ocmVzLCBmaWxlbmFtZSwgdXNlciwgZ3JvdXApICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sY2hvd24ocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykodXNlciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZjaG93bihmZCwgdXNlciwgZ3JvdXApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2hvd24oKGxvbmcpKGZkKSwgKGxvbmcpKHVzZXIpLCAobG9uZykoZ3JvdXApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmNob3duKHJlcywgZmQsIHVzZXIsIGdyb3VwKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNob3duKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHVzZXIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jaG93bjE2KGZpbGVuYW1lLCB1c2VyLCBncm91cCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nob3duMTYoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpdXNlciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZ3JvdXApCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jaG93bjE2KHJlcywgZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nob3duMTYocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZyl1c2VyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZ3JvdXApCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xjaG93bjE2KGZpbGVuYW1lLCB1c2VyLCBncm91cCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xjaG93bjE2KChsb25nKShmaWxlbmFtZSksIChsb25nKXVzZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylncm91cCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xjaG93bjE2KHJlcywgZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xjaG93bjE2KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpdXNlciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylncm91cCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNob3duMTYoZmQsIHVzZXIsIGdyb3VwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNob3duMTYoKGxvbmcpKGZkKSwgKGxvbmcpdXNlciwgKGxvbmcpZ3JvdXApCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2hvd24xNihyZXMsIGZkLCB1c2VyLCBncm91cCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2hvd24xNihyZXMsIChsb25nKShmZCksIChsb25nKXVzZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZ3JvdXApCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlZ2lkMTYocmdpZCwgZWdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlZ2lkMTYoKGxvbmcpcmdpZCwgKGxvbmcpZWdpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlZ2lkMTYocmVzLCByZ2lkLCBlZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlZ2lkMTYocmVzLCAobG9uZylyZ2lkLCAobG9uZyllZ2lkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRnaWQxNihnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRnaWQxNigobG9uZylnaWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRnaWQxNihyZXMsIGdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRnaWQxNihyZXMsIChsb25nKWdpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmV1aWQxNihydWlkLCBldWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmV1aWQxNigobG9uZylydWlkLCAobG9uZylldWlkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmV1aWQxNihyZXMsIHJ1aWQsIGV1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmV1aWQxNihyZXMsIChsb25nKXJ1aWQsIChsb25nKWV1aWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHVpZDE2KHVpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHVpZDE2KChsb25nKXVpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHVpZDE2KHJlcywgdWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHVpZDE2KHJlcywgKGxvbmcpdWlkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXN1aWQxNihydWlkLCBldWlkLCBzdWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVzdWlkMTYoKGxvbmcpcnVpZCwgKGxvbmcpZXVpZCwgKGxvbmcpc3VpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlc3VpZDE2KHJlcywgcnVpZCwgZXVpZCwgc3VpZCkgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlc3VpZDE2KHJlcywgKGxvbmcpcnVpZCwgKGxvbmcpZXVpZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylzdWlkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRyZXN1aWQxNihydWlkLCBldWlkLCBzdWlkKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzdWlkMTYoKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3VpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRyZXN1aWQxNihyZXMsIHJ1aWQsIGV1aWQsIHN1aWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cmVzdWlkMTYocmVzLCAobG9uZykocnVpZCksIChsb25nKShldWlkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3VpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlc2dpZDE2KHJnaWQsIGVnaWQsIHNnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXNnaWQxNigobG9uZylyZ2lkLCAobG9uZyllZ2lkLCAobG9uZylzZ2lkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVzZ2lkMTYocmVzLCByZ2lkLCBlZ2lkLCBzZ2lkKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVzZ2lkMTYocmVzLCAobG9uZylyZ2lkLCAobG9uZyllZ2lkLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKXNnaWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHJlc2dpZDE2KHJnaWQsIGVnaWQsIHNnaWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRyZXNnaWQxNigobG9uZykocmdpZCksIChsb25nKShlZ2lkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHJlc2dpZDE2KHJlcywgcmdpZCwgZWdpZCwgc2dpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXNnaWQxNihyZXMsIChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0ZnN1aWQxNih1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc3VpZDE2KChsb25nKXVpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGZzdWlkMTYocmVzLCB1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnN1aWQxNihyZXMsIChsb25nKXVpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0ZnNnaWQxNihnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc2dpZDE2KChsb25nKWdpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGZzZ2lkMTYocmVzLCBnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnNnaWQxNihyZXMsIChsb25nKWdpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0Z3JvdXBzMTYoZ2lkc2V0c2l6ZSwgZ3JvdXBsaXN0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z3JvdXBzMTYoKGxvbmcpKGdpZHNldHNpemUpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Z3JvdXBzMTYocmVzLCBnaWRzZXRzaXplLCBncm91cGxpc3QpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z3JvdXBzMTYocmVzLCAobG9uZykoZ2lkc2V0c2l6ZSksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRncm91cHMxNihnaWRzZXRzaXplLCBncm91cGxpc3QpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRncm91cHMxNigobG9uZykoZ2lkc2V0c2l6ZSksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwbGlzdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRncm91cHMxNihyZXMsIGdpZHNldHNpemUsIGdyb3VwbGlzdCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRncm91cHMxNihyZXMsIChsb25nKShnaWRzZXRzaXplKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwbGlzdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHVpZDE2KCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHVpZDE2KCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHVpZDE2KHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXR1aWQxNihyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGV1aWQxNigpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRldWlkMTYoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0ZXVpZDE2KHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRldWlkMTYocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRnaWQxNigpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRnaWQxNigpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRnaWQxNihyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z2lkMTYocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRlZ2lkMTYoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZWdpZDE2KCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGVnaWQxNihyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZWdpZDE2KHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdXRpbWUoZmlsZW5hbWUsIHRpbWVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXRpbWUoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHRpbWVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3V0aW1lKHJlcywgZmlsZW5hbWUsIHRpbWVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3V0aW1lKHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHRpbWVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdXRpbWVzKGZpbGVuYW1lLCB1dGltZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91dGltZXMoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHV0aW1lcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91dGltZXMocmVzLCBmaWxlbmFtZSwgdXRpbWVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3V0aW1lcyhyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKSh1dGltZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sc2VlayhmZCwgb2Zmc2V0LCBvcmlnaW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sc2VlaygobG9uZykoZmQpLCAobG9uZykob2Zmc2V0KSwgKGxvbmcpKG9yaWdpbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sc2VlayhyZXMsIGZkLCBvZmZzZXQsIG9yaWdpbikgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHNlZWsocmVzLCAobG9uZykoZmQpLCAobG9uZykob2Zmc2V0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3JpZ2luKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGxzZWVrKGZkLCBvZmZzZXRfaGlnaCwgb2Zmc2V0X2xvdywgcmVzdWx0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xsc2VlaygobG9uZykoZmQpLCAobG9uZykob2Zmc2V0X2hpZ2gpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9mZnNldF9sb3cpLCAobG9uZykocmVzdWx0KSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcmlnaW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGxzZWVrKHJlcywgZmQsIG9mZnNldF9oaWdoLCBvZmZzZXRfbG93LCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCBvcmlnaW4pICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGxzZWVrKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG9mZnNldF9oaWdoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9mZnNldF9sb3cpLCAobG9uZykocmVzdWx0KSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3JpZ2luKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZChmZCwgYnVmLCBjb3VudCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlYWQoKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkKHJlcywgZmQsIGJ1ZiwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWFkKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWFkdihmZCwgdmVjLCB2bGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZHYoKGxvbmcpKGZkKSwgKGxvbmcpKHZlYyksIChsb25nKSh2bGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlYWR2KHJlcywgZmQsIHZlYywgdmxlbikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWFkdihyZXMsIChsb25nKShmZCksIChsb25nKSh2ZWMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2bGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfd3JpdGUoZmQsIGJ1ZiwgY291bnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93cml0ZSgobG9uZykoZmQpLCAobG9uZykoYnVmKSwgKGxvbmcpKGNvdW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3dyaXRlKHJlcywgZmQsIGJ1ZiwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93cml0ZShyZXMsIChsb25nKShmZCksIChsb25nKShidWYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3dyaXRldihmZCwgdmVjLCB2bGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd3JpdGV2KChsb25nKShmZCksIChsb25nKSh2ZWMpLCAobG9uZykodmxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF93cml0ZXYocmVzLCBmZCwgdmVjLCB2bGVuKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dyaXRldihyZXMsIChsb25nKShmZCksIChsb25nKSh2ZWMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmxlbikpCisKKyNpZmRlZiBfTFA2NAorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcmVhZDY0KGZkLCBidWYsIGNvdW50LCBwb3MpICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcmVhZDY0KChsb25nKShmZCksIChsb25nKShidWYpLCAobG9uZykoY291bnQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ByZWFkNjQocmVzLCBmZCwgYnVmLCBjb3VudCwgcG9zKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ByZWFkNjQocmVzLCAobG9uZykoZmQpLCAobG9uZykoYnVmKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCksIChsb25nKShwb3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wd3JpdGU2NChmZCwgYnVmLCBjb3VudCwgcG9zKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHdyaXRlNjQoKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpLCAobG9uZykocG9zKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3B3cml0ZTY0KHJlcywgZmQsIGJ1ZiwgY291bnQsIHBvcykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wd3JpdGU2NChyZXMsIChsb25nKShmZCksIChsb25nKShidWYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCksIChsb25nKShwb3MpKQorI2Vsc2UKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHJlYWQ2NChmZCwgYnVmLCBjb3VudCwgcG9zMCwgcG9zMSkgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJlYWQ2NCgobG9uZykoZmQpLCAobG9uZykoYnVmKSwgKGxvbmcpKGNvdW50KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvczApLCAobG9uZykocG9zMSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wcmVhZDY0KHJlcywgZmQsIGJ1ZiwgY291bnQsIHBvczAsIHBvczEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJlYWQ2NChyZXMsIChsb25nKShmZCksIChsb25nKShidWYpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCksIChsb25nKShwb3MwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwb3MxKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHdyaXRlNjQoZmQsIGJ1ZiwgY291bnQsIHBvczAsIHBvczEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wd3JpdGU2NCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShmZCksIChsb25nKShidWYpLCAobG9uZykoY291bnQpLCAobG9uZykocG9zMCksIChsb25nKShwb3MxKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3B3cml0ZTY0KHJlcywgZmQsIGJ1ZiwgY291bnQsIHBvczAsIHBvczEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHdyaXRlNjQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIChsb25nKShjb3VudCksIChsb25nKShwb3MwKSwgKGxvbmcpKHBvczEpKQorI2VuZGlmCisKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHJlYWR2KGZkLCB2ZWMsIHZsZW4sIHBvc19sLCBwb3NfaCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3ByZWFkdigobG9uZykoZmQpLCAobG9uZykodmVjKSwgKGxvbmcpKHZsZW4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwb3NfbCksIChsb25nKShwb3NfaCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wcmVhZHYocmVzLCBmZCwgdmVjLCB2bGVuLCBwb3NfbCwgcG9zX2gpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJlYWR2KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHZlYyksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZsZW4pLCAobG9uZykocG9zX2wpLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zX2gpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wd3JpdGV2KGZkLCB2ZWMsIHZsZW4sIHBvc19sLCBwb3NfaCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B3cml0ZXYoKGxvbmcpKGZkKSwgKGxvbmcpKHZlYyksIChsb25nKSh2bGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvc19sKSwgKGxvbmcpKHBvc19oKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3B3cml0ZXYocmVzLCBmZCwgdmVjLCB2bGVuLCBwb3NfbCwgcG9zX2gpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHdyaXRldihyZXMsIChsb25nKShmZCksIChsb25nKSh2ZWMpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmxlbiksIChsb25nKShwb3NfbCksICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zX2gpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRjd2QoYnVmLCBzaXplKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Y3dkKChsb25nKShidWYpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRjd2QocmVzLCBidWYsIHNpemUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Y3dkKHJlcywgKGxvbmcpKGJ1ZiksIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWtkaXIocGF0aG5hbWUsIG1vZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta2RpcigobG9uZykocGF0aG5hbWUpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ta2RpcihyZXMsIHBhdGhuYW1lLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rZGlyKHJlcywgKGxvbmcpKHBhdGhuYW1lKSwgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jaGRpcihmaWxlbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NoZGlyKChsb25nKShmaWxlbmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jaGRpcihyZXMsIGZpbGVuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2NoZGlyKHJlcywgKGxvbmcpKGZpbGVuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNoZGlyKGZkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNoZGlyKChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2hkaXIocmVzLCBmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2hkaXIocmVzLCAobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ybWRpcihwYXRobmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JtZGlyKChsb25nKShwYXRobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ybWRpcihyZXMsIHBhdGhuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JtZGlyKHJlcywgKGxvbmcpKHBhdGhuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbG9va3VwX2Rjb29raWUoY29va2llNjQsIGJ1ZiwgbGVuKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xvb2t1cF9kY29va2llKChsb25nKShjb29raWU2NCksIChsb25nKShidWYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sb29rdXBfZGNvb2tpZShyZXMsIGNvb2tpZTY0LCBidWYsIGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sb29rdXBfZGNvb2tpZShyZXMsIChsb25nKShjb29raWU2NCksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZiksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9xdW90YWN0bChjbWQsIHNwZWNpYWwsIGlkLCBhZGRyKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9xdW90YWN0bCgobG9uZykoY21kKSwgKGxvbmcpKHNwZWNpYWwpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGlkKSwgKGxvbmcpKGFkZHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcXVvdGFjdGwocmVzLCBjbWQsIHNwZWNpYWwsIGlkLCBhZGRyKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcXVvdGFjdGwocmVzLCAobG9uZykoY21kKSwgKGxvbmcpKHNwZWNpYWwpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShpZCksIChsb25nKShhZGRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0ZGVudHMoZmQsIGRpcmVudCwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGRlbnRzKChsb25nKShmZCksIChsb25nKShkaXJlbnQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvdW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGRlbnRzKHJlcywgZmQsIGRpcmVudCwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRkZW50cyhyZXMsIChsb25nKShmZCksIChsb25nKShkaXJlbnQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGRlbnRzNjQoZmQsIGRpcmVudCwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGRlbnRzNjQoKGxvbmcpKGZkKSwgKGxvbmcpKGRpcmVudCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRkZW50czY0KHJlcywgZmQsIGRpcmVudCwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRkZW50czY0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGRpcmVudCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRzb2Nrb3B0KGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRzb2Nrb3B0KChsb25nKShmZCksIChsb25nKShsZXZlbCksICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0bmFtZSksIChsb25nKShvcHR2YWwpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRzb2Nrb3B0KHJlcywgZmQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0bGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRzb2Nrb3B0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGxldmVsKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdG5hbWUpLCAobG9uZykob3B0dmFsKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0bGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0c29ja29wdChmZCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0c29ja29wdCgobG9uZykoZmQpLCAobG9uZykobGV2ZWwpLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdG5hbWUpLCAobG9uZykob3B0dmFsKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0c29ja29wdChyZXMsIGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0c29ja29wdChyZXMsIChsb25nKShmZCksIChsb25nKShsZXZlbCksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRuYW1lKSwgKGxvbmcpKG9wdHZhbCksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2JpbmQoYXJnMCwgYXJnMSwgYXJnMikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2JpbmQoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2JpbmQocmVzLCBhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2JpbmQocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY29ubmVjdChhcmcwLCBhcmcxLCBhcmcyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY29ubmVjdCgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY29ubmVjdChyZXMsIGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY29ubmVjdChyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9hY2NlcHQoYXJnMCwgYXJnMSwgYXJnMikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY2VwdCgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYWNjZXB0KHJlcywgYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hY2NlcHQocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9hY2NlcHQ0KGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hY2NlcHQ0KChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FjY2VwdDQocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FjY2VwdDQocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRzb2NrbmFtZShhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0c29ja25hbWUoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRzb2NrbmFtZShyZXMsIGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0c29ja25hbWUocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHBlZXJuYW1lKGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwZWVybmFtZSgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHBlZXJuYW1lKHJlcywgYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwZWVybmFtZShyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VuZChhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAobG9uZykoYXJnMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmczKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbmQocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmQocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW5kdG8oYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmR0bygobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCksIChsb25nKShhcmc1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbmR0byhyZXMsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmc1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZHRvKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmc0KSwgKGxvbmcpKGFyZzUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW5kbXNnKGZkLCBtc2csIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZG1zZygobG9uZykoZmQpLCAobG9uZykobXNnKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbmRtc2cocmVzLCBmZCwgbXNnLCBmbGFncykgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRtc2cocmVzLCAobG9uZykoZmQpLCAobG9uZykobXNnKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbmRtbXNnKGZkLCBtc2csIHZsZW4sIGZsYWdzKSAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRtbXNnKChsb25nKShmZCksIChsb25nKShtc2cpLCAobG9uZykodmxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VuZG1tc2cocmVzLCBmZCwgbXNnLCB2bGVuLCBmbGFncykgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRtbXNnKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG1zZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZsZW4pLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWN2KGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlY3YoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIChsb25nKShhcmcyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVjdihyZXMsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVjdihyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlY3Zmcm9tKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2ZnJvbSgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzQpLCAobG9uZykoYXJnNSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWN2ZnJvbShyZXMsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2ZnJvbShyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzQpLCAobG9uZykoYXJnNSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlY3Ztc2coZmQsIG1zZywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2bXNnKChsb25nKShmZCksIChsb25nKShtc2cpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVjdm1zZyhyZXMsIGZkLCBtc2csIGZsYWdzKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVjdm1zZyhyZXMsIChsb25nKShmZCksIChsb25nKShtc2cpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVjdm1tc2coZmQsIG1zZywgdmxlbiwgZmxhZ3MsIHRpbWVvdXQpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVjdm1tc2coKGxvbmcpKGZkKSwgKGxvbmcpKG1zZyksIChsb25nKSh2bGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlY3ZtbXNnKHJlcywgZmQsIG1zZywgdmxlbiwgZmxhZ3MsIHRpbWVvdXQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVjdm1tc2cocmVzLCAobG9uZykoZmQpLCAobG9uZykobXNnKSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZsZW4pLCAobG9uZykoZmxhZ3MpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHRpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zb2NrZXQoYXJnMCwgYXJnMSwgYXJnMikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NvY2tldCgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc29ja2V0KHJlcywgYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zb2NrZXQocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zb2NrZXRwYWlyKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zb2NrZXRwYWlyKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NvY2tldHBhaXIocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NvY2tldHBhaXIocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zb2NrZXRjYWxsKGNhbGwsIGFyZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zb2NrZXRjYWxsKChsb25nKShjYWxsKSwgKGxvbmcpKGFyZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc29ja2V0Y2FsbChyZXMsIGNhbGwsIGFyZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc29ja2V0Y2FsbChyZXMsIChsb25nKShjYWxsKSwgKGxvbmcpKGFyZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9saXN0ZW4oYXJnMCwgYXJnMSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xpc3RlbigobG9uZykoYXJnMCksIChsb25nKShhcmcxKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xpc3RlbihyZXMsIGFyZzAsIGFyZzEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGlzdGVuKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BvbGwodWZkcywgbmZkcywgdGltZW91dCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BvbGwoKGxvbmcpKHVmZHMpLCAobG9uZykobmZkcyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BvbGwocmVzLCB1ZmRzLCBuZmRzLCB0aW1lb3V0KSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BvbGwocmVzLCAobG9uZykodWZkcyksIChsb25nKShuZmRzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VsZWN0KG4sIGlucCwgb3V0cCwgZXhwLCB0dnApICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VsZWN0KChsb25nKShuKSwgKGxvbmcpKGlucCksIChsb25nKShvdXRwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZXhwKSwgKGxvbmcpKHR2cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZWxlY3QocmVzLCBuLCBpbnAsIG91dHAsIGV4cCwgdHZwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbGVjdChyZXMsIChsb25nKShuKSwgKGxvbmcpKGlucCksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3V0cCksIChsb25nKShleHApLCAobG9uZykodHZwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkX3NlbGVjdChhcmcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGRfc2VsZWN0KChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkX3NlbGVjdChyZXMsIGFyZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfc2VsZWN0KHJlcywgKGxvbmcpKGFyZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Vwb2xsX2NyZWF0ZShzaXplKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXBvbGxfY3JlYXRlKChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Vwb2xsX2NyZWF0ZShyZXMsIHNpemUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfY3JlYXRlKHJlcywgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9lcG9sbF9jcmVhdGUxKGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXBvbGxfY3JlYXRlMSgobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXBvbGxfY3JlYXRlMShyZXMsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX2NyZWF0ZTEocmVzLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9lcG9sbF9jdGwoZXBmZCwgb3AsIGZkLCBldmVudCkgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9lcG9sbF9jdGwoKGxvbmcpKGVwZmQpLCAobG9uZykob3ApLCAobG9uZykoZmQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShldmVudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9lcG9sbF9jdGwocmVzLCBlcGZkLCBvcCwgZmQsIGV2ZW50KSAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF9jdGwocmVzLCAobG9uZykoZXBmZCksIChsb25nKShvcCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmZCksIChsb25nKShldmVudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Vwb2xsX3dhaXQoZXBmZCwgZXZlbnRzLCBtYXhldmVudHMsIHRpbWVvdXQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9lcG9sbF93YWl0KChsb25nKShlcGZkKSwgKGxvbmcpKGV2ZW50cyksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1heGV2ZW50cyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Vwb2xsX3dhaXQocmVzLCBlcGZkLCBldmVudHMsIG1heGV2ZW50cywgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfd2FpdChyZXMsIChsb25nKShlcGZkKSwgKGxvbmcpKGV2ZW50cyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobWF4ZXZlbnRzKSwgKGxvbmcpKHRpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9lcG9sbF9wd2FpdChlcGZkLCBldmVudHMsIG1heGV2ZW50cywgdGltZW91dCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdtYXNrLCBzaWdzZXRzaXplKSAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX3B3YWl0KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKGVwZmQpLCAobG9uZykoZXZlbnRzKSwgKGxvbmcpKG1heGV2ZW50cyksIChsb25nKSh0aW1lb3V0KSwgICAgICAgXAorICAgICAgKGxvbmcpKHNpZ21hc2spLCAobG9uZykoc2lnc2V0c2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9lcG9sbF9wd2FpdChyZXMsIGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsIHNpZ21hc2ssIHNpZ3NldHNpemUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF9wd2FpdCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShlcGZkKSwgKGxvbmcpKGV2ZW50cyksIChsb25nKShtYXhldmVudHMpLCAobG9uZykodGltZW91dCksIFwKKyAgICAgIChsb25nKShzaWdtYXNrKSwgKGxvbmcpKHNpZ3NldHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRob3N0bmFtZShuYW1lLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRob3N0bmFtZSgobG9uZykobmFtZSksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0aG9zdG5hbWUocmVzLCBuYW1lLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0aG9zdG5hbWUocmVzLCAobG9uZykobmFtZSksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRob3N0bmFtZShuYW1lLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRob3N0bmFtZSgobG9uZykobmFtZSksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0aG9zdG5hbWUocmVzLCBuYW1lLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0aG9zdG5hbWUocmVzLCAobG9uZykobmFtZSksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRkb21haW5uYW1lKG5hbWUsIGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGRvbWFpbm5hbWUoKGxvbmcpKG5hbWUpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGRvbWFpbm5hbWUocmVzLCBuYW1lLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZG9tYWlubmFtZShyZXMsIChsb25nKShuYW1lKSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25ld3VuYW1lKG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXd1bmFtZSgobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uZXd1bmFtZShyZXMsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3dW5hbWUocmVzLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3VuYW1lKGFyZzApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bmFtZSgobG9uZykoYXJnMCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91bmFtZShyZXMsIGFyZzApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5hbWUocmVzLCAobG9uZykoYXJnMCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZHVuYW1lKGFyZzApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGR1bmFtZSgobG9uZykoYXJnMCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGR1bmFtZShyZXMsIGFyZzApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkdW5hbWUocmVzLCAobG9uZykoYXJnMCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHJsaW1pdChyZXNvdXJjZSwgcmxpbSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJsaW1pdCgobG9uZykocmVzb3VyY2UpLCAobG9uZykocmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRybGltaXQocmVzLCByZXNvdXJjZSwgcmxpbSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRybGltaXQocmVzLCAobG9uZykocmVzb3VyY2UpLCAobG9uZykocmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZF9nZXRybGltaXQocmVzb3VyY2UsIHJsaW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGRfZ2V0cmxpbWl0KChsb25nKShyZXNvdXJjZSksIChsb25nKShybGltKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZF9nZXRybGltaXQocmVzLCByZXNvdXJjZSwgcmxpbSkgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkX2dldHJsaW1pdChyZXMsIChsb25nKShyZXNvdXJjZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJsaW1pdChyZXNvdXJjZSwgcmxpbSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJsaW1pdCgobG9uZykocmVzb3VyY2UpLCAobG9uZykocmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRybGltaXQocmVzLCByZXNvdXJjZSwgcmxpbSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRybGltaXQocmVzLCAobG9uZykocmVzb3VyY2UpLCAobG9uZykocmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BybGltaXQ2NChwaWQsIHJlc291cmNlLCBuZXdfcmxpbSwgb2xkX3JsaW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcmxpbWl0NjQoKGxvbmcpKHBpZCksIChsb25nKShyZXNvdXJjZSksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3X3JsaW0pLCAobG9uZykob2xkX3JsaW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJsaW1pdDY0KHJlcywgcGlkLCByZXNvdXJjZSwgbmV3X3JsaW0sICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9ybGltKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcmxpbWl0NjQocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHJlc291cmNlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld19ybGltKSwgKGxvbmcpKG9sZF9ybGltKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cnVzYWdlKHdobywgcnUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRydXNhZ2UoKGxvbmcpKHdobyksIChsb25nKShydSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRydXNhZ2UocmVzLCB3aG8sIHJ1KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJ1c2FnZShyZXMsIChsb25nKSh3aG8pLCAobG9uZykocnUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bWFzayhtYXNrKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW1hc2soKGxvbmcpKG1hc2spKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdW1hc2socmVzLCBtYXNrKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VtYXNrKHJlcywgKGxvbmcpKG1hc2spKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tc2dnZXQoa2V5LCBtc2dmbGcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2dnZXQoKGxvbmcpKGtleSksIChsb25nKShtc2dmbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXNnZ2V0KHJlcywga2V5LCBtc2dmbGcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNnZ2V0KHJlcywgKGxvbmcpKGtleSksIChsb25nKShtc2dmbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tc2dzbmQobXNxaWQsIG1zZ3AsIG1zZ3N6LCBtc2dmbGcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2dzbmQoKGxvbmcpKG1zcWlkKSwgKGxvbmcpKG1zZ3ApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtc2dzeiksIChsb25nKShtc2dmbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXNnc25kKHJlcywgbXNxaWQsIG1zZ3AsIG1zZ3N6LCBtc2dmbGcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNnc25kKHJlcywgKGxvbmcpKG1zcWlkKSwgKGxvbmcpKG1zZ3ApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobXNnc3opLCAobG9uZykobXNnZmxnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXNncmN2KG1zcWlkLCBtc2dwLCBtc2dzeiwgbXNndHlwLCBtc2dmbGcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2dyY3YoKGxvbmcpKG1zcWlkKSwgKGxvbmcpKG1zZ3ApLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1zZ3N6KSwgKGxvbmcpKG1zZ3R5cCksICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1zZ2ZsZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tc2dyY3YocmVzLCBtc3FpZCwgbXNncCwgbXNnc3osIG1zZ3R5cCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2ZsZykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNncmN2KHJlcywgKGxvbmcpKG1zcWlkKSwgKGxvbmcpKG1zZ3ApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobXNnc3opLCAobG9uZykobXNndHlwKSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1zZ2ZsZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21zZ2N0bChtc3FpZCwgY21kLCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2djdGwoKGxvbmcpKG1zcWlkKSwgKGxvbmcpKGNtZCksIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXNnY3RsKHJlcywgbXNxaWQsIGNtZCwgYnVmKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc2djdGwocmVzLCAobG9uZykobXNxaWQpLCAobG9uZykoY21kKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbWdldChrZXksIG5zZW1zLCBzZW1mbGcpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VtZ2V0KChsb25nKShrZXkpLCAobG9uZykobnNlbXMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZW1mbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VtZ2V0KHJlcywga2V5LCBuc2Vtcywgc2VtZmxnKSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW1nZXQocmVzLCAobG9uZykoa2V5KSwgKGxvbmcpKG5zZW1zKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNlbWZsZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbW9wKHNlbWlkLCBzb3BzLCBuc29wcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbW9wKChsb25nKShzZW1pZCksIChsb25nKShzb3BzKSwgKGxvbmcpKG5zb3BzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbW9wKHJlcywgc2VtaWQsIHNvcHMsIG5zb3BzKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2Vtb3AocmVzLCAobG9uZykoc2VtaWQpLCAobG9uZykoc29wcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5zb3BzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VtY3RsKHNlbWlkLCBzZW1udW0sIGNtZCwgYXJnKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW1jdGwoKGxvbmcpKHNlbWlkKSwgKGxvbmcpKHNlbW51bSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VtY3RsKHJlcywgc2VtaWQsIHNlbW51bSwgY21kLCBhcmcpICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW1jdGwocmVzLCAobG9uZykoc2VtaWQpLCAobG9uZykoc2VtbnVtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW10aW1lZG9wKHNlbWlkLCBzb3BzLCBuc29wcywgdGltZW91dCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbXRpbWVkb3AoKGxvbmcpKHNlbWlkKSwgKGxvbmcpKHNvcHMpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5zb3BzKSwgKGxvbmcpKHRpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VtdGltZWRvcChyZXMsIHNlbWlkLCBzb3BzLCBuc29wcywgdGltZW91dCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW10aW1lZG9wKHJlcywgKGxvbmcpKHNlbWlkKSwgKGxvbmcpKHNvcHMpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuc29wcyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2htYXQoc2htaWQsIHNobWFkZHIsIHNobWZsZykgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaG1hdCgobG9uZykoc2htaWQpLCAobG9uZykoc2htYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2htZmxnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NobWF0KHJlcywgc2htaWQsIHNobWFkZHIsIHNobWZsZykgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2htYXQocmVzLCAobG9uZykoc2htaWQpLCAobG9uZykoc2htYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNobWZsZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NobWdldChrZXksIHNpemUsIGZsYWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaG1nZXQoKGxvbmcpKGtleSksIChsb25nKShzaXplKSwgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2htZ2V0KHJlcywga2V5LCBzaXplLCBmbGFnKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NobWdldChyZXMsIChsb25nKShrZXkpLCAobG9uZykoc2l6ZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2htZHQoc2htYWRkcikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWR0KChsb25nKShzaG1hZGRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NobWR0KHJlcywgc2htYWRkcikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1kdChyZXMsIChsb25nKShzaG1hZGRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2htY3RsKHNobWlkLCBjbWQsIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWN0bCgobG9uZykoc2htaWQpLCAobG9uZykoY21kKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaG1jdGwocmVzLCBzaG1pZCwgY21kLCBidWYpICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NobWN0bChyZXMsIChsb25nKShzaG1pZCksIChsb25nKShjbWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaXBjKGNhbGwsIGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBwdHIsIGZpZnRoKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaXBjKChsb25nKShjYWxsKSwgKGxvbmcpKGZpcnN0KSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2Vjb25kKSwgKGxvbmcpKHRoaXJkKSwgKGxvbmcpKHB0ciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZpZnRoKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lwYyhyZXMsIGNhbGwsIGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBwdHIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWZ0aCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaXBjKHJlcywgKGxvbmcpKGNhbGwpLCAobG9uZykoZmlyc3QpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZWNvbmQpLCAobG9uZykodGhpcmQpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwdHIpLCAobG9uZykoZmlmdGgpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcV9vcGVuKG5hbWUsIG9mbGFnLCBtb2RlLCBhdHRyKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfb3BlbigobG9uZykobmFtZSksIChsb25nKShvZmxhZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSwgKGxvbmcpKGF0dHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXFfb3BlbihyZXMsIG5hbWUsIG9mbGFnLCBtb2RlLCBhdHRyKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX29wZW4ocmVzLCAobG9uZykobmFtZSksIChsb25nKShvZmxhZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSksIChsb25nKShhdHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXFfdW5saW5rKG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV91bmxpbmsoKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXFfdW5saW5rKHJlcywgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV91bmxpbmsocmVzLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21xX3RpbWVkc2VuZChtcWRlcywgbXNnX3B0ciwgbXNnX2xlbiwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX3ByaW8sIGFic190aW1lb3V0KSAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV90aW1lZHNlbmQoKGxvbmcpKG1xZGVzKSwgKGxvbmcpKG1zZ19wdHIpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtc2dfbGVuKSwgKGxvbmcpKG1zZ19wcmlvKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYWJzX3RpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXFfdGltZWRzZW5kKHJlcywgbXFkZXMsIG1zZ19wdHIsIG1zZ19sZW4sICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19wcmlvLCBhYnNfdGltZW91dCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV90aW1lZHNlbmQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykobXFkZXMpLCAobG9uZykobXNnX3B0ciksIChsb25nKShtc2dfbGVuKSwgKGxvbmcpKG1zZ19wcmlvKSwgXAorICAgICAgKGxvbmcpKGFic190aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXFfdGltZWRyZWNlaXZlKG1xZGVzLCBtc2dfcHRyLCBtc2dfbGVuLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfcHJpbywgYWJzX3RpbWVvdXQpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21xX3RpbWVkcmVjZWl2ZSggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShtcWRlcyksIChsb25nKShtc2dfcHRyKSwgKGxvbmcpKG1zZ19sZW4pLCAobG9uZykobXNnX3ByaW8pLCBcCisgICAgICAobG9uZykoYWJzX3RpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXFfdGltZWRyZWNlaXZlKHJlcywgbXFkZXMsIG1zZ19wdHIsIG1zZ19sZW4sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfcHJpbywgYWJzX3RpbWVvdXQpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX3RpbWVkcmVjZWl2ZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykobXFkZXMpLCAobG9uZykobXNnX3B0ciksIChsb25nKShtc2dfbGVuKSwgKGxvbmcpKG1zZ19wcmlvKSwgIFwKKyAgICAgIChsb25nKShhYnNfdGltZW91dCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21xX25vdGlmeShtcWRlcywgbm90aWZpY2F0aW9uKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfbm90aWZ5KChsb25nKShtcWRlcyksIChsb25nKShub3RpZmljYXRpb24pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXFfbm90aWZ5KHJlcywgbXFkZXMsIG5vdGlmaWNhdGlvbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV9ub3RpZnkocmVzLCAobG9uZykobXFkZXMpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5vdGlmaWNhdGlvbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21xX2dldHNldGF0dHIobXFkZXMsIG1xc3RhdCwgb21xc3RhdCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21xX2dldHNldGF0dHIoKGxvbmcpKG1xZGVzKSwgKGxvbmcpKG1xc3RhdCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvbXFzdGF0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21xX2dldHNldGF0dHIocmVzLCBtcWRlcywgbXFzdGF0LCBvbXFzdGF0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX2dldHNldGF0dHIocmVzLCAobG9uZykobXFkZXMpLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtcXN0YXQpLCAobG9uZykob21xc3RhdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BjaWNvbmZpZ19pb2Jhc2Uod2hpY2gsIGJ1cywgZGV2Zm4pICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BjaWNvbmZpZ19pb2Jhc2UoKGxvbmcpKHdoaWNoKSwgKGxvbmcpKGJ1cyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShkZXZmbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wY2ljb25maWdfaW9iYXNlKHJlcywgd2hpY2gsIGJ1cywgZGV2Zm4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGNpY29uZmlnX2lvYmFzZShyZXMsIChsb25nKSh3aGljaCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidXMpLCAobG9uZykoZGV2Zm4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wY2ljb25maWdfcmVhZChidXMsIGRmbiwgb2ZmLCBsZW4sIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BjaWNvbmZpZ19yZWFkKCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKGJ1cyksIChsb25nKShkZm4pLCAobG9uZykob2ZmKSwgKGxvbmcpKGxlbiksIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGNpY29uZmlnX3JlYWQocmVzLCBidXMsIGRmbiwgb2ZmLCBsZW4sIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wY2ljb25maWdfcmVhZCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykoYnVzKSwgKGxvbmcpKGRmbiksIChsb25nKShvZmYpLCAobG9uZykobGVuKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BjaWNvbmZpZ193cml0ZShidXMsIGRmbiwgb2ZmLCBsZW4sIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BjaWNvbmZpZ193cml0ZSggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShidXMpLCAobG9uZykoZGZuKSwgKGxvbmcpKG9mZiksIChsb25nKShsZW4pLCAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BjaWNvbmZpZ193cml0ZShyZXMsIGJ1cywgZGZuLCBvZmYsIGxlbiwgYnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BjaWNvbmZpZ193cml0ZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykoYnVzKSwgKGxvbmcpKGRmbiksIChsb25nKShvZmYpLCAobG9uZykobGVuKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N3YXBvbihzcGVjaWFsZmlsZSwgc3dhcF9mbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N3YXBvbigobG9uZykoc3BlY2lhbGZpbGUpLCAobG9uZykoc3dhcF9mbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zd2Fwb24ocmVzLCBzcGVjaWFsZmlsZSwgc3dhcF9mbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zd2Fwb24ocmVzLCAobG9uZykoc3BlY2lhbGZpbGUpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzd2FwX2ZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3dhcG9mZihzcGVjaWFsZmlsZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N3YXBvZmYoKGxvbmcpKHNwZWNpYWxmaWxlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N3YXBvZmYocmVzLCBzcGVjaWFsZmlsZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zd2Fwb2ZmKHJlcywgKGxvbmcpKHNwZWNpYWxmaWxlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3lzY3RsKGFyZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNjdGwoKGxvbmcpKGFyZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3lzY3RsKHJlcywgYXJncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNjdGwocmVzLCAobG9uZykoYXJncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5c2luZm8oaW5mbykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5c2luZm8oKGxvbmcpKGluZm8pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3lzaW5mbyhyZXMsIGluZm8pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzaW5mbyhyZXMsIChsb25nKShpbmZvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3lzZnMob3B0aW9uLCBhcmcxLCBhcmcyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3lzZnMoKGxvbmcpKG9wdGlvbiksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3lzZnMocmVzLCBvcHRpb24sIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzZnMocmVzLCAobG9uZykob3B0aW9uKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3lzbG9nKHR5cGUsIGJ1ZiwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3lzbG9nKChsb25nKSh0eXBlKSwgKGxvbmcpKGJ1ZiksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3lzbG9nKHJlcywgdHlwZSwgYnVmLCBsZW4pICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5c2xvZyhyZXMsIChsb25nKSh0eXBlKSwgKGxvbmcpKGJ1ZiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91c2VsaWIobGlicmFyeSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VzZWxpYigobG9uZykobGlicmFyeSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91c2VsaWIocmVzLCBsaWJyYXJ5KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VzZWxpYihyZXMsIChsb25nKShsaWJyYXJ5KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmlfc3lzY2FsbCgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uaV9zeXNjYWxsKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25pX3N5c2NhbGwocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25pX3N5c2NhbGwocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wdHJhY2UocmVxdWVzdCwgcGlkLCBhZGRyLCBkYXRhKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHRyYWNlKChsb25nKShyZXF1ZXN0KSwgKGxvbmcpKHBpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFkZHIpLCAobG9uZykoZGF0YSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wdHJhY2UocmVzLCByZXF1ZXN0LCBwaWQsIGFkZHIsIGRhdGEpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHRyYWNlKHJlcywgKGxvbmcpKHJlcXVlc3QpLCAobG9uZykocGlkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFkZHIpLCAobG9uZykoZGF0YSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2FkZF9rZXkoX3R5cGUsIF9kZXNjcmlwdGlvbiwgX3BheWxvYWQsIHBsZW4sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cmluZ2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FkZF9rZXkoKGxvbmcpKF90eXBlKSwgKGxvbmcpKF9kZXNjcmlwdGlvbiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoX3BheWxvYWQpLCAobG9uZykocGxlbiksICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShkZXN0cmluZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FkZF9rZXkocmVzLCBfdHlwZSwgX2Rlc2NyaXB0aW9uLCBfcGF5bG9hZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGVuLCBkZXN0cmluZ2lkKSAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FkZF9rZXkoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKF90eXBlKSwgKGxvbmcpKF9kZXNjcmlwdGlvbiksIChsb25nKShfcGF5bG9hZCksICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHBsZW4pLCAobG9uZykoZGVzdHJpbmdpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlcXVlc3Rfa2V5KF90eXBlLCBfZGVzY3JpcHRpb24sICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhbGxvdXRfaW5mbywgZGVzdHJpbmdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlcXVlc3Rfa2V5KCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykoX3R5cGUpLCAobG9uZykoX2Rlc2NyaXB0aW9uKSwgKGxvbmcpKF9jYWxsb3V0X2luZm8pLCAgICAgIFwKKyAgICAgIChsb25nKShkZXN0cmluZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlcXVlc3Rfa2V5KHJlcywgX3R5cGUsIF9kZXNjcmlwdGlvbiwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWxsb3V0X2luZm8sIGRlc3RyaW5naWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVxdWVzdF9rZXkoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKF90eXBlKSwgKGxvbmcpKF9kZXNjcmlwdGlvbiksIChsb25nKShfY2FsbG91dF9pbmZvKSwgIFwKKyAgICAgIChsb25nKShkZXN0cmluZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfa2V5Y3RsKGNtZCwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfa2V5Y3RsKChsb25nKShjbWQpLCAobG9uZykoYXJnMiksIChsb25nKShhcmczKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCksIChsb25nKShhcmc1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2tleWN0bChyZXMsIGNtZCwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9rZXljdGwocmVzLCAobG9uZykoY21kKSwgKGxvbmcpKGFyZzIpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMyksIChsb25nKShhcmc0KSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmc1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9wcmlvX3NldCh3aGljaCwgd2hvLCBpb3ByaW8pICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wcmlvX3NldCgobG9uZykod2hpY2gpLCAobG9uZykod2hvKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGlvcHJpbykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb3ByaW9fc2V0KHJlcywgd2hpY2gsIHdobywgaW9wcmlvKSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb3ByaW9fc2V0KHJlcywgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHdobyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoaW9wcmlvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9wcmlvX2dldCh3aGljaCwgd2hvKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wcmlvX2dldCgobG9uZykod2hpY2gpLCAobG9uZykod2hvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvcHJpb19nZXQocmVzLCB3aGljaCwgd2hvKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvcHJpb19nZXQocmVzLCAobG9uZykod2hpY2gpLCAobG9uZykod2hvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0X21lbXBvbGljeShtb2RlLCBubWFzaywgbWF4bm9kZSkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldF9tZW1wb2xpY3koKGxvbmcpKG1vZGUpLCAobG9uZykobm1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobWF4bm9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRfbWVtcG9saWN5KHJlcywgbW9kZSwgbm1hc2ssIG1heG5vZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0X21lbXBvbGljeShyZXMsIChsb25nKShtb2RlKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShubWFzayksIChsb25nKShtYXhub2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWlncmF0ZV9wYWdlcyhwaWQsIG1heG5vZGUsIGZyb20sIHRvKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9taWdyYXRlX3BhZ2VzKChsb25nKShwaWQpLCAobG9uZykobWF4bm9kZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmcm9tKSwgKGxvbmcpKHRvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21pZ3JhdGVfcGFnZXMocmVzLCBwaWQsIG1heG5vZGUsIGZyb20sIHRvKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21pZ3JhdGVfcGFnZXMoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykocGlkKSwgKGxvbmcpKG1heG5vZGUpLCAobG9uZykoZnJvbSksIChsb25nKSh0bykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21vdmVfcGFnZXMocGlkLCBucl9wYWdlcywgcGFnZXMsIG5vZGVzLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgZmxhZ3MpICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tb3ZlX3BhZ2VzKChsb25nKShwaWQpLCAobG9uZykobnJfcGFnZXMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocGFnZXMpLCAobG9uZykobm9kZXMpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN0YXR1cyksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tb3ZlX3BhZ2VzKHJlcywgcGlkLCBucl9wYWdlcywgcGFnZXMsIG5vZGVzLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbW92ZV9wYWdlcyhyZXMsIChsb25nKShwaWQpLCAobG9uZykobnJfcGFnZXMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBhZ2VzKSwgKGxvbmcpKG5vZGVzKSwgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdGF0dXMpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tYmluZChzdGFydCwgbGVuLCBtb2RlLCBubWFzaywgbWF4bm9kZSwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tYmluZCgobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgKGxvbmcpKG1vZGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5tYXNrKSwgKGxvbmcpKG1heG5vZGUpLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tYmluZChyZXMsIHN0YXJ0LCBsZW4sIG1vZGUsIG5tYXNrLCBtYXhub2RlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21iaW5kKHJlcywgKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSwgKGxvbmcpKG5tYXNrKSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtYXhub2RlKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0X21lbXBvbGljeShwb2xpY3ksIG5tYXNrLCBtYXhub2RlLCBhZGRyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldF9tZW1wb2xpY3koKGxvbmcpKHBvbGljeSksIChsb25nKShubWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtYXhub2RlKSwgKGxvbmcpKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0X21lbXBvbGljeShyZXMsIHBvbGljeSwgbm1hc2ssIG1heG5vZGUsICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyLCBmbGFncykgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRfbWVtcG9saWN5KHJlcywgKGxvbmcpKHBvbGljeSksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShubWFzayksIChsb25nKShtYXhub2RlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhZGRyKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW5vdGlmeV9pbml0KCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lub3RpZnlfaW5pdCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbm90aWZ5X2luaXQocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lub3RpZnlfaW5pdChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lub3RpZnlfaW5pdDEoZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2luaXQxKChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbm90aWZ5X2luaXQxKHJlcywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5vdGlmeV9pbml0MShyZXMsIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lub3RpZnlfYWRkX3dhdGNoKGZkLCBwYXRoLCBtYXNrKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW5vdGlmeV9hZGRfd2F0Y2goKGxvbmcpKGZkKSwgKGxvbmcpKHBhdGgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1hc2spKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW5vdGlmeV9hZGRfd2F0Y2gocmVzLCBmZCwgcGF0aCwgbWFzaykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X2FkZF93YXRjaChyZXMsIChsb25nKShmZCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocGF0aCksIChsb25nKShtYXNrKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW5vdGlmeV9ybV93YXRjaChmZCwgd2QpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X3JtX3dhdGNoKChsb25nKShmZCksIChsb25nKSh3ZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbm90aWZ5X3JtX3dhdGNoKHJlcywgZmQsIHdkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lub3RpZnlfcm1fd2F0Y2gocmVzLCAobG9uZykoZmQpLCAobG9uZykod2QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zcHVfcnVuKGZkLCB1bnBjLCB1c3RhdHVzKSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3B1X3J1bigobG9uZykoZmQpLCAobG9uZykodW5wYyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1c3RhdHVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NwdV9ydW4ocmVzLCBmZCwgdW5wYywgdXN0YXR1cykgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zcHVfcnVuKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHVucGMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVzdGF0dXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zcHVfY3JlYXRlKG5hbWUsIGZsYWdzLCBtb2RlLCBmZCkgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3B1X2NyZWF0ZSgobG9uZykobmFtZSksIChsb25nKShmbGFncyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSwgKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NwdV9jcmVhdGUocmVzLCBuYW1lLCBmbGFncywgbW9kZSwgZmQpICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zcHVfY3JlYXRlKHJlcywgKGxvbmcpKG5hbWUpLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpLCAobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ta25vZGF0KGRmZCwgZmlsZW5hbWUsIG1vZGUsIGRldikgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta25vZGF0KChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSksIChsb25nKShkZXYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWtub2RhdChyZXMsIGRmZCwgZmlsZW5hbWUsIG1vZGUsIGRldikgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWtub2RhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpLCAobG9uZykoZGV2KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWtkaXJhdChkZmQsIHBhdGhuYW1lLCBtb2RlKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWtkaXJhdCgobG9uZykoZGZkKSwgKGxvbmcpKHBhdGhuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWtkaXJhdChyZXMsIGRmZCwgcGF0aG5hbWUsIG1vZGUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWtkaXJhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykocGF0aG5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bmxpbmthdChkZmQsIHBhdGhuYW1lLCBmbGFnKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW5saW5rYXQoKGxvbmcpKGRmZCksIChsb25nKShwYXRobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91bmxpbmthdChyZXMsIGRmZCwgcGF0aG5hbWUsIGZsYWcpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5saW5rYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKHBhdGhuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5bWxpbmthdChvbGRuYW1lLCBuZXdkZmQsIG5ld25hbWUpICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW1saW5rYXQoKGxvbmcpKG9sZG5hbWUpLCAobG9uZykobmV3ZGZkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3bmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zeW1saW5rYXQocmVzLCBvbGRuYW1lLCBuZXdkZmQsIG5ld25hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3ltbGlua2F0KHJlcywgKGxvbmcpKG9sZG5hbWUpLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld2RmZCksIChsb25nKShuZXduYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGlua2F0KG9sZGRmZCwgb2xkbmFtZSwgbmV3ZGZkLCBuZXduYW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xpbmthdCgobG9uZykob2xkZGZkKSwgKGxvbmcpKG9sZG5hbWUpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld2RmZCksIChsb25nKShuZXduYW1lKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9saW5rYXQocmVzLCBvbGRkZmQsIG9sZG5hbWUsIG5ld2RmZCwgbmV3bmFtZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGlua2F0KHJlcywgKGxvbmcpKG9sZGRmZCksIChsb25nKShvbGRuYW1lKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3ZGZkKSwgKGxvbmcpKG5ld25hbWUpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVuYW1lYXQob2xkZGZkLCBvbGRuYW1lLCBuZXdkZmQsIG5ld25hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW5hbWVhdCgobG9uZykob2xkZGZkKSwgKGxvbmcpKG9sZG5hbWUpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3ZGZkKSwgKGxvbmcpKG5ld25hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVuYW1lYXQocmVzLCBvbGRkZmQsIG9sZG5hbWUsIG5ld2RmZCwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld25hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlbmFtZWF0KHJlcywgKGxvbmcpKG9sZGRmZCksIChsb25nKShvbGRuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3ZGZkKSwgKGxvbmcpKG5ld25hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mdXRpbWVzYXQoZGZkLCBmaWxlbmFtZSwgdXRpbWVzKSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Z1dGltZXNhdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXRpbWVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Z1dGltZXNhdChyZXMsIGRmZCwgZmlsZW5hbWUsIHV0aW1lcykgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnV0aW1lc2F0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1dGltZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mYWNjZXNzYXQoZGZkLCBmaWxlbmFtZSwgbW9kZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZhY2Nlc3NhdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mYWNjZXNzYXQocmVzLCBkZmQsIGZpbGVuYW1lLCBtb2RlKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZhY2Nlc3NhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZjaG1vZGF0KGRmZCwgZmlsZW5hbWUsIG1vZGUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2htb2RhdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZjaG1vZGF0KHJlcywgZGZkLCBmaWxlbmFtZSwgbW9kZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2htb2RhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNob3duYXQoZGZkLCBmaWxlbmFtZSwgdXNlciwgZ3JvdXAsIGZsYWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2hvd25hdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXNlciksIChsb25nKShncm91cCksICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2hvd25hdChyZXMsIGRmZCwgZmlsZW5hbWUsIHVzZXIsIGdyb3VwLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2hvd25hdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1c2VyKSwgKGxvbmcpKGdyb3VwKSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vcGVuYXQoZGZkLCBmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29wZW5hdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vcGVuYXQocmVzLCBkZmQsIGZpbGVuYW1lLCBmbGFncywgbW9kZSkgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29wZW5hdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25ld2ZzdGF0YXQoZGZkLCBmaWxlbmFtZSwgc3RhdGJ1ZiwgZmxhZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25ld2ZzdGF0YXQoKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdGF0YnVmKSwgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmV3ZnN0YXRhdChyZXMsIGRmZCwgZmlsZW5hbWUsIHN0YXRidWYsIGZsYWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3ZnN0YXRhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN0YXRidWYpLCAobG9uZykoZmxhZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZzdGF0YXQ2NChkZmQsIGZpbGVuYW1lLCBzdGF0YnVmLCBmbGFnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXRhdDY0KChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdGF0YnVmKSwgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnN0YXRhdDY0KHJlcywgZGZkLCBmaWxlbmFtZSwgc3RhdGJ1ZiwgZmxhZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdGF0NjQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN0YXRidWYpLCAobG9uZykoZmxhZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlYWRsaW5rYXQoZGZkLCBwYXRoLCBidWYsIGJ1ZnNpeikgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZGxpbmthdCgobG9uZykoZGZkKSwgKGxvbmcpKHBhdGgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmKSwgKGxvbmcpKGJ1ZnNpeikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkbGlua2F0KHJlcywgZGZkLCBwYXRoLCBidWYsIGJ1ZnNpeikgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlYWRsaW5rYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKHBhdGgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZiksIChsb25nKShidWZzaXopKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91dGltZW5zYXQoZGZkLCBmaWxlbmFtZSwgdXRpbWVzLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3V0aW1lbnNhdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXRpbWVzKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3V0aW1lbnNhdChyZXMsIGRmZCwgZmlsZW5hbWUsIHV0aW1lcywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdXRpbWVuc2F0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1dGltZXMpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bnNoYXJlKHVuc2hhcmVfZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bnNoYXJlKChsb25nKSh1bnNoYXJlX2ZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Vuc2hhcmUocmVzLCB1bnNoYXJlX2ZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Vuc2hhcmUocmVzLCAobG9uZykodW5zaGFyZV9mbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NwbGljZShmZF9pbiwgb2ZmX2luLCBmZF9vdXQsIG9mZl9vdXQsIGxlbiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zcGxpY2UoKGxvbmcpKGZkX2luKSwgKGxvbmcpKG9mZl9pbiksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmZF9vdXQpLCAobG9uZykob2ZmX291dCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobGVuKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NwbGljZShyZXMsIGZkX2luLCBvZmZfaW4sIGZkX291dCwgb2ZmX291dCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NwbGljZShyZXMsIChsb25nKShmZF9pbiksIChsb25nKShvZmZfaW4pLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmZF9vdXQpLCAobG9uZykob2ZmX291dCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGxlbiksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Ztc3BsaWNlKGZkLCBpb3YsIG5yX3NlZ3MsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdm1zcGxpY2UoKGxvbmcpKGZkKSwgKGxvbmcpKGlvdiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5yX3NlZ3MpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfdm1zcGxpY2UocmVzLCBmZCwgaW92LCBucl9zZWdzLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF92bXNwbGljZShyZXMsIChsb25nKShmZCksIChsb25nKShpb3YpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobnJfc2VncyksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RlZShmZGluLCBmZG91dCwgbGVuLCBmbGFncykgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90ZWUoKGxvbmcpKGZkaW4pLCAobG9uZykoZmRvdXQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGVlKHJlcywgZmRpbiwgZmRvdXQsIGxlbiwgZmxhZ3MpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGVlKHJlcywgKGxvbmcpKGZkaW4pLCAobG9uZykoZmRvdXQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobGVuKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0X3JvYnVzdF9saXN0KHBpZCwgaGVhZF9wdHIsIGxlbl9wdHIpICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRfcm9idXN0X2xpc3QoKGxvbmcpKHBpZCksIChsb25nKShoZWFkX3B0ciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGxlbl9wdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0X3JvYnVzdF9saXN0KHJlcywgcGlkLCBoZWFkX3B0ciwgbGVuX3B0cikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRfcm9idXN0X2xpc3QoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykocGlkKSwgKGxvbmcpKGhlYWRfcHRyKSwgKGxvbmcpKGxlbl9wdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRfcm9idXN0X2xpc3QoaGVhZCwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0X3JvYnVzdF9saXN0KChsb25nKShoZWFkKSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRfcm9idXN0X2xpc3QocmVzLCBoZWFkLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0X3JvYnVzdF9saXN0KHJlcywgKGxvbmcpKGhlYWQpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0Y3B1KGNwdSwgbm9kZSwgY2FjaGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRjcHUoKGxvbmcpKGNwdSksIChsb25nKShub2RlKSwgKGxvbmcpKGNhY2hlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGNwdShyZXMsIGNwdSwgbm9kZSwgY2FjaGUpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRjcHUocmVzLCAobG9uZykoY3B1KSwgKGxvbmcpKG5vZGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY2FjaGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWduYWxmZCh1ZmQsIHVzZXJfbWFzaywgc2l6ZW1hc2spICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ25hbGZkKChsb25nKSh1ZmQpLCAobG9uZykodXNlcl9tYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplbWFzaykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWduYWxmZChyZXMsIHVmZCwgdXNlcl9tYXNrLCBzaXplbWFzaykgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ25hbGZkKHJlcywgKGxvbmcpKHVmZCksIChsb25nKSh1c2VyX21hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplbWFzaykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NpZ25hbGZkNCh1ZmQsIHVzZXJfbWFzaywgc2l6ZW1hc2ssIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lnbmFsZmQ0KChsb25nKSh1ZmQpLCAobG9uZykodXNlcl9tYXNrKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplbWFzayksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWduYWxmZDQocmVzLCB1ZmQsIHVzZXJfbWFzaywgc2l6ZW1hc2ssICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lnbmFsZmQ0KHJlcywgKGxvbmcpKHVmZCksIChsb25nKSh1c2VyX21hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZW1hc2spLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcmZkX2NyZWF0ZShjbG9ja2lkLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyZmRfY3JlYXRlKChsb25nKShjbG9ja2lkKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RpbWVyZmRfY3JlYXRlKHJlcywgY2xvY2tpZCwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJmZF9jcmVhdGUocmVzLCAobG9uZykoY2xvY2tpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXJmZF9zZXR0aW1lKHVmZCwgZmxhZ3MsIHV0bXIsIG90bXIpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcmZkX3NldHRpbWUoKGxvbmcpKHVmZCksIChsb25nKShmbGFncyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHV0bXIpLCAobG9uZykob3RtcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcmZkX3NldHRpbWUocmVzLCB1ZmQsIGZsYWdzLCB1dG1yLCBvdG1yKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyZmRfc2V0dGltZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKSh1ZmQpLCAobG9uZykoZmxhZ3MpLCAobG9uZykodXRtciksIChsb25nKShvdG1yKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXJmZF9nZXR0aW1lKHVmZCwgb3RtcikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyZmRfZ2V0dGltZSgobG9uZykodWZkKSwgKGxvbmcpKG90bXIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJmZF9nZXR0aW1lKHJlcywgdWZkLCBvdG1yKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyZmRfZ2V0dGltZShyZXMsIChsb25nKSh1ZmQpLCAobG9uZykob3RtcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2V2ZW50ZmQoY291bnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ldmVudGZkKChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ldmVudGZkKHJlcywgY291bnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXZlbnRmZChyZXMsIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2V2ZW50ZmQyKGNvdW50LCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2V2ZW50ZmQyKChsb25nKShjb3VudCksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ldmVudGZkMihyZXMsIGNvdW50LCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ldmVudGZkMihyZXMsIChsb25nKShjb3VudCksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZF9yZWFkZGlyKGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGRfcmVhZGRpcigobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZF9yZWFkZGlyKHJlcywgYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfcmVhZGRpcihyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHNlbGVjdDYoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BzZWxlY3Q2KChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMyksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCksIChsb25nKShhcmc1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BzZWxlY3Q2KHJlcywgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BzZWxlY3Q2KHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMyksICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCksIChsb25nKShhcmc1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHBvbGwoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHBvbGwoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIChsb25nKShhcmcyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmczKSwgKGxvbmcpKGFyZzQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHBvbGwocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Bwb2xsKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMyksICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5bmNmcyhmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5bmNmcygobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3luY2ZzKHJlcywgZmQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3luY2ZzKHJlcywgKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGVyZl9ldmVudF9vcGVuKGF0dHJfdXB0ciwgcGlkLCBjcHUsIGdyb3VwX2ZkLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BlcmZfZXZlbnRfb3BlbigobG9uZykoYXR0cl91cHRyKSwgKGxvbmcpKHBpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNwdSksIChsb25nKShncm91cF9mZCksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wZXJmX2V2ZW50X29wZW4ocmVzLCBhdHRyX3VwdHIsIHBpZCwgY3B1LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfZmQsIGZsYWdzKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BlcmZfZXZlbnRfb3BlbiggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShhdHRyX3VwdHIpLCAobG9uZykocGlkKSwgKGxvbmcpKGNwdSksIChsb25nKShncm91cF9mZCksICBcCisgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tbWFwX3Bnb2ZmKGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIGZkLCBwZ29mZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21tYXBfcGdvZmYoKGxvbmcpKGFkZHIpLCAobG9uZykobGVuKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHByb3QpLCAobG9uZykoZmxhZ3MpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZkKSwgKGxvbmcpKHBnb2ZmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21tYXBfcGdvZmYocmVzLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ29mZikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21tYXBfcGdvZmYocmVzLCAobG9uZykoYWRkciksIChsb25nKShsZW4pLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocHJvdCksIChsb25nKShmbGFncyksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmZCksIChsb25nKShwZ29mZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZF9tbWFwKGFyZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZF9tbWFwKChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkX21tYXAocmVzLCBhcmcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkX21tYXAocmVzLCAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmFtZV90b19oYW5kbGVfYXQoZGZkLCBuYW1lLCBoYW5kbGUsIG1udF9pZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnKSAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmFtZV90b19oYW5kbGVfYXQoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShkZmQpLCAobG9uZykobmFtZSksIChsb25nKShoYW5kbGUpLCAobG9uZykobW50X2lkKSwgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmFtZV90b19oYW5kbGVfYXQocmVzLCBkZmQsIG5hbWUsIGhhbmRsZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW50X2lkLCBmbGFnKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uYW1lX3RvX2hhbmRsZV9hdCggICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKG5hbWUpLCAobG9uZykoaGFuZGxlKSwgKGxvbmcpKG1udF9pZCksICAgICAgXAorICAgICAgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vcGVuX2J5X2hhbmRsZV9hdChtb3VudGRpcmZkLCBoYW5kbGUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb3Blbl9ieV9oYW5kbGVfYXQoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShtb3VudGRpcmZkKSwgKGxvbmcpKGhhbmRsZSksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vcGVuX2J5X2hhbmRsZV9hdChyZXMsIG1vdW50ZGlyZmQsIGhhbmRsZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb3Blbl9ieV9oYW5kbGVfYXQoICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShtb3VudGRpcmZkKSwgKGxvbmcpKGhhbmRsZSksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldG5zKGZkLCBuc3R5cGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRucygobG9uZykoZmQpLCAobG9uZykobnN0eXBlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldG5zKHJlcywgZmQsIG5zdHlwZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRucyhyZXMsIChsb25nKShmZCksIChsb25nKShuc3R5cGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcm9jZXNzX3ZtX3JlYWR2KHBpZCwgbHZlYywgbGlvdmNudCwgcnZlYywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpb3ZjbnQsIGZsYWdzKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Byb2Nlc3Nfdm1fcmVhZHYoICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHBpZCksIChsb25nKShsdmVjKSwgKGxvbmcpKGxpb3ZjbnQpLCAobG9uZykocnZlYyksICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHJpb3ZjbnQpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJvY2Vzc192bV9yZWFkdihyZXMsIHBpZCwgbHZlYywgbGlvdmNudCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmVjLCByaW92Y250LCBmbGFncykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcm9jZXNzX3ZtX3JlYWR2KCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykocGlkKSwgKGxvbmcpKGx2ZWMpLCAobG9uZykobGlvdmNudCksIChsb25nKShydmVjKSwgICAgICAgXAorICAgICAgKGxvbmcpKHJpb3ZjbnQpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcm9jZXNzX3ZtX3dyaXRldihwaWQsIGx2ZWMsIGxpb3ZjbnQsIHJ2ZWMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvdmNudCwgZmxhZ3MpICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJvY2Vzc192bV93cml0ZXYoICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHBpZCksIChsb25nKShsdmVjKSwgKGxvbmcpKGxpb3ZjbnQpLCAobG9uZykocnZlYyksICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShyaW92Y250KSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Byb2Nlc3Nfdm1fd3JpdGV2KHJlcywgcGlkLCBsdmVjLCBsaW92Y250LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmVjLCByaW92Y250LCBmbGFncykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcm9jZXNzX3ZtX3dyaXRldiggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHBpZCksIChsb25nKShsdmVjKSwgKGxvbmcpKGxpb3ZjbnQpLCAobG9uZykocnZlYyksICAgICAgICBcCisgICAgICAobG9uZykocmlvdmNudCksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZvcmsoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZm9yaygpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mb3JrKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mb3JrKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdmZvcmsoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdmZvcmsoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdmZvcmsocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Zmb3JrKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lnYWN0aW9uKHNpZ251bSwgYWN0LCBvbGRhY3QpICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lnYWN0aW9uKChsb25nKXNpZ251bSwgKGxvbmcpYWN0LCAobG9uZylvbGRhY3QpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWdhY3Rpb24ocmVzLCBzaWdudW0sIGFjdCwgb2xkYWN0KSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWdhY3Rpb24ocmVzLCAobG9uZylzaWdudW0sIChsb25nKWFjdCwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKW9sZGFjdCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfc2lnYWN0aW9uKHNpZ251bSwgYWN0LCBvbGRhY3QsIHN6KSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lnYWN0aW9uKChsb25nKXNpZ251bSwgKGxvbmcpYWN0LCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylvbGRhY3QsIChsb25nKXN6KQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lnYWN0aW9uKHJlcywgc2lnbnVtLCBhY3QsIG9sZGFjdCwgc3opICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lnYWN0aW9uKHJlcywgKGxvbmcpc2lnbnVtLCAobG9uZylhY3QsICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylvbGRhY3QsIChsb25nKXN6KQorCisvLyBBbmQgbm93IGEgZmV3IHN5c2NhbGxzIHdlIGRvbid0IGhhbmRsZSB5ZXQuCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Fmc19zeXNjYWxsKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYXJjaF9wcmN0bCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2JyZWFrKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2hvd24zMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nsb25lKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY3JlYXRlX21vZHVsZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Vwb2xsX2N0bF9vbGQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9lcG9sbF93YWl0X29sZCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2V4ZWN2ZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZhZHZpc2U2NCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZhZHZpc2U2NF82NCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZhbGxvY2F0ZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Zhbm90aWZ5X2luaXQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mYW5vdGlmeV9tYXJrKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNob3duMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mdGltZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Z0cnVuY2F0ZTY0KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnV0ZXgoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRlZ2lkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRldWlkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRnaWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGdyb3VwczMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0X2tlcm5lbF9zeW1zKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cG1zZyguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHJlc2dpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cmVzdWlkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRfdGhyZWFkX2FyZWEoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR1aWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2d0dHkoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pZGxlKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9wbCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xjaG93bjMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfX2xsc2VlayguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xvY2soLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tYWR2aXNlMSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21tYXAoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tbWFwMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21vZGlmeV9sZHQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcHgoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9fbmV3c2VsZWN0KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmZzc2VydmN0bCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZGZzdGF0KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkbHN0YXQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vbGRvbGR1bmFtZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZHN0YXQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcmN0bCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Byb2YoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcm9maWwoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wdXRwbXNnKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcXVlcnlfbW9kdWxlKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZGFoZWFkKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZGRpciguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3JldHVybiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3N1c3BlbmQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZWN1cml0eSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGZzZ2lkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRmc3VpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0Z2lkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRncm91cHMzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlZ2lkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXNnaWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlc3VpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmV1aWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldF90aHJlYWRfYXJlYSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHVpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lnYWx0c3RhY2soLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWdyZXR1cm4oLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWdzdXNwZW5kKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3R0eSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5bmNfZmlsZV9yYW5nZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX19zeXNjdGwoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90cnVuY2F0ZTY0KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdHV4Y2FsbCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3VnZXRybGltaXQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bGltaXQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bW91bnQyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdm04NiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3ZtODZvbGQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV92c2VydmVyKC4uLikKKworI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYWZzX3N5c2NhbGwocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9hcmNoX3ByY3RsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYnJlYWsocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jaG93bjMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2xvbmUocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jcmVhdGVfbW9kdWxlKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXBvbGxfY3RsX29sZChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Vwb2xsX3dhaXRfb2xkKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXhlY3ZlKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFkdmlzZTY0KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFkdmlzZTY0XzY0KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFsbG9jYXRlKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFub3RpZnlfaW5pdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Zhbm90aWZ5X21hcmsocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2hvd24zMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Z0aW1lKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnRydW5jYXRlNjQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mdXRleChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGVnaWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGV1aWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGdpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Z3JvdXBzMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRfa2VybmVsX3N5bXMocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRwbXNnKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cmVzZ2lkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRyZXN1aWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldF90aHJlYWRfYXJlYShyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHVpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ3R0eShyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lkbGUocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb3BsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGNob3duMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9fbGxzZWVrKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbG9jayhyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21hZHZpc2UxKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbW1hcDIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tbWFwKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbW9kaWZ5X2xkdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21weChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X19uZXdzZWxlY3QocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uZnNzZXJ2Y3RsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkZnN0YXQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGRsc3RhdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZG9sZHVuYW1lKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkc3RhdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ByY3RsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJvZmlsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJvZihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3B1dHBtc2cocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9xdWVyeV9tb2R1bGUocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkYWhlYWQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkZGlyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lncmV0dXJuKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lnc3VzcGVuZChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlY3VyaXR5KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0ZnNnaWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGZzdWlkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRnaWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGdyb3VwczMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVnaWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlc2dpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVzdWlkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXVpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0X3RocmVhZF9hcmVhKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0dWlkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWdhbHRzdGFjayhyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ3JldHVybihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ3N1c3BlbmQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zdHR5KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3luY19maWxlX3JhbmdlKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfX3N5c2N0bChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RydW5jYXRlNjQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90dXhjYWxsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdWdldHJsaW1pdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3VsaW1pdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Vtb3VudDIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF92bTg2b2xkKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfdm04NihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ZzZXJ2ZXIocmVzLCAuLi4pCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gUHJpdmF0ZSBkZWNsYXJhdGlvbnMuIERvIG5vdCBjYWxsIGRpcmVjdGx5IGZyb20gdXNlciBjb2RlLiBVc2UgbWFjcm9zIGFib3ZlLgordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWUobG9uZyB0bG9jKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZShsb25nIHJlcywgbG9uZyB0bG9jKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGltZShsb25nIHRwdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGltZShsb25nIHJlcywgbG9uZyB0cHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR0aW1lb2ZkYXkobG9uZyB0diwgbG9uZyB0eik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHRpbWVvZmRheShsb25nIHJlcywgbG9uZyB0diwgbG9uZyB0eik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dGltZW9mZGF5KGxvbmcgdHYsIGxvbmcgdHopOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR0aW1lb2ZkYXkobG9uZyByZXMsIGxvbmcgdHYsIGxvbmcgdHopOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FkanRpbWV4KGxvbmcgdHhjX3ApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hZGp0aW1leChsb25nIHJlcywgbG9uZyB0eGNfcCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXMobG9uZyB0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXMobG9uZyByZXMsIGxvbmcgdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0dGlkKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHRpZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmFub3NsZWVwKGxvbmcgcnF0cCwgbG9uZyBybXRwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmFub3NsZWVwKGxvbmcgcmVzLCBsb25nIHJxdHAsIGxvbmcgcm10cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWxhcm0obG9uZyBzZWNvbmRzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWxhcm0obG9uZyByZXMsIGxvbmcgc2Vjb25kcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGlkKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBpZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cHBpZCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwcGlkKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR1aWQoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0dWlkKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRldWlkKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGV1aWQobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGdpZCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRnaWQobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGVnaWQoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZWdpZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzdWlkKGxvbmcgcnVpZCwgbG9uZyBldWlkLCBsb25nIHN1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXN1aWQobG9uZyByZXMsIGxvbmcgcnVpZCwgbG9uZyBldWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRyZXNnaWQobG9uZyByZ2lkLCBsb25nIGVnaWQsIGxvbmcgc2dpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc2dpZChsb25nIHJlcywgbG9uZyByZ2lkLCBsb25nIGVnaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHBnaWQobG9uZyBwaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwZ2lkKGxvbmcgcmVzLCBsb25nIHBpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGdycCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwZ3JwKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRzaWQobG9uZyBwaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRzaWQobG9uZyByZXMsIGxvbmcgcGlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRncm91cHMobG9uZyBnaWRzZXRzaXplLCBsb25nIGdyb3VwbGlzdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGdyb3Vwcyhsb25nIHJlcywgbG9uZyBnaWRzZXRzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cGxpc3QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlZ2lkKGxvbmcgcmdpZCwgbG9uZyBlZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVnaWQobG9uZyByZXMsIGxvbmcgcmdpZCwgbG9uZyBlZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRnaWQobG9uZyBnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRnaWQobG9uZyByZXMsIGxvbmcgZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXVpZChsb25nIHJ1aWQsIGxvbmcgZXVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJldWlkKGxvbmcgcmVzLCBsb25nIHJ1aWQsIGxvbmcgZXVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dWlkKGxvbmcgdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0dWlkKGxvbmcgcmVzLCBsb25nIHVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVzdWlkKGxvbmcgcnVpZCwgbG9uZyBldWlkLCBsb25nIHN1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXN1aWQobG9uZyByZXMsIGxvbmcgcnVpZCwgbG9uZyBldWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXNnaWQobG9uZyByZ2lkLCBsb25nIGVnaWQsIGxvbmcgc2dpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlc2dpZChsb25nIHJlcywgbG9uZyByZ2lkLCBsb25nIGVnaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGZzdWlkKGxvbmcgdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnN1aWQobG9uZyByZXMsIGxvbmcgdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc2dpZChsb25nIGdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGZzZ2lkKGxvbmcgcmVzLCBsb25nIGdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cGdpZChsb25nIHBpZCwgbG9uZyBwZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cGdpZChsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgcGdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0c2lkKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHNpZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z3JvdXBzKGxvbmcgZ2lkc2V0c2l6ZSwgbG9uZyBncm91cGxpc3QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRncm91cHMobG9uZyByZXMsIGxvbmcgZ2lkc2V0c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXBsaXN0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hY2N0KGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FjY3QobG9uZyByZXMsIGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2FwZ2V0KGxvbmcgaGVhZGVyLCBsb25nIGRhdGFwdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jYXBnZXQobG9uZyByZXMsIGxvbmcgaGVhZGVyLCBsb25nIGRhdGFwdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NhcHNldChsb25nIGhlYWRlciwgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2Fwc2V0KGxvbmcgcmVzLCBsb25nIGhlYWRlciwgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wZXJzb25hbGl0eShsb25nIHBlcnNvbmFsaXR5KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGVyc29uYWxpdHkobG9uZyByZXMsIGxvbmcgcGVyc29uYWxpdHkpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ3BlbmRpbmcobG9uZyBzZXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWdwZW5kaW5nKGxvbmcgcmVzLCBsb25nIHNldCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lncHJvY21hc2sobG9uZyBob3csIGxvbmcgc2V0LCBsb25nIG9zZXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWdwcm9jbWFzayhsb25nIHJlcywgbG9uZyBob3csIGxvbmcgc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9zZXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGl0aW1lcihsb25nIHdoaWNoLCBsb25nIHZhbHVlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0aXRpbWVyKGxvbmcgcmVzLCBsb25nIHdoaWNoLCBsb25nIHZhbHVlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRpdGltZXIobG9uZyB3aGljaCwgbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvdmFsdWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRpdGltZXIobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG92YWx1ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJfY3JlYXRlKGxvbmcgd2hpY2hfY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZXJfZXZlbnRfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjcmVhdGVkX3RpbWVyX2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfY3JlYXRlKGxvbmcgcmVzLCBsb25nIHdoaWNoX2Nsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lcl9ldmVudF9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjcmVhdGVkX3RpbWVyX2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9nZXR0aW1lKGxvbmcgdGltZXJfaWQsIGxvbmcgc2V0dGluZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2dldHRpbWUobG9uZyByZXMsIGxvbmcgdGltZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzZXR0aW5nKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9nZXRvdmVycnVuKGxvbmcgdGltZXJfaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcl9nZXRvdmVycnVuKGxvbmcgcmVzLCBsb25nIHRpbWVyX2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9zZXR0aW1lKGxvbmcgdGltZXJfaWQsIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld19zZXR0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvbGRfc2V0dGluZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX3NldHRpbWUobG9uZyByZXMsIGxvbmcgdGltZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyBuZXdfc2V0dGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9sZF9zZXR0aW5nKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9kZWxldGUobG9uZyB0aW1lcl9pZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2RlbGV0ZShsb25nIHJlcywgbG9uZyB0aW1lcl9pZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfc2V0dGltZShsb25nIHdoaWNoX2Nsb2NrLCBsb25nIHRwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvY2tfc2V0dGltZShsb25nIHJlcywgbG9uZyB3aGljaF9jbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19nZXR0aW1lKGxvbmcgd2hpY2hfY2xvY2ssIGxvbmcgdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19nZXR0aW1lKGxvbmcgcmVzLCBsb25nIHdoaWNoX2Nsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX2FkanRpbWUobG9uZyB3aGljaF9jbG9jaywgbG9uZyB0eCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX2FkanRpbWUobG9uZyByZXMsIGxvbmcgd2hpY2hfY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0eCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfZ2V0cmVzKGxvbmcgd2hpY2hfY2xvY2ssIGxvbmcgdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19nZXRyZXMobG9uZyByZXMsIGxvbmcgd2hpY2hfY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19uYW5vc2xlZXAobG9uZyB3aGljaF9jbG9jaywgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBycXRwLCBsb25nIHJtdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19uYW5vc2xlZXAobG9uZyByZXMsIGxvbmcgd2hpY2hfY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzLCBsb25nIHJxdHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJtdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25pY2UobG9uZyBpbmNyZW1lbnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uaWNlKGxvbmcgcmVzLCBsb25nIGluY3JlbWVudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfc2V0c2NoZWR1bGVyKGxvbmcgcGlkLCBsb25nIHBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwYXJhbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3NldHNjaGVkdWxlcihsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvbGljeSwgbG9uZyBwYXJhbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfc2V0cGFyYW0obG9uZyBwaWQsIGxvbmcgcGFyYW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9zZXRwYXJhbShsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGFyYW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldHNjaGVkdWxlcihsb25nIHBpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldHNjaGVkdWxlcihsb25nIHJlcywgbG9uZyBwaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldHBhcmFtKGxvbmcgcGlkLCBsb25nIHBhcmFtKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0cGFyYW0obG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhcmFtKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9zZXRhZmZpbml0eShsb25nIHBpZCwgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfc2V0YWZmaW5pdHkobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9nZXRhZmZpbml0eShsb25nIHBpZCwgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0YWZmaW5pdHkobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF95aWVsZCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF95aWVsZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0X3ByaW9yaXR5X21heChsb25nIHBvbGljeSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9tYXgobG9uZyByZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwb2xpY3kpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9taW4obG9uZyBwb2xpY3kpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9nZXRfcHJpb3JpdHlfbWluKGxvbmcgcmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9saWN5KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwobG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ZXJ2YWwpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnRlcnZhbCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cHJpb3JpdHkobG9uZyB3aGljaCwgbG9uZyB3aG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuaWNldmFsKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cHJpb3JpdHkobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgd2hvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5pY2V2YWwpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHByaW9yaXR5KGxvbmcgd2hpY2gsIGxvbmcgd2hvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cHJpb3JpdHkobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgd2hvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaHV0ZG93bihsb25nIGFyZzAsIGxvbmcgYXJnMSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NodXRkb3duKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVib290KGxvbmcgbWFnaWMxLCBsb25nIG1hZ2ljMiwgbG9uZyBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVib290KGxvbmcgcmVzLCBsb25nIG1hZ2ljMSwgbG9uZyBtYWdpYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNtZCwgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Jlc3RhcnRfc3lzY2FsbCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZXN0YXJ0X3N5c2NhbGwobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2tleGVjX2xvYWQobG9uZyBlbnRyeSwgbG9uZyBucl9zZWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2VnbWVudHMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9rZXhlY19sb2FkKGxvbmcgcmVzLCBsb25nIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbnJfc2VnbWVudHMsIGxvbmcgc2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXhpdChsb25nIGVycm9yX2NvZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9leGl0KGxvbmcgcmVzLCBsb25nIGVycm9yX2NvZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2V4aXRfZ3JvdXAobG9uZyBlcnJvcl9jb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXhpdF9ncm91cChsb25nIHJlcywgbG9uZyBlcnJvcl9jb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93YWl0NChsb25nIHBpZCwgbG9uZyBzdGF0X2FkZHIsIGxvbmcgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJ1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdDQobG9uZyByZXMsIGxvbmcgcGlkLCBsb25nIHN0YXRfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRpb25zLCBsb25nIHJ1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93YWl0aWQobG9uZyB3aGljaCwgbG9uZyBwaWQsIGxvbmcgaW5mb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0aW9ucywgbG9uZyBydSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dhaXRpZChsb25nIHJlcywgbG9uZyB3aGljaCwgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGluZm9wLCBsb25nIG9wdGlvbnMsIGxvbmcgcnUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dhaXRwaWQobG9uZyBwaWQsIGxvbmcgc3RhdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRpb25zKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdHBpZChsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgc3RhdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0aW9ucyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0X3RpZF9hZGRyZXNzKGxvbmcgdGlkcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0X3RpZF9hZGRyZXNzKGxvbmcgcmVzLCBsb25nIHRpZHB0cik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW5pdF9tb2R1bGUobG9uZyB1bW9kLCBsb25nIGxlbiwgbG9uZyB1YXJncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2luaXRfbW9kdWxlKGxvbmcgcmVzLCBsb25nIHVtb2QsIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVhcmdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kZWxldGVfbW9kdWxlKGxvbmcgbmFtZV91c2VyLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZGVsZXRlX21vZHVsZShsb25nIHJlcywgbG9uZyBuYW1lX3VzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lncHJvY21hc2sobG9uZyBob3csIGxvbmcgc2V0LCBsb25nIG9zZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaWdzZXRzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lncHJvY21hc2sobG9uZyByZXMsIGxvbmcgaG93LCBsb25nIHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvc2V0LCBsb25nIHNpZ3NldHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3NpZ3BlbmRpbmcobG9uZyBzZXQsIGxvbmcgc2lnc2V0c2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3J0X3NpZ3BlbmRpbmcobG9uZyByZXMsIGxvbmcgc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2lnc2V0c2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lndGltZWR3YWl0KGxvbmcgdXRoZXNlLCBsb25nIHVpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHV0cywgbG9uZyBzaWdzZXRzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lndGltZWR3YWl0KGxvbmcgcmVzLCBsb25nIHV0aGVzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdWluZm8sIGxvbmcgdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaWdzZXRzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ydF90Z3NpZ3F1ZXVlaW5mbyhsb25nIHRnaWQsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2lnLCBsb25nIHVpbmZvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfdGdzaWdxdWV1ZWluZm8obG9uZyByZXMsIGxvbmcgdGdpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwaWQsIGxvbmcgc2lnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVpbmZvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9raWxsKGxvbmcgcGlkLCBsb25nIHNpZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2tpbGwobG9uZyByZXMsIGxvbmcgcGlkLCBsb25nIHNpZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGdraWxsKGxvbmcgdGdpZCwgbG9uZyBwaWQsIGxvbmcgc2lnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGdraWxsKGxvbmcgcmVzLCBsb25nIHRnaWQsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RraWxsKGxvbmcgcGlkLCBsb25nIHNpZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RraWxsKGxvbmcgcmVzLCBsb25nIHBpZCwgbG9uZyBzaWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3NpZ3F1ZXVlaW5mbyhsb25nIHBpZCwgbG9uZyBzaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdWluZm8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWdxdWV1ZWluZm8obG9uZyByZXMsIGxvbmcgcGlkLCBsb25nIHNpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdWluZm8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NnZXRtYXNrKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NnZXRtYXNrKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zc2V0bWFzayhsb25nIG5ld21hc2spOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zc2V0bWFzayhsb25nIHJlcywgbG9uZyBuZXdtYXNrKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWduYWwobG9uZyBzaWcsIGxvbmcgaGFuZGxlcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ25hbChsb25nIHJlcywgbG9uZyBzaWcsIGxvbmcgaGFuZGxlcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGF1c2UoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGF1c2UobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5bmMoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3luYyhsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN5bmMobG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzeW5jKGxvbmcgcmVzLCBsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mZGF0YXN5bmMobG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZkYXRhc3luYyhsb25nIHJlcywgbG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYmRmbHVzaChsb25nIGZ1bmMsIGxvbmcgZGF0YSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2JkZmx1c2gobG9uZyByZXMsIGxvbmcgZnVuYywgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tb3VudChsb25nIGRldl9uYW1lLCBsb25nIGRpcl9uYW1lLCBsb25nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbW91bnQobG9uZyByZXMsIGxvbmcgZGV2X25hbWUsIGxvbmcgZGlyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdHlwZSwgbG9uZyBmbGFncywgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bW91bnQobG9uZyBuYW1lLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW1vdW50KGxvbmcgcmVzLCBsb25nIG5hbWUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZHVtb3VudChsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGR1bW91bnQobG9uZyByZXMsIGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdHJ1bmNhdGUobG9uZyBwYXRoLCBsb25nIGxlbmd0aCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RydW5jYXRlKGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgbGVuZ3RoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mdHJ1bmNhdGUobG9uZyBmZCwgbG9uZyBsZW5ndGgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mdHJ1bmNhdGUobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbGVuZ3RoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0KGxvbmcgZmlsZW5hbWUsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0YXQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RhdGZzKGxvbmcgcGF0aCwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0ZnMobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0YXRmczY0KGxvbmcgcGF0aCwgbG9uZyBzeiwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0ZnM2NChsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIHN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXRmcyhsb25nIGZkLCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0ZnMobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgYnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdGZzNjQobG9uZyBmZCwgbG9uZyBzeiwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdGZzNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHN0YXQobG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHN0YXQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXQobG9uZyBmZCwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3c3RhdChsb25nIGZpbGVuYW1lLCBsb25nIHN0YXRidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdzdGF0KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3bHN0YXQobG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3bHN0YXQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3ZnN0YXQobG9uZyBmZCwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3ZnN0YXQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXN0YXQobG9uZyBkZXYsIGxvbmcgdWJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VzdGF0KGxvbmcgcmVzLCBsb25nIGRldiwgbG9uZyB1YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0NjQobG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3RhdDY0KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdDY0KGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0NjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHN0YXQ2NChsb25nIGZpbGVuYW1lLCBsb25nIHN0YXRidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sc3RhdDY0KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0eGF0dHIobG9uZyBwYXRoLCBsb25nIG5hbWUsIGxvbmcgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0eGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlLCBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xzZXR4YXR0cihsb25nIHBhdGgsIGxvbmcgbmFtZSwgbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHNldHhhdHRyKGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdmFsdWUsIGxvbmcgc2l6ZSwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnNldHhhdHRyKGxvbmcgZmQsIGxvbmcgbmFtZSwgbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnNldHhhdHRyKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlLCBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHhhdHRyKGxvbmcgcGF0aCwgbG9uZyBuYW1lLCBsb25nIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHhhdHRyKGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2YWx1ZSwgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sZ2V0eGF0dHIobG9uZyBwYXRoLCBsb25nIG5hbWUsIGxvbmcgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xnZXR4YXR0cihsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlLCBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZnZXR4YXR0cihsb25nIGZkLCBsb25nIG5hbWUsIGxvbmcgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZnZXR4YXR0cihsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2YWx1ZSwgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saXN0eGF0dHIobG9uZyBwYXRoLCBsb25nIGxpc3QsIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpc3R4YXR0cihsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xsaXN0eGF0dHIobG9uZyBwYXRoLCBsb25nIGxpc3QsIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xsaXN0eGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmxpc3R4YXR0cihsb25nIGZkLCBsb25nIGxpc3QsIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZsaXN0eGF0dHIobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlbW92ZXhhdHRyKGxvbmcgcGF0aCwgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVtb3ZleGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9scmVtb3ZleGF0dHIobG9uZyBwYXRoLCBsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9scmVtb3ZleGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mcmVtb3ZleGF0dHIobG9uZyBmZCwgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnJlbW92ZXhhdHRyKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Jyayhsb25nIGJyayk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Jyayhsb25nIHJlcywgbG9uZyBicmspOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21wcm90ZWN0KGxvbmcgc3RhcnQsIGxvbmcgbGVuLCBsb25nIHByb3QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcHJvdGVjdChsb25nIHJlcywgbG9uZyBzdGFydCwgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcHJvdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXJlbWFwKGxvbmcgYWRkciwgbG9uZyBvbGRfbGVuLCBsb25nIG5ld19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgbmV3X2FkZHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcmVtYXAobG9uZyByZXMsIGxvbmcgYWRkciwgbG9uZyBvbGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdfbGVuLCBsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdfYWRkcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVtYXBfZmlsZV9wYWdlcyhsb25nIHN0YXJ0LCBsb25nIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHByb3QsIGxvbmcgcGdvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVtYXBfZmlsZV9wYWdlcyhsb25nIHJlcywgbG9uZyBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUsIGxvbmcgcHJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBnb2ZmLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc3luYyhsb25nIHN0YXJ0LCBsb25nIGxlbiwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21zeW5jKGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXVubWFwKGxvbmcgYWRkciwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5tYXAobG9uZyByZXMsIGxvbmcgYWRkciwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21sb2NrKGxvbmcgc3RhcnQsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWxvY2sobG9uZyByZXMsIGxvbmcgc3RhcnQsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tdW5sb2NrKGxvbmcgc3RhcnQsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXVubG9jayhsb25nIHJlcywgbG9uZyBzdGFydCwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21sb2NrYWxsKGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tbG9ja2FsbChsb25nIHJlcywgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXVubG9ja2FsbCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5sb2NrYWxsKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tYWR2aXNlKGxvbmcgc3RhcnQsIGxvbmcgbGVuLCBsb25nIGJlaGF2aW9yKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWFkdmlzZShsb25nIHJlcywgbG9uZyBzdGFydCwgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBiZWhhdmlvcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWluY29yZShsb25nIHN0YXJ0LCBsb25nIGxlbiwgbG9uZyB2ZWMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9taW5jb3JlKGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZlYyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGl2b3Rfcm9vdChsb25nIG5ld19yb290LCBsb25nIHB1dF9vbGQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9waXZvdF9yb290KGxvbmcgcmVzLCBsb25nIG5ld19yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcHV0X29sZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2hyb290KGxvbmcgZmlsZW5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaHJvb3QobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rbm9kKGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSwgbG9uZyBkZXYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ta25vZChsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGluayhsb25nIG9sZG5hbWUsIGxvbmcgbmV3bmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpbmsobG9uZyByZXMsIGxvbmcgb2xkbmFtZSwgbG9uZyBuZXduYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW1saW5rKGxvbmcgb2xkLCBsb25nIG5ld18pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeW1saW5rKGxvbmcgcmVzLCBsb25nIG9sZCwgbG9uZyBuZXdfKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bmxpbmsobG9uZyBwYXRobmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VubGluayhsb25nIHJlcywgbG9uZyBwYXRobmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVuYW1lKGxvbmcgb2xkbmFtZSwgbG9uZyBuZXduYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVuYW1lKGxvbmcgcmVzLCBsb25nIG9sZG5hbWUsIGxvbmcgbmV3bmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2htb2QobG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2htb2QobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNobW9kKGxvbmcgZmQsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG1vZChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY250bChsb25nIGZkLCBsb25nIGNtZCwgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY250bChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBjbWQsIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY250bDY0KGxvbmcgZmQsIGxvbmcgY21kLCBsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjbnRsNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9waXBlKGxvbmcgZmlsZGVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGlwZShsb25nIHJlcywgbG9uZyBmaWxkZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BpcGUyKGxvbmcgZmlsZGVzLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGlwZTIobG9uZyByZXMsIGxvbmcgZmlsZGVzLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAobG9uZyBmaWxkZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAobG9uZyByZXMsIGxvbmcgZmlsZGVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAyKGxvbmcgb2xkZmQsIGxvbmcgbmV3ZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAyKGxvbmcgcmVzLCBsb25nIG9sZGZkLCBsb25nIG5ld2ZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAzKGxvbmcgb2xkZmQsIGxvbmcgbmV3ZmQsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAzKGxvbmcgcmVzLCBsb25nIG9sZGZkLCBsb25nIG5ld2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvcGVybShsb25nIGZyb20sIGxvbmcgbnVtLCBsb25nIG9uKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9wZXJtKGxvbmcgcmVzLCBsb25nIGZyb20sIGxvbmcgbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9jdGwobG9uZyBmZCwgbG9uZyBjbWQsIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9jdGwobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgY21kLCBsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmxvY2sobG9uZyBmZCwgbG9uZyBjbWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mbG9jayhsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBjbWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvX3NldHVwKGxvbmcgbnJfcmVxcywgbG9uZyBjdHgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19zZXR1cChsb25nIHJlcywgbG9uZyBucl9yZXFzLCBsb25nIGN0eCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fZGVzdHJveShsb25nIGN0eCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX2Rlc3Ryb3kobG9uZyByZXMsIGxvbmcgY3R4KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19nZXRldmVudHMobG9uZyBjdHhfaWQsIGxvbmcgbWluX25yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5yLCBsb25nIGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fZ2V0ZXZlbnRzKGxvbmcgcmVzLCBsb25nIGN0eF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWluX25yLCBsb25nIG5yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBldmVudHMsIGxvbmcgdGltZW91dCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fc3VibWl0KGxvbmcgY3R4X2lkLCBsb25nIGFyZzEsIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX3N1Ym1pdChsb25nIHJlcywgbG9uZyBjdHhfaWQsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fY2FuY2VsKGxvbmcgY3R4X2lkLCBsb25nIGlvY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmVzdWx0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fY2FuY2VsKGxvbmcgcmVzLCBsb25nIGN0eF9pZCwgbG9uZyBpb2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyByZXN1bHQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRmaWxlKGxvbmcgb3V0X2ZkLCBsb25nIGluX2ZkLCBsb25nIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZGZpbGUobG9uZyByZXMsIGxvbmcgb3V0X2ZkLCBsb25nIGluX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9mZnNldCwgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZGZpbGU2NChsb25nIG91dF9mZCwgbG9uZyBpbl9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2Zmc2V0LCBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZGZpbGU2NChsb25nIHJlcywgbG9uZyBvdXRfZmQsIGxvbmcgaW5fZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvZmZzZXQsIGxvbmcgY291bnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlYWRsaW5rKGxvbmcgcGF0aCwgbG9uZyBidWYsIGxvbmcgYnVmc2l6KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZGxpbmsobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmc2l6KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jcmVhdChsb25nIHBhdGhuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jcmVhdChsb25nIHJlcywgbG9uZyBwYXRobmFtZSwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vcGVuKGxvbmcgZmlsZW5hbWUsIGxvbmcgZmxhZ3MsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29wZW4obG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9zZShsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvc2UobG9uZyByZXMsIGxvbmcgZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY2Vzcyhsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hY2Nlc3MobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdmhhbmd1cCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF92aGFuZ3VwKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaG93bihsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaG93bihsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sY2hvd24obG9uZyBmaWxlbmFtZSwgbG9uZyB1c2VyLCBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGNob3duKGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2hvd24obG9uZyBmZCwgbG9uZyB1c2VyLCBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNob3duKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaG93bjE2KGxvbmcgZmlsZW5hbWUsIGxvbmcgdXNlciwgbG9uZyBncm91cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nob3duMTYobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sY2hvd24xNihsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xjaG93bjE2KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG93bjE2KGxvbmcgZmQsIGxvbmcgdXNlciwgbG9uZyBncm91cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG93bjE2KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlZ2lkMTYobG9uZyByZ2lkLCBsb25nIGVnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZWdpZDE2KGxvbmcgcmVzLCBsb25nIHJnaWQsIGxvbmcgZWdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z2lkMTYobG9uZyBnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRnaWQxNihsb25nIHJlcywgbG9uZyBnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJldWlkMTYobG9uZyBydWlkLCBsb25nIGV1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXVpZDE2KGxvbmcgcmVzLCBsb25nIHJ1aWQsIGxvbmcgZXVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dWlkMTYobG9uZyB1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR1aWQxNihsb25nIHJlcywgbG9uZyB1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlc3VpZDE2KGxvbmcgcnVpZCwgbG9uZyBldWlkLCBsb25nIHN1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXN1aWQxNihsb25nIHJlcywgbG9uZyBydWlkLCBsb25nIGV1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3VpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzdWlkMTYobG9uZyBydWlkLCBsb25nIGV1aWQsIGxvbmcgc3VpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc3VpZDE2KGxvbmcgcmVzLCBsb25nIHJ1aWQsIGxvbmcgZXVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXNnaWQxNihsb25nIHJnaWQsIGxvbmcgZWdpZCwgbG9uZyBzZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVzZ2lkMTYobG9uZyByZXMsIGxvbmcgcmdpZCwgbG9uZyBlZ2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJlc2dpZDE2KGxvbmcgcmdpZCwgbG9uZyBlZ2lkLCBsb25nIHNnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXNnaWQxNihsb25nIHJlcywgbG9uZyByZ2lkLCBsb25nIGVnaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2dpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0ZnN1aWQxNihsb25nIHVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGZzdWlkMTYobG9uZyByZXMsIGxvbmcgdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc2dpZDE2KGxvbmcgZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnNnaWQxNihsb25nIHJlcywgbG9uZyBnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGdyb3VwczE2KGxvbmcgZ2lkc2V0c2l6ZSwgbG9uZyBncm91cGxpc3QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRncm91cHMxNihsb25nIHJlcywgbG9uZyBnaWRzZXRzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwbGlzdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z3JvdXBzMTYobG9uZyBnaWRzZXRzaXplLCBsb25nIGdyb3VwbGlzdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdyb3VwczE2KGxvbmcgcmVzLCBsb25nIGdpZHNldHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXBsaXN0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR1aWQxNigpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXR1aWQxNihsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZXVpZDE2KCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGV1aWQxNihsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z2lkMTYoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z2lkMTYobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGVnaWQxNigpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRlZ2lkMTYobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3V0aW1lKGxvbmcgZmlsZW5hbWUsIGxvbmcgdGltZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91dGltZShsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyB0aW1lcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXRpbWVzKGxvbmcgZmlsZW5hbWUsIGxvbmcgdXRpbWVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdXRpbWVzKGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIHV0aW1lcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHNlZWsobG9uZyBmZCwgbG9uZyBvZmZzZXQsIGxvbmcgb3JpZ2luKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHNlZWsobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9yaWdpbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGxzZWVrKGxvbmcgZmQsIGxvbmcgb2Zmc2V0X2hpZ2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2Zmc2V0X2xvdywgbG9uZyByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3JpZ2luKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGxzZWVrKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG9mZnNldF9oaWdoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvZmZzZXRfbG93LCBsb25nIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3JpZ2luKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWFkKGxvbmcgZmQsIGxvbmcgYnVmLCBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZHYobG9uZyBmZCwgbG9uZyB2ZWMsIGxvbmcgdmxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlYWR2KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93cml0ZShsb25nIGZkLCBsb25nIGJ1ZiwgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dyaXRlKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd3JpdGV2KGxvbmcgZmQsIGxvbmcgdmVjLCBsb25nIHZsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93cml0ZXYobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuKTsKKworI2lmZGVmIF9MUDY0Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJlYWQ2NChsb25nIGZkLCBsb25nIGJ1ZiwgbG9uZyBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9zKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJlYWQ2NChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCwgbG9uZyBwb3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B3cml0ZTY0KGxvbmcgZmQsIGxvbmcgYnVmLCBsb25nIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9zKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHdyaXRlNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50LCBsb25nIHBvcyk7CisjZWxzZQordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3ByZWFkNjQobG9uZyBmZCwgbG9uZyBidWYsIGxvbmcgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvczAsIGxvbmcgcG9zMSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ByZWFkNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY291bnQsIGxvbmcgcG9zMCwgbG9uZyBwb3MxKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wd3JpdGU2NChsb25nIGZkLCBsb25nIGJ1ZiwgbG9uZyBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvczAsIGxvbmcgcG9zMSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3B3cml0ZTY0KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCwgbG9uZyBwb3MwLCBsb25nIHBvczEpOworI2VuZGlmCisKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcmVhZHYobG9uZyBmZCwgbG9uZyB2ZWMsIGxvbmcgdmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwb3NfbCwgbG9uZyBwb3NfaCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ByZWFkdihsb25nIHJlcywgbG9uZyBmZCwgbG9uZyB2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZsZW4sIGxvbmcgcG9zX2wsIGxvbmcgcG9zX2gpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B3cml0ZXYobG9uZyBmZCwgbG9uZyB2ZWMsIGxvbmcgdmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9zX2wsIGxvbmcgcG9zX2gpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wd3JpdGV2KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZsZW4sIGxvbmcgcG9zX2wsIGxvbmcgcG9zX2gpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGN3ZChsb25nIGJ1ZiwgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Y3dkKGxvbmcgcmVzLCBsb25nIGJ1ZiwgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta2Rpcihsb25nIHBhdGhuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ta2Rpcihsb25nIHJlcywgbG9uZyBwYXRobmFtZSwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaGRpcihsb25nIGZpbGVuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2hkaXIobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaGRpcihsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNoZGlyKGxvbmcgcmVzLCBsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ybWRpcihsb25nIHBhdGhuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcm1kaXIobG9uZyByZXMsIGxvbmcgcGF0aG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xvb2t1cF9kY29va2llKGxvbmcgY29va2llNjQsIGxvbmcgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbG9va3VwX2Rjb29raWUobG9uZyByZXMsIGxvbmcgY29va2llNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcXVvdGFjdGwobG9uZyBjbWQsIGxvbmcgc3BlY2lhbCwgbG9uZyBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFkZHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9xdW90YWN0bChsb25nIHJlcywgbG9uZyBjbWQsIGxvbmcgc3BlY2lhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpZCwgbG9uZyBhZGRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRkZW50cyhsb25nIGZkLCBsb25nIGRpcmVudCwgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGRlbnRzKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGRpcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZGVudHM2NChsb25nIGZkLCBsb25nIGRpcmVudCwgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGRlbnRzNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgZGlyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY291bnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHNvY2tvcHQobG9uZyBmZCwgbG9uZyBsZXZlbCwgbG9uZyBvcHRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHR2YWwsIGxvbmcgb3B0bGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0c29ja29wdChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9wdG5hbWUsIGxvbmcgb3B0dmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0bGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRzb2Nrb3B0KGxvbmcgZmQsIGxvbmcgbGV2ZWwsIGxvbmcgb3B0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0dmFsLCBsb25nIG9wdGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHNvY2tvcHQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRuYW1lLCBsb25nIG9wdHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9wdGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYmluZChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYmluZChsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jb25uZWN0KGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jb25uZWN0KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY2VwdChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWNjZXB0KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWNjZXB0NChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWNjZXB0NChsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyLCBsb25nIGFyZzMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHNvY2tuYW1lKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRzb2NrbmFtZShsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGVlcm5hbWUobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBlZXJuYW1lKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZHRvKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMywgbG9uZyBhcmc0LCBsb25nIGFyZzUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kdG8obG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyLCBsb25nIGFyZzMsIGxvbmcgYXJnNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnNSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZG1zZyhsb25nIGZkLCBsb25nIG1zZywgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRtc2cobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRtbXNnKGxvbmcgZmQsIGxvbmcgbXNnLCBsb25nIHZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRtbXNnKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2KGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVjdmZyb20obG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMsIGxvbmcgYXJnNCwgbG9uZyBhcmc1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVjdmZyb20obG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMywgbG9uZyBhcmc0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlY3Ztc2cobG9uZyBmZCwgbG9uZyBtc2csIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2bXNnKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2bW1zZyhsb25nIGZkLCBsb25nIG1zZywgbG9uZyB2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgdGltZW91dCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlY3ZtbXNnKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuLCBsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NvY2tldChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc29ja2V0KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc29ja2V0cGFpcihsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc29ja2V0cGFpcihsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyLCBsb25nIGFyZzMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NvY2tldGNhbGwobG9uZyBjYWxsLCBsb25nIGFyZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zb2NrZXRjYWxsKGxvbmcgcmVzLCBsb25nIGNhbGwsIGxvbmcgYXJncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGlzdGVuKGxvbmcgYXJnMCwgbG9uZyBhcmcxKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGlzdGVuKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcG9sbChsb25nIHVmZHMsIGxvbmcgbmZkcywgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcG9sbChsb25nIHJlcywgbG9uZyB1ZmRzLCBsb25nIG5mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZWxlY3QobG9uZyBuLCBsb25nIGlucCwgbG9uZyBvdXRwLCBsb25nIGV4cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0dnApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZWxlY3QobG9uZyByZXMsIGxvbmcgbiwgbG9uZyBpbnAsIGxvbmcgb3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXhwLCBsb25nIHR2cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX3NlbGVjdChsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZF9zZWxlY3QobG9uZyByZXMsIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9lcG9sbF9jcmVhdGUobG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfY3JlYXRlKGxvbmcgcmVzLCBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX2NyZWF0ZTEobG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX2NyZWF0ZTEobG9uZyByZXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX2N0bChsb25nIGVwZmQsIGxvbmcgb3AsIGxvbmcgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXZlbnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF9jdGwobG9uZyByZXMsIGxvbmcgZXBmZCwgbG9uZyBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmQsIGxvbmcgZXZlbnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX3dhaXQobG9uZyBlcGZkLCBsb25nIGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4ZXZlbnRzLCBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF93YWl0KGxvbmcgcmVzLCBsb25nIGVwZmQsIGxvbmcgZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4ZXZlbnRzLCBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX3B3YWl0KGxvbmcgZXBmZCwgbG9uZyBldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtYXhldmVudHMsIGxvbmcgdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpZ21hc2ssIGxvbmcgc2lnc2V0c2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX3B3YWl0KGxvbmcgcmVzLCBsb25nIGVwZmQsIGxvbmcgZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1heGV2ZW50cywgbG9uZyB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpZ21hc2ssIGxvbmcgc2lnc2V0c2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0aG9zdG5hbWUobG9uZyBuYW1lLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGhvc3RuYW1lKGxvbmcgcmVzLCBsb25nIG5hbWUsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRob3N0bmFtZShsb25nIG5hbWUsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0aG9zdG5hbWUobG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGRvbWFpbm5hbWUobG9uZyBuYW1lLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGRvbWFpbm5hbWUobG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25ld3VuYW1lKGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25ld3VuYW1lKGxvbmcgcmVzLCBsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VuYW1lKGxvbmcgYXJnMCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VuYW1lKGxvbmcgcmVzLCBsb25nIGFyZzApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZHVuYW1lKGxvbmcgYXJnMCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZHVuYW1lKGxvbmcgcmVzLCBsb25nIGFyZzApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJsaW1pdChsb25nIHJlc291cmNlLCBsb25nIHJsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRybGltaXQobG9uZyByZXMsIGxvbmcgcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZF9nZXRybGltaXQobG9uZyByZXNvdXJjZSwgbG9uZyBybGltKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkX2dldHJsaW1pdChsb25nIHJlcywgbG9uZyByZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJsaW1pdChsb25nIHJlc291cmNlLCBsb25nIHJsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRybGltaXQobG9uZyByZXMsIGxvbmcgcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BybGltaXQ2NChsb25nIHBpZCwgbG9uZyByZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdfcmxpbSwgbG9uZyBvbGRfcmxpbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BybGltaXQ2NChsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld19ybGltLCBsb25nIG9sZF9ybGltKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRydXNhZ2UobG9uZyB3aG8sIGxvbmcgcnUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRydXNhZ2UobG9uZyByZXMsIGxvbmcgd2hvLCBsb25nIHJ1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bWFzayhsb25nIG1hc2spOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bWFzayhsb25nIHJlcywgbG9uZyBtYXNrKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2dnZXQobG9uZyBrZXksIGxvbmcgbXNnZmxnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNnZ2V0KGxvbmcgcmVzLCBsb25nIGtleSwgbG9uZyBtc2dmbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zZ3NuZChsb25nIG1zcWlkLCBsb25nIG1zZ3AsIGxvbmcgbXNnc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnZmxnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNnc25kKGxvbmcgcmVzLCBsb25nIG1zcWlkLCBsb25nIG1zZ3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ3N6LCBsb25nIG1zZ2ZsZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXNncmN2KGxvbmcgbXNxaWQsIGxvbmcgbXNncCwgbG9uZyBtc2dzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtc2d0eXAsIGxvbmcgbXNnZmxnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNncmN2KGxvbmcgcmVzLCBsb25nIG1zcWlkLCBsb25nIG1zZ3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ3N6LCBsb25nIG1zZ3R5cCwgbG9uZyBtc2dmbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zZ2N0bChsb25nIG1zcWlkLCBsb25nIGNtZCwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc2djdGwobG9uZyByZXMsIGxvbmcgbXNxaWQsIGxvbmcgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbWdldChsb25nIGtleSwgbG9uZyBuc2VtcywgbG9uZyBzZW1mbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW1nZXQobG9uZyByZXMsIGxvbmcga2V5LCBsb25nIG5zZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzZW1mbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbW9wKGxvbmcgc2VtaWQsIGxvbmcgc29wcywgbG9uZyBuc29wcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbW9wKGxvbmcgcmVzLCBsb25nIHNlbWlkLCBsb25nIHNvcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbnNvcHMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbWN0bChsb25nIHNlbWlkLCBsb25nIHNlbW51bSwgbG9uZyBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VtY3RsKGxvbmcgcmVzLCBsb25nIHNlbWlkLCBsb25nIHNlbW51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY21kLCBsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VtdGltZWRvcChsb25nIHNlbWlkLCBsb25nIHNvcHMsIGxvbmcgbnNvcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW10aW1lZG9wKGxvbmcgcmVzLCBsb25nIHNlbWlkLCBsb25nIHNvcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuc29wcywgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaG1hdChsb25nIHNobWlkLCBsb25nIHNobWFkZHIsIGxvbmcgc2htZmxnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2htYXQobG9uZyByZXMsIGxvbmcgc2htaWQsIGxvbmcgc2htYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaG1mbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWdldChsb25nIGtleSwgbG9uZyBzaXplLCBsb25nIGZsYWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1nZXQobG9uZyByZXMsIGxvbmcga2V5LCBsb25nIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWR0KGxvbmcgc2htYWRkcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NobWR0KGxvbmcgcmVzLCBsb25nIHNobWFkZHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWN0bChsb25nIHNobWlkLCBsb25nIGNtZCwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1jdGwobG9uZyByZXMsIGxvbmcgc2htaWQsIGxvbmcgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lwYyhsb25nIGNhbGwsIGxvbmcgZmlyc3QsIGxvbmcgc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRoaXJkLCBsb25nIHB0ciwgbG9uZyBmaWZ0aCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lwYyhsb25nIHJlcywgbG9uZyBjYWxsLCBsb25nIGZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzZWNvbmQsIGxvbmcgdGhpcmQsIGxvbmcgcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmaWZ0aCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfb3Blbihsb25nIG5hbWUsIGxvbmcgb2ZsYWcsIGxvbmcgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXR0cik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX29wZW4obG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBvZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUsIGxvbmcgYXR0cik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfdW5saW5rKGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX3VubGluayhsb25nIHJlcywgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV90aW1lZHNlbmQobG9uZyBtcWRlcywgbG9uZyBtc2dfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19sZW4sIGxvbmcgbXNnX3ByaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWJzX3RpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV90aW1lZHNlbmQobG9uZyByZXMsIGxvbmcgbXFkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19wdHIsIGxvbmcgbXNnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnX3ByaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFic190aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV90aW1lZHJlY2VpdmUobG9uZyBtcWRlcywgbG9uZyBtc2dfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19sZW4sIGxvbmcgbXNnX3ByaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWJzX3RpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV90aW1lZHJlY2VpdmUobG9uZyByZXMsIGxvbmcgbXFkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19wdHIsIGxvbmcgbXNnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnX3ByaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFic190aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV9ub3RpZnkobG9uZyBtcWRlcywgbG9uZyBub3RpZmljYXRpb24pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV9ub3RpZnkobG9uZyByZXMsIGxvbmcgbXFkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5vdGlmaWNhdGlvbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfZ2V0c2V0YXR0cihsb25nIG1xZGVzLCBsb25nIG1xc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb21xc3RhdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX2dldHNldGF0dHIobG9uZyByZXMsIGxvbmcgbXFkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtcXN0YXQsIGxvbmcgb21xc3RhdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGNpY29uZmlnX2lvYmFzZShsb25nIHdoaWNoLCBsb25nIGJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV2Zm4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wY2ljb25maWdfaW9iYXNlKGxvbmcgcmVzLCBsb25nIHdoaWNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVzLCBsb25nIGRldmZuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wY2ljb25maWdfcmVhZChsb25nIGJ1cywgbG9uZyBkZm4sIGxvbmcgb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuLCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BjaWNvbmZpZ19yZWFkKGxvbmcgcmVzLCBsb25nIGJ1cywgbG9uZyBkZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2ZmLCBsb25nIGxlbiwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BjaWNvbmZpZ193cml0ZShsb25nIGJ1cywgbG9uZyBkZm4sIGxvbmcgb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wY2ljb25maWdfd3JpdGUobG9uZyByZXMsIGxvbmcgYnVzLCBsb25nIGRmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2ZmLCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zd2Fwb24obG9uZyBzcGVjaWFsZmlsZSwgbG9uZyBzd2FwX2ZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3dhcG9uKGxvbmcgcmVzLCBsb25nIHNwZWNpYWxmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzd2FwX2ZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zd2Fwb2ZmKGxvbmcgc3BlY2lhbGZpbGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zd2Fwb2ZmKGxvbmcgcmVzLCBsb25nIHNwZWNpYWxmaWxlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNjdGwobG9uZyBhcmdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzY3RsKGxvbmcgcmVzLCBsb25nIGFyZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5c2luZm8obG9uZyBpbmZvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzaW5mbyhsb25nIHJlcywgbG9uZyBpbmZvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNmcyhsb25nIG9wdGlvbiwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNmcyhsb25nIHJlcywgbG9uZyBvcHRpb24sIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNsb2cobG9uZyB0eXBlLCBsb25nIGJ1ZiwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNsb2cobG9uZyByZXMsIGxvbmcgdHlwZSwgbG9uZyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXNlbGliKGxvbmcgbGlicmFyeSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VzZWxpYihsb25nIHJlcywgbG9uZyBsaWJyYXJ5KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uaV9zeXNjYWxsKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25pX3N5c2NhbGwobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B0cmFjZShsb25nIHJlcXVlc3QsIGxvbmcgcGlkLCBsb25nIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3B0cmFjZShsb25nIHJlcywgbG9uZyByZXF1ZXN0LCBsb25nIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWRkciwgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hZGRfa2V5KGxvbmcgX3R5cGUsIGxvbmcgX2Rlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfcGF5bG9hZCwgbG9uZyBwbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXN0cmluZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWRkX2tleShsb25nIHJlcywgbG9uZyBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9kZXNjcmlwdGlvbiwgbG9uZyBfcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBsZW4sIGxvbmcgZGVzdHJpbmdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVxdWVzdF9rZXkobG9uZyBfdHlwZSwgbG9uZyBfZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfY2FsbG91dF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGVzdHJpbmdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlcXVlc3Rfa2V5KGxvbmcgcmVzLCBsb25nIF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfY2FsbG91dF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRlc3RyaW5naWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2tleWN0bChsb25nIGNtZCwgbG9uZyBhcmcyLCBsb25nIGFyZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnNCwgbG9uZyBhcmc1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfa2V5Y3RsKGxvbmcgcmVzLCBsb25nIGNtZCwgbG9uZyBhcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczLCBsb25nIGFyZzQsIGxvbmcgYXJnNSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wcmlvX3NldChsb25nIHdoaWNoLCBsb25nIHdobywgbG9uZyBpb3ByaW8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb3ByaW9fc2V0KGxvbmcgcmVzLCBsb25nIHdoaWNoLCBsb25nIHdobywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlvcHJpbyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wcmlvX2dldChsb25nIHdoaWNoLCBsb25nIHdobyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvcHJpb19nZXQobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgd2hvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRfbWVtcG9saWN5KGxvbmcgbW9kZSwgbG9uZyBubWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4bm9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldF9tZW1wb2xpY3kobG9uZyByZXMsIGxvbmcgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5tYXNrLCBsb25nIG1heG5vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21pZ3JhdGVfcGFnZXMobG9uZyBwaWQsIGxvbmcgbWF4bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZnJvbSwgbG9uZyB0byk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21pZ3JhdGVfcGFnZXMobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4bm9kZSwgbG9uZyBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdG8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21vdmVfcGFnZXMobG9uZyBwaWQsIGxvbmcgbnJfcGFnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhZ2VzLCBsb25nIG5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0dXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tb3ZlX3BhZ2VzKGxvbmcgcmVzLCBsb25nIHBpZCwgbG9uZyBucl9wYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhZ2VzLCBsb25nIG5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdHVzLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tYmluZChsb25nIHN0YXJ0LCBsb25nIGxlbiwgbG9uZyBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbm1hc2ssIGxvbmcgbWF4bm9kZSwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21iaW5kKGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlLCBsb25nIG5tYXNrLCBsb25nIG1heG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldF9tZW1wb2xpY3kobG9uZyBwb2xpY3ksIGxvbmcgbm1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1heG5vZGUsIGxvbmcgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRfbWVtcG9saWN5KGxvbmcgcmVzLCBsb25nIHBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5tYXNrLCBsb25nIG1heG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhZGRyLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2luaXQoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5vdGlmeV9pbml0KGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2luaXQxKGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X2luaXQxKGxvbmcgcmVzLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2FkZF93YXRjaChsb25nIGZkLCBsb25nIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtYXNrKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5vdGlmeV9hZGRfd2F0Y2gobG9uZyByZXMsIGxvbmcgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGF0aCwgbG9uZyBtYXNrKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X3JtX3dhdGNoKGxvbmcgZmQsIGxvbmcgd2QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X3JtX3dhdGNoKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHdkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zcHVfcnVuKGxvbmcgZmQsIGxvbmcgdW5wYywgbG9uZyB1c3RhdHVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3B1X3J1bihsb25nIHJlcywgbG9uZyBmZCwgbG9uZyB1bnBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXN0YXR1cyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3B1X2NyZWF0ZShsb25nIG5hbWUsIGxvbmcgZmxhZ3MsIGxvbmcgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zcHVfY3JlYXRlKGxvbmcgcmVzLCBsb25nIG5hbWUsIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlLCBsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta25vZGF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rbm9kYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbW9kZSwgbG9uZyBkZXYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rZGlyYXQobG9uZyBkZmQsIGxvbmcgcGF0aG5hbWUsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rZGlyYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIHBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW5saW5rYXQobG9uZyBkZmQsIGxvbmcgcGF0aG5hbWUsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VubGlua2F0KGxvbmcgcmVzLCBsb25nIGRmZCwgbG9uZyBwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW1saW5rYXQobG9uZyBvbGRuYW1lLCBsb25nIG5ld2RmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXduYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3ltbGlua2F0KGxvbmcgcmVzLCBsb25nIG9sZG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld2RmZCwgbG9uZyBuZXduYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saW5rYXQobG9uZyBvbGRkZmQsIGxvbmcgb2xkbmFtZSwgbG9uZyBuZXdkZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3bmFtZSwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpbmthdChsb25nIHJlcywgbG9uZyBvbGRkZmQsIGxvbmcgb2xkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3ZGZkLCBsb25nIG5ld25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW5hbWVhdChsb25nIG9sZGRmZCwgbG9uZyBvbGRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3ZGZkLCBsb25nIG5ld25hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZW5hbWVhdChsb25nIHJlcywgbG9uZyBvbGRkZmQsIGxvbmcgb2xkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdkZmQsIGxvbmcgbmV3bmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnV0aW1lc2F0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHV0aW1lcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Z1dGltZXNhdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHV0aW1lcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmFjY2Vzc2F0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mYWNjZXNzYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2htb2RhdChsb25nIGRmZCwgbG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNobW9kYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG93bmF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cCwgbG9uZyBmbGFnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNob3duYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVzZXIsIGxvbmcgZ3JvdXAsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb3BlbmF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vcGVuYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXdmc3RhdGF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0YnVmLCBsb25nIGZsYWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdmc3RhdGF0KGxvbmcgcmVzLCBsb25nIGRmZCwgbG9uZyBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXRidWYsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXRhdDY0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXRidWYsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0YXQ2NChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXRidWYsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZGxpbmthdChsb25nIGRmZCwgbG9uZyBwYXRoLCBsb25nIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmc2l6KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZGxpbmthdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJ1ZiwgbG9uZyBidWZzaXopOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3V0aW1lbnNhdChsb25nIGRmZCwgbG9uZyBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1dGltZXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91dGltZW5zYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1dGltZXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Vuc2hhcmUobG9uZyB1bnNoYXJlX2ZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5zaGFyZShsb25nIHJlcywgbG9uZyB1bnNoYXJlX2ZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zcGxpY2UobG9uZyBmZF9pbiwgbG9uZyBvZmZfaW4sIGxvbmcgZmRfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9mZl9vdXQsIGxvbmcgbGVuLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3BsaWNlKGxvbmcgcmVzLCBsb25nIGZkX2luLCBsb25nIG9mZl9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmRfb3V0LCBsb25nIG9mZl9vdXQsIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdm1zcGxpY2UobG9uZyBmZCwgbG9uZyBpb3YsIGxvbmcgbnJfc2VncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdm1zcGxpY2UobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgaW92LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5yX3NlZ3MsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RlZShsb25nIGZkaW4sIGxvbmcgZmRvdXQsIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGVlKGxvbmcgcmVzLCBsb25nIGZkaW4sIGxvbmcgZmRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0X3JvYnVzdF9saXN0KGxvbmcgcGlkLCBsb25nIGhlYWRfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbl9wdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRfcm9idXN0X2xpc3QobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBoZWFkX3B0ciwgbG9uZyBsZW5fcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRfcm9idXN0X2xpc3QobG9uZyBoZWFkLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldF9yb2J1c3RfbGlzdChsb25nIHJlcywgbG9uZyBoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGNwdShsb25nIGNwdSwgbG9uZyBub2RlLCBsb25nIGNhY2hlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Y3B1KGxvbmcgcmVzLCBsb25nIGNwdSwgbG9uZyBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjYWNoZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lnbmFsZmQobG9uZyB1ZmQsIGxvbmcgdXNlcl9tYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZW1hc2spOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWduYWxmZChsb25nIHJlcywgbG9uZyB1ZmQsIGxvbmcgdXNlcl9tYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemVtYXNrKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWduYWxmZDQobG9uZyB1ZmQsIGxvbmcgdXNlcl9tYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemVtYXNrLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lnbmFsZmQ0KGxvbmcgcmVzLCBsb25nIHVmZCwgbG9uZyB1c2VyX21hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemVtYXNrLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcmZkX2NyZWF0ZShsb25nIGNsb2NraWQsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcmZkX2NyZWF0ZShsb25nIHJlcywgbG9uZyBjbG9ja2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcmZkX3NldHRpbWUobG9uZyB1ZmQsIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXRtciwgbG9uZyBvdG1yKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJmZF9zZXR0aW1lKGxvbmcgcmVzLCBsb25nIHVmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgdXRtciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3Rtcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJmZF9nZXR0aW1lKGxvbmcgdWZkLCBsb25nIG90bXIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcmZkX2dldHRpbWUobG9uZyByZXMsIGxvbmcgdWZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvdG1yKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ldmVudGZkKGxvbmcgY291bnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ldmVudGZkKGxvbmcgcmVzLCBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ldmVudGZkMihsb25nIGNvdW50LCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXZlbnRmZDIobG9uZyByZXMsIGxvbmcgY291bnQsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZF9yZWFkZGlyKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfcmVhZGRpcihsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHNlbGVjdDYobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMsIGxvbmcgYXJnNCwgbG9uZyBhcmc1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHNlbGVjdDYobG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMywgbG9uZyBhcmc0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Bwb2xsKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczLCBsb25nIGFyZzQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcG9sbChsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMiwgbG9uZyBhcmczLCBsb25nIGFyZzQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Zhbm90aWZ5X2luaXQobG9uZyBmbGFncywgbG9uZyBldmVudF9mX2ZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmFub3RpZnlfaW5pdChsb25nIHJlcywgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGV2ZW50X2ZfZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Zhbm90aWZ5X21hcmsobG9uZyBmYW5vdGlmeV9mZCwgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWFzaywgbG9uZyBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGF0aG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mYW5vdGlmeV9tYXJrKGxvbmcgcmVzLCBsb25nIGZhbm90aWZ5X2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgbWFzaywgbG9uZyBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhdGhuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW5jZnMobG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5bmNmcyhsb25nIHJlcywgbG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGVyZl9ldmVudF9vcGVuKGxvbmcgYXR0cl91cHRyLCBsb25nIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjcHUsIGxvbmcgZ3JvdXBfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wZXJmX2V2ZW50X29wZW4obG9uZyByZXMsIGxvbmcgYXR0cl91cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwaWQsIGxvbmcgY3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cF9mZCwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbW1hcF9wZ29mZihsb25nIGFkZHIsIGxvbmcgbGVuLCBsb25nIHByb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzLCBsb25nIGZkLCBsb25nIHBnb2ZmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbW1hcF9wZ29mZihsb25nIHJlcywgbG9uZyBhZGRyLCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHByb3QsIGxvbmcgZmxhZ3MsIGxvbmcgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwZ29mZik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX21tYXAobG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfbW1hcChsb25nIHJlcywgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25hbWVfdG9faGFuZGxlX2F0KGxvbmcgZGZkLCBsb25nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBoYW5kbGUsIGxvbmcgbW50X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25hbWVfdG9faGFuZGxlX2F0KGxvbmcgcmVzLCBsb25nIGRmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuYW1lLCBsb25nIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtbnRfaWQsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb3Blbl9ieV9oYW5kbGVfYXQobG9uZyBtb3VudGRpcmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaGFuZGxlLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb3Blbl9ieV9oYW5kbGVfYXQobG9uZyByZXMsIGxvbmcgbW91bnRkaXJmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBoYW5kbGUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldG5zKGxvbmcgZmQsIGxvbmcgbnN0eXBlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0bnMobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbnN0eXBlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcm9jZXNzX3ZtX3JlYWR2KGxvbmcgcGlkLCBsb25nIGx2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxpb3ZjbnQsIGxvbmcgcnZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmlvdmNudCwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Byb2Nlc3Nfdm1fcmVhZHYobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbHZlYywgbG9uZyBsaW92Y250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcnZlYywgbG9uZyByaW92Y250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Byb2Nlc3Nfdm1fd3JpdGV2KGxvbmcgcGlkLCBsb25nIGx2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsaW92Y250LCBsb25nIHJ2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyByaW92Y250LCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJvY2Vzc192bV93cml0ZXYobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGx2ZWMsIGxvbmcgbGlvdmNudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBydmVjLCBsb25nIHJpb3ZjbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZvcmsoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZm9yayhsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdmZvcmsoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdmZvcmsobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ2FjdGlvbihsb25nIHNpZ251bSwgbG9uZyBhY3QsIGxvbmcgb2xkYWN0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lnYWN0aW9uKGxvbmcgcmVzLCBsb25nIHNpZ251bSwgbG9uZyBhY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9sZGFjdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lnYWN0aW9uKGxvbmcgc2lnbnVtLCBsb25nIGFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvbGRhY3QsIGxvbmcgc3opOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWdhY3Rpb24obG9uZyByZXMsIGxvbmcgc2lnbnVtLCBsb25nIGFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2xkYWN0LCBsb25nIHN6KTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gU0FOSVRJWkVSX0xJTlVYX1NZU0NBTExfSE9PS1NfSApkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvbHNhbl9pbnRlcmZhY2UuaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2xzYW5faW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiOGU3NQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2xzYW5faW50ZXJmYWNlLmgKQEAgLTAsMCArMSw4NCBAQAorLy89PT0tLSBzYW5pdGl6ZXIvbHNhbl9pbnRlcmZhY2UuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIExlYWtTYW5pdGl6ZXIuCisvLworLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIuCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworI2lmbmRlZiBTQU5JVElaRVJfTFNBTl9JTlRFUkZBQ0VfSAorI2RlZmluZSBTQU5JVElaRVJfTFNBTl9JTlRFUkZBQ0VfSAorCisjaW5jbHVkZSA8c2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisgIC8vIEFsbG9jYXRpb25zIG1hZGUgYmV0d2VlbiBjYWxscyB0byBfX2xzYW5fZGlzYWJsZSgpIGFuZCBfX2xzYW5fZW5hYmxlKCkgd2lsbAorICAvLyBiZSB0cmVhdGVkIGFzIG5vbi1sZWFrcy4gRGlzYWJsZS9lbmFibGUgcGFpcnMgbWF5IGJlIG5lc3RlZC4KKyAgdm9pZCBfX2xzYW5fZGlzYWJsZSgpOworICB2b2lkIF9fbHNhbl9lbmFibGUoKTsKKworICAvLyBUaGUgaGVhcCBvYmplY3QgaW50byB3aGljaCBwIHBvaW50cyB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBub24tbGVhay4KKyAgdm9pZCBfX2xzYW5faWdub3JlX29iamVjdChjb25zdCB2b2lkICpwKTsKKworICAvLyBNZW1vcnkgcmVnaW9ucyByZWdpc3RlcmVkIHRocm91Z2ggdGhpcyBpbnRlcmZhY2Ugd2lsbCBiZSB0cmVhdGVkIGFzIHNvdXJjZXMKKyAgLy8gb2YgbGl2ZSBwb2ludGVycyBkdXJpbmcgbGVhayBjaGVja2luZy4gVXNlZnVsIGlmIHlvdSBzdG9yZSBwb2ludGVycyBpbgorICAvLyBtYXBwZWQgbWVtb3J5LgorICAvLyBQb2ludHMgb2Ygbm90ZToKKyAgLy8gLSBfX2xzYW5fdW5yZWdpc3Rlcl9yb290X3JlZ2lvbigpIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgcG9pbnRlciBhbmQKKyAgLy8gc2l6ZSB0aGF0IGhhdmUgZWFybGllciBiZWVuIHBhc3NlZCB0byBfX2xzYW5fcmVnaXN0ZXJfcm9vdF9yZWdpb24oKQorICAvLyAtIExTYW4gd2lsbCBza2lwIGFueSBpbmFjY2Vzc2libGUgbWVtb3J5IHdoZW4gc2Nhbm5pbmcgYSByb290IHJlZ2lvbi4gRS5nLiwKKyAgLy8gaWYgeW91IG1hcCBtZW1vcnkgd2l0aGluIGEgbGFyZ2VyIHJlZ2lvbiB0aGF0IHlvdSBoYXZlIG1wcm90ZWN0J2VkLCB5b3UgY2FuCisgIC8vIHJlZ2lzdGVyIHRoZSBlbnRpcmUgbGFyZ2UgcmVnaW9uLgorICAvLyAtIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZS4gVGhpcyBpbnRlcmZhY2UgaXMKKyAgLy8gaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgYSBzbWFsbCBudW1iZXIgb2YgcmVsYXRpdmVseSBzdGF0aWMgcmVnaW9ucy4KKyAgdm9pZCBfX2xzYW5fcmVnaXN0ZXJfcm9vdF9yZWdpb24oY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUpOworICB2b2lkIF9fbHNhbl91bnJlZ2lzdGVyX3Jvb3RfcmVnaW9uKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplKTsKKworICAvLyBDaGVjayBmb3IgbGVha3Mgbm93LiBUaGlzIGZ1bmN0aW9uIGJlaGF2ZXMgaWRlbnRpY2FsbHkgdG8gdGhlIGRlZmF1bHQKKyAgLy8gZW5kLW9mLXByb2Nlc3MgbGVhayBjaGVjay4gSW4gcGFydGljdWxhciwgaXQgd2lsbCB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MgaWYKKyAgLy8gbGVha3MgYXJlIGZvdW5kIGFuZCB0aGUgZXhpdGNvZGUgcnVudGltZSBmbGFnIGlzIG5vbi16ZXJvLgorICAvLyBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIG5vIGVmZmVjdCBhbmQgZW5kLW9mLXByb2Nlc3MKKyAgLy8gbGVhayBjaGVjayB3aWxsIG5vdCBydW4uIEVmZmVjdGl2ZWx5LCBlbmQtb2YtcHJvY2VzcyBsZWFrIGNoZWNrIGlzIG1vdmVkIHRvCisgIC8vIHRoZSB0aW1lIG9mIGZpcnN0IGludm9jYXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KKyAgLy8gQnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGVhcmx5IGR1cmluZyBwcm9jZXNzIHNodXRkb3duLCB5b3UgY2FuIGluc3RydWN0CisgIC8vIExTYW4gdG8gaWdub3JlIHNodXRkb3duLW9ubHkgbGVha3Mgd2hpY2ggaGFwcGVuIGxhdGVyIG9uLgorICB2b2lkIF9fbHNhbl9kb19sZWFrX2NoZWNrKCk7CisKKyAgLy8gQ2hlY2sgZm9yIGxlYWtzIG5vdy4gUmV0dXJucyB6ZXJvIGlmIG5vIGxlYWtzIGhhdmUgYmVlbiBmb3VuZCBvciBpZiBsZWFrCisgIC8vIGRldGVjdGlvbiBpcyBkaXNhYmxlZCwgbm9uLXplcm8gb3RoZXJ3aXNlLgorICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgcmVwZWF0ZWRseSwgZS5nLiB0byBwZXJpb2RpY2FsbHkgY2hlY2sgYQorICAvLyBsb25nLXJ1bm5pbmcgcHJvY2Vzcy4gSXQgcHJpbnRzIGEgbGVhayByZXBvcnQgaWYgYXBwcm9wcmlhdGUsIGJ1dCBkb2VzIG5vdAorICAvLyB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MuIEl0IGRvZXMgbm90IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YKKyAgLy8gX19sc2FuX2RvX2xlYWtfY2hlY2soKSBvciB0aGUgZW5kLW9mLXByb2Nlc3MgbGVhayBjaGVjaywgYW5kIGlzIG5vdAorICAvLyBhZmZlY3RlZCBieSB0aGVtLgorICBpbnQgX19sc2FuX2RvX3JlY292ZXJhYmxlX2xlYWtfY2hlY2soKTsKKworICAvLyBUaGUgdXNlciBtYXkgb3B0aW9uYWxseSBwcm92aWRlIHRoaXMgZnVuY3Rpb24gdG8gZGlzYWxsb3cgbGVhayBjaGVja2luZworICAvLyBmb3IgdGhlIHByb2dyYW0gaXQgaXMgbGlua2VkIGludG8gKGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm9uLXplcm8pLiBUaGlzCisgIC8vIGZ1bmN0aW9uIG11c3QgYmUgZGVmaW5lZCBhcyByZXR1cm5pbmcgYSBjb25zdGFudCB2YWx1ZTsgYW55IGJlaGF2aW9yIGJleW9uZAorICAvLyB0aGF0IGlzIHVuc3VwcG9ydGVkLgorICBpbnQgX19sc2FuX2lzX3R1cm5lZF9vZmYoKTsKKworICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGFuZCBzaG91bGQgcmV0dXJuCisgIC8vIGEgc3RyaW5nIGNvbnRhaW5pbmcgTFNhbiBzdXBwcmVzc2lvbnMuCisgIGNvbnN0IGNoYXIgKl9fbHNhbl9kZWZhdWx0X3N1cHByZXNzaW9ucygpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisKK25hbWVzcGFjZSBfX2xzYW4geworY2xhc3MgU2NvcGVkRGlzYWJsZXIgeworIHB1YmxpYzoKKyAgU2NvcGVkRGlzYWJsZXIoKSB7IF9fbHNhbl9kaXNhYmxlKCk7IH0KKyAgflNjb3BlZERpc2FibGVyKCkgeyBfX2xzYW5fZW5hYmxlKCk7IH0KK307Cit9ICAvLyBuYW1lc3BhY2UgX19sc2FuCisjZW5kaWYKKworI2VuZGlmICAvLyBTQU5JVElaRVJfTFNBTl9JTlRFUkZBQ0VfSApkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvbXNhbl9pbnRlcmZhY2UuaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL21zYW5faW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2YTM3NgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL21zYW5faW50ZXJmYWNlLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8vPT09LS0gbXNhbl9pbnRlcmZhY2UuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBNZW1vcnlTYW5pdGl6ZXIuCisvLworLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIuCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworI2lmbmRlZiBNU0FOX0lOVEVSRkFDRV9ICisjZGVmaW5lIE1TQU5fSU5URVJGQUNFX0gKKworI2luY2x1ZGUgPHNhbml0aXplci9jb21tb25faW50ZXJmYWNlX2RlZnMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorICAvKiBTZXQgcmF3IG9yaWdpbiBmb3IgdGhlIG1lbW9yeSByYW5nZS4gKi8KKyAgdm9pZCBfX21zYW5fc2V0X29yaWdpbihjb25zdCB2b2xhdGlsZSB2b2lkICphLCBzaXplX3Qgc2l6ZSwgdWludDMyX3Qgb3JpZ2luKTsKKworICAvKiBHZXQgcmF3IG9yaWdpbiBmb3IgYW4gYWRkcmVzcy4gKi8KKyAgdWludDMyX3QgX19tc2FuX2dldF9vcmlnaW4oY29uc3Qgdm9sYXRpbGUgdm9pZCAqYSk7CisKKyAgLyogVGVzdCB0aGF0IHRoaXNfaWQgaXMgYSBkZXNjZW5kYW50IG9mIHByZXZfaWQgKG9yIHRoZXkgYXJlIHNpbXBseSBlcXVhbCkuCisgICAqICJkZXNjZW5kYW50IiBoZXJlIG1lYW5zIHRoZXkgYXJlIHBhcnQgb2YgdGhlIHNhbWUgY2hhaW4sIGNyZWF0ZWQgd2l0aAorICAgKiBfX21zYW5fY2hhaW5fb3JpZ2luLiAqLworICBpbnQgX19tc2FuX29yaWdpbl9pc19kZXNjZW5kYW50X29yX3NhbWUodWludDMyX3QgdGhpc19pZCwgdWludDMyX3QgcHJldl9pZCk7CisKKyAgLyogUmV0dXJucyBub24temVybyBpZiB0cmFja2luZyBvcmlnaW5zLiAqLworICBpbnQgX19tc2FuX2dldF90cmFja19vcmlnaW5zKCk7CisKKyAgLyogUmV0dXJucyB0aGUgb3JpZ2luIGlkIG9mIHRoZSBsYXRlc3QgVU1SIGluIHRoZSBjYWxsaW5nIHRocmVhZC4gKi8KKyAgdWludDMyX3QgX19tc2FuX2dldF91bXJfb3JpZ2luKCk7CisKKyAgLyogTWFrZSBtZW1vcnkgcmVnaW9uIGZ1bGx5IGluaXRpYWxpemVkICh3aXRob3V0IGNoYW5naW5nIGl0cyBjb250ZW50cykuICovCisgIHZvaWQgX19tc2FuX3VucG9pc29uKGNvbnN0IHZvbGF0aWxlIHZvaWQgKmEsIHNpemVfdCBzaXplKTsKKworICAvKiBNYWtlIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBmdWxseSBpbml0aWFsaXplZCAod2l0aG91dCBjaGFuZ2luZyBpdHMKKyAgICAgY29udGVudHMpLiAqLworICB2b2lkIF9fbXNhbl91bnBvaXNvbl9zdHJpbmcoY29uc3Qgdm9sYXRpbGUgY2hhciAqYSk7CisKKyAgLyogTWFrZSBtZW1vcnkgcmVnaW9uIGZ1bGx5IHVuaW5pdGlhbGl6ZWQgKHdpdGhvdXQgY2hhbmdpbmcgaXRzIGNvbnRlbnRzKS4KKyAgICAgVGhpcyBpcyBhIGxlZ2FjeSBpbnRlcmZhY2UgdGhhdCBkb2VzIG5vdCB1cGRhdGUgb3JpZ2luIGluZm9ybWF0aW9uLiBVc2UKKyAgICAgX19tc2FuX2FsbG9jYXRlZF9tZW1vcnkoKSBpbnN0ZWFkLiAqLworICB2b2lkIF9fbXNhbl9wb2lzb24oY29uc3Qgdm9sYXRpbGUgdm9pZCAqYSwgc2l6ZV90IHNpemUpOworCisgIC8qIE1ha2UgbWVtb3J5IHJlZ2lvbiBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZCAod2l0aG91dCBjaGFuZ2luZyBpdHMgY29udGVudHMpLgorICAgKi8KKyAgdm9pZCBfX21zYW5fcGFydGlhbF9wb2lzb24oY29uc3Qgdm9sYXRpbGUgdm9pZCAqZGF0YSwgdm9pZCAqc2hhZG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSk7CisKKyAgLyogUmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCAoYXQgbGVhc3QgcGFydGlhbGx5KSBwb2lzb25lZCBieXRlIGluIHRoZQorICAgICBtZW1vcnkgcmFuZ2UsIG9yIC0xIGlmIHRoZSB3aG9sZSByYW5nZSBpcyBnb29kLiAqLworICBpbnRwdHJfdCBfX21zYW5fdGVzdF9zaGFkb3coY29uc3Qgdm9sYXRpbGUgdm9pZCAqeCwgc2l6ZV90IHNpemUpOworCisgIC8qIENoZWNrcyB0aGF0IG1lbW9yeSByYW5nZSBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIHJlcG9ydHMgYW4gZXJyb3IgaWYgaXQKKyAgICogaXMgbm90LiAqLworICB2b2lkIF9fbXNhbl9jaGVja19tZW1faXNfaW5pdGlhbGl6ZWQoY29uc3Qgdm9sYXRpbGUgdm9pZCAqeCwgc2l6ZV90IHNpemUpOworCisgIC8qIEZvciB0ZXN0aW5nOgorICAgICBfX21zYW5fc2V0X2V4cGVjdF91bXIoMSk7CisgICAgIC4uLiBzb21lIGJ1Z2d5IGNvZGUgLi4uCisgICAgIF9fbXNhbl9zZXRfZXhwZWN0X3VtcigwKTsKKyAgICAgVGhlIGxhc3QgbGluZSB3aWxsIHZlcmlmeSB0aGF0IGEgVU1SIGhhcHBlbmVkLiAqLworICB2b2lkIF9fbXNhbl9zZXRfZXhwZWN0X3VtcihpbnQgZXhwZWN0X3Vtcik7CisKKyAgLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBrZWVwX2dvaW5nIGZsYWcuIE5vbi16ZXJvIHZhbHVlIG1lYW5zIGRvbid0IHRlcm1pbmF0ZQorICAgICBwcm9ncmFtIGV4ZWN1dGlvbiB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLiBUaGlzIHdpbGwgbm90IGFmZmVjdCBlcnJvciBpbgorICAgICBtb2R1bGVzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRob3V0IHRoZSBjb3JyZXNwb25kaW5nIGNvbXBpbGVyIGZsYWcuICovCisgIHZvaWQgX19tc2FuX3NldF9rZWVwX2dvaW5nKGludCBrZWVwX2dvaW5nKTsKKworICAvKiBQcmludCBzaGFkb3cgYW5kIG9yaWdpbiBmb3IgdGhlIG1lbW9yeSByYW5nZSB0byBzdGRlcnIgaW4gYSBodW1hbi1yZWFkYWJsZQorICAgICBmb3JtYXQuICovCisgIHZvaWQgX19tc2FuX3ByaW50X3NoYWRvdyhjb25zdCB2b2xhdGlsZSB2b2lkICp4LCBzaXplX3Qgc2l6ZSk7CisKKyAgLyogUHJpbnQgc2hhZG93IGZvciB0aGUgbWVtb3J5IHJhbmdlIHRvIHN0ZGVyciBpbiBhIG1pbmltYWxpc3RpYworICAgICBodW1hbi1yZWFkYWJsZSBmb3JtYXQuICovCisgIHZvaWQgX19tc2FuX2R1bXBfc2hhZG93KGNvbnN0IHZvbGF0aWxlIHZvaWQgKngsIHNpemVfdCBzaXplKTsKKworICAvKiBSZXR1cm5zIHRydWUgaWYgcnVubmluZyB1bmRlciBhIGR5bmFtaWMgdG9vbCAoRHluYW1vUmlvLWJhc2VkKS4gKi8KKyAgaW50ICBfX21zYW5faGFzX2R5bmFtaWNfY29tcG9uZW50KCk7CisKKyAgLyogVGVsbCBNU2FuIGFib3V0IG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgKGV4LjogY3VzdG9tIGFsbG9jYXRvcikuCisgICAgIE1lbW9yeSB3aWxsIGJlIG1hcmtlZCB1bmluaXRpYWxpemVkLCB3aXRoIG9yaWdpbiBhdCB0aGUgY2FsbCBzaXRlLiAqLworICB2b2lkIF9fbXNhbl9hbGxvY2F0ZWRfbWVtb3J5KGNvbnN0IHZvbGF0aWxlIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworICAvKiBUZWxsIE1TYW4gYWJvdXQgbmV3bHkgZGVzdHJveWVkIG1lbW9yeS4gTWFyayBtZW1vcnkgYXMgdW5pbml0aWFsaXplZC4gKi8KKyAgdm9pZCBfX3Nhbml0aXplcl9kdG9yX2NhbGxiYWNrKGNvbnN0IHZvbGF0aWxlIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworICAvKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHVzZXIgYW5kIHNob3VsZCByZXR1cm4KKyAgICAgYSBzdHJpbmcgY29udGFpbmluZyBNc2FuIHJ1bnRpbWUgb3B0aW9ucy4gU2VlIG1zYW5fZmxhZ3MuaCBmb3IgZGV0YWlscy4gKi8KKyAgY29uc3QgY2hhciogX19tc2FuX2RlZmF1bHRfb3B0aW9ucygpOworCisgIC8qIERlcHJlY2F0ZWQuIENhbGwgX19zYW5pdGl6ZXJfc2V0X2RlYXRoX2NhbGxiYWNrIGluc3RlYWQuICovCisgIHZvaWQgX19tc2FuX3NldF9kZWF0aF9jYWxsYmFjayh2b2lkICgqY2FsbGJhY2spKHZvaWQpKTsKKworICAvKiBVcGRhdGUgc2hhZG93IGZvciB0aGUgYXBwbGljYXRpb24gY29weSBvZiBzaXplIGJ5dGVzIGZyb20gc3JjIHRvIGRzdC4KKyAgICAgU3JjIGFuZCBkc3QgYXJlIGFwcGxpY2F0aW9uIGFkZHJlc3Nlcy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb3B5IHRoZQorICAgICBhY3R1YWwgYXBwbGljYXRpb24gbWVtb3J5LCBpdCBvbmx5IHVwZGF0ZXMgc2hhZG93IGFuZCBvcmlnaW4gZm9yIHN1Y2gKKyAgICAgY29weS4gU291cmNlIGFuZCBkZXN0aW5hdGlvbiByZWdpb25zIGNhbiBvdmVybGFwLiAqLworICB2b2lkIF9fbXNhbl9jb3B5X3NoYWRvdyhjb25zdCB2b2xhdGlsZSB2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci90c2FuX2ludGVyZmFjZV9hdG9taWMuaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL3RzYW5faW50ZXJmYWNlX2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTc3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci90c2FuX2ludGVyZmFjZV9hdG9taWMuaApAQCAtMCwwICsxLDIyMiBAQAorLy89PT0tLSB0c2FuX2ludGVyZmFjZV9hdG9taWMuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIFRocmVhZFNhbml0aXplciAoVFNhbiksIGEgcmFjZSBkZXRlY3Rvci4KKy8vCisvLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlciBmb3IgVFNhbiBhdG9taWNzLgorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKyNpZm5kZWYgVFNBTl9JTlRFUkZBQ0VfQVRPTUlDX0gKKyNkZWZpbmUgVFNBTl9JTlRFUkZBQ0VfQVRPTUlDX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIGNoYXIgICAgIF9fdHNhbl9hdG9taWM4OwordHlwZWRlZiBzaG9ydCAgICBfX3RzYW5fYXRvbWljMTY7ICAvLyBOT0xJTlQKK3R5cGVkZWYgaW50ICAgICAgX190c2FuX2F0b21pYzMyOwordHlwZWRlZiBsb25nICAgICBfX3RzYW5fYXRvbWljNjQ7ICAvLyBOT0xJTlQKKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKSBcCisgICAgfHwgKF9fY2xhbmdfbWFqb3JfXyAqIDEwMCArIF9fY2xhbmdfbWlub3JfXyA+PSAzMDIpCitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgX19pbnQxMjggX190c2FuX2F0b21pYzEyODsKKyMgZGVmaW5lIF9fVFNBTl9IQVNfSU5UMTI4IDEKKyNlbHNlCisjIGRlZmluZSBfX1RTQU5fSEFTX0lOVDEyOCAwCisjZW5kaWYKKworLy8gUGFydCBvZiBBQkksIGRvIG5vdCBjaGFuZ2UuCisvLyBodHRwOi8vbGx2bS5vcmcvdmlld3ZjL2xsdm0tcHJvamVjdC9saWJjeHgvdHJ1bmsvaW5jbHVkZS9hdG9taWM/dmlldz1tYXJrdXAKK3R5cGVkZWYgZW51bSB7CisgIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsYXhlZCwKKyAgX190c2FuX21lbW9yeV9vcmRlcl9jb25zdW1lLAorICBfX3RzYW5fbWVtb3J5X29yZGVyX2FjcXVpcmUsCisgIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsZWFzZSwKKyAgX190c2FuX21lbW9yeV9vcmRlcl9hY3FfcmVsLAorICBfX3RzYW5fbWVtb3J5X29yZGVyX3NlcV9jc3QKK30gX190c2FuX21lbW9yeV9vcmRlcjsKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfbG9hZChjb25zdCB2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfbG9hZChjb25zdCB2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMzIgX190c2FuX2F0b21pYzMyX2xvYWQoY29uc3Qgdm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9sb2FkKGNvbnN0IHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2xvYWQoY29uc3Qgdm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNlbmRpZgorCit2b2lkIF9fdHNhbl9hdG9taWM4X3N0b3JlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLCBfX3RzYW5fYXRvbWljOCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwordm9pZCBfX3RzYW5fYXRvbWljMTZfc3RvcmUodm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLCBfX3RzYW5fYXRvbWljMTYgdiwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK3ZvaWQgX190c2FuX2F0b21pYzMyX3N0b3JlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwgX190c2FuX2F0b21pYzMyIHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Cit2b2lkIF9fdHNhbl9hdG9taWM2NF9zdG9yZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsIF9fdHNhbl9hdG9taWM2NCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4Cit2b2lkIF9fdHNhbl9hdG9taWMxMjhfc3RvcmUodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwgX190c2FuX2F0b21pYzEyOCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2V4Y2hhbmdlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzE2IF9fdHNhbl9hdG9taWMxNl9leGNoYW5nZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9leGNoYW5nZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9leGNoYW5nZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCisgICAgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4CitfX3RzYW5fYXRvbWljMTI4IF9fdHNhbl9hdG9taWMxMjhfZXhjaGFuZ2Uodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2ZldGNoX2FkZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZmV0Y2hfYWRkKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMzIgX190c2FuX2F0b21pYzMyX2ZldGNoX2FkZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9mZXRjaF9hZGQodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2ZldGNoX2FkZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTI4ICphLAorICAgIF9fdHNhbl9hdG9taWMxMjggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisjZW5kaWYKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfZmV0Y2hfc3ViKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzE2IF9fdHNhbl9hdG9taWMxNl9mZXRjaF9zdWIodm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLAorICAgIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMzMiBfX3RzYW5fYXRvbWljMzJfZmV0Y2hfc3ViKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMzIgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljNjQgX190c2FuX2F0b21pYzY0X2ZldGNoX3N1Yih2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCisgICAgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4CitfX3RzYW5fYXRvbWljMTI4IF9fdHNhbl9hdG9taWMxMjhfZmV0Y2hfc3ViKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCisgICAgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNlbmRpZgorCitfX3RzYW5fYXRvbWljOCBfX3RzYW5fYXRvbWljOF9mZXRjaF9hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsCisgICAgX190c2FuX2F0b21pYzggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMTYgX190c2FuX2F0b21pYzE2X2ZldGNoX2FuZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9mZXRjaF9hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLAorICAgIF9fdHNhbl9hdG9taWMzMiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWM2NCBfX3RzYW5fYXRvbWljNjRfZmV0Y2hfYW5kKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKKyAgICBfX3RzYW5fYXRvbWljNjQgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisjaWYgX19UU0FOX0hBU19JTlQxMjgKK19fdHNhbl9hdG9taWMxMjggX190c2FuX2F0b21pYzEyOF9mZXRjaF9hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2ZldGNoX29yKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzE2IF9fdHNhbl9hdG9taWMxNl9mZXRjaF9vcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9mZXRjaF9vcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9mZXRjaF9vcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCisgICAgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4CitfX3RzYW5fYXRvbWljMTI4IF9fdHNhbl9hdG9taWMxMjhfZmV0Y2hfb3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2ZldGNoX3hvcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZmV0Y2hfeG9yKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMzIgX190c2FuX2F0b21pYzMyX2ZldGNoX3hvcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9mZXRjaF94b3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2ZldGNoX3hvcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTI4ICphLAorICAgIF9fdHNhbl9hdG9taWMxMjggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisjZW5kaWYKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfZmV0Y2hfbmFuZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZmV0Y2hfbmFuZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9mZXRjaF9uYW5kKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMzIgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljNjQgX190c2FuX2F0b21pYzY0X2ZldGNoX25hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2ZldGNoX25hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK2ludCBfX3RzYW5fYXRvbWljOF9jb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsCisgICAgX190c2FuX2F0b21pYzggKmMsIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sCisgICAgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK2ludCBfX3RzYW5fYXRvbWljMTZfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgKmMsIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzMyX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vhayh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyICpjLCBfX3RzYW5fYXRvbWljMzIgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbywKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIGZhaWxfbW8pOworaW50IF9fdHNhbl9hdG9taWM2NF9jb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCAqYywgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sCisgICAgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAoraW50IF9fdHNhbl9hdG9taWMxMjhfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCisgICAgX190c2FuX2F0b21pYzEyOCAqYywgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjZW5kaWYKKworaW50IF9fdHNhbl9hdG9taWM4X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4ICpjLCBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzE2X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgKmMsIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzMyX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMzIgKmMsIF9fdHNhbl9hdG9taWMzMiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzY0X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKKyAgICBfX3RzYW5fYXRvbWljNjQgKmMsIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjaWYgX19UU0FOX0hBU19JTlQxMjgKK2ludCBfX3RzYW5fYXRvbWljMTI4X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCisgICAgX190c2FuX2F0b21pYzEyOCAqYywgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjZW5kaWYKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsIF9fdHNhbl9hdG9taWM4IGMsIF9fdHNhbl9hdG9taWM4IHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLCBfX3RzYW5fYXRvbWljMTYgYywgX190c2FuX2F0b21pYzE2IHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK19fdHNhbl9hdG9taWMzMiBfX3RzYW5fYXRvbWljMzJfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLCBfX3RzYW5fYXRvbWljMzIgYywgX190c2FuX2F0b21pYzMyIHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK19fdHNhbl9hdG9taWM2NCBfX3RzYW5fYXRvbWljNjRfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLCBfX3RzYW5fYXRvbWljNjQgYywgX190c2FuX2F0b21pYzY0IHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2NvbXBhcmVfZXhjaGFuZ2VfdmFsKAorICAgIHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsIF9fdHNhbl9hdG9taWMxMjggYywgX190c2FuX2F0b21pYzEyOCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjZW5kaWYKKwordm9pZCBfX3RzYW5fYXRvbWljX3RocmVhZF9mZW5jZShfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK3ZvaWQgX190c2FuX2F0b21pY19zaWduYWxfZmVuY2UoX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gVFNBTl9JTlRFUkZBQ0VfQVRPTUlDX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2hhaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3NoYWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNWQyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3NoYWludHJpbi5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qPT09LS0tLSBzaGFpbnRyaW4uaCAtIFNIQSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHNoYWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19TSEFJTlRSSU5fSAorI2RlZmluZSBfX1NIQUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygic2hhIikpKQorCisjZGVmaW5lIF9tbV9zaGExcm5kczRfZXB1MzIoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2hhMXJuZHM0KChfX3Y0c2kpKF9fbTEyOGkpKFYxKSwgKF9fdjRzaSkoX19tMTI4aSkoVjIpLCAoTSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTFuZXh0ZV9lcHUzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zaGExbmV4dGUoKF9fdjRzaSlfX1gsIChfX3Y0c2kpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGExbXNnMV9lcHUzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zaGExbXNnMSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTFtc2cyX2VwdTMyKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NoYTFtc2cyKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2hhMjU2cm5kczJfZXB1MzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZLCBfX20xMjhpIF9fWikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NoYTI1NnJuZHMyKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSwgKF9fdjRzaSlfX1opOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTI1Nm1zZzFfZXB1MzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2hhMjU2bXNnMSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTI1Nm1zZzJfZXB1MzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2hhMjU2bXNnMigoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX1NIQUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3NtbWludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zbW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhhYjAzCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zbW1pbnRyaW4uaApAQCAtMCwwICsxLDUwNyBAQAorLyo9PT0tLS0tIHNtbWludHJpbi5oIC0gU1NFNCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfU01NSU5UUklOX0gKKyNkZWZpbmUgX1NNTUlOVFJJTl9ICisKKyNpbmNsdWRlIDx0bW1pbnRyaW4uaD4KKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzc2U0LjEiKSkpCisKKy8qIFNTRTQgUm91bmRpbmcgbWFjcm9zLiAqLworI2RlZmluZSBfTU1fRlJPVU5EX1RPX05FQVJFU1RfSU5UICAgIDB4MDAKKyNkZWZpbmUgX01NX0ZST1VORF9UT19ORUdfSU5GICAgICAgICAweDAxCisjZGVmaW5lIF9NTV9GUk9VTkRfVE9fUE9TX0lORiAgICAgICAgMHgwMgorI2RlZmluZSBfTU1fRlJPVU5EX1RPX1pFUk8gICAgICAgICAgIDB4MDMKKyNkZWZpbmUgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OICAgICAweDA0CisKKyNkZWZpbmUgX01NX0ZST1VORF9SQUlTRV9FWEMgICAgICAgICAweDAwCisjZGVmaW5lIF9NTV9GUk9VTkRfTk9fRVhDICAgICAgICAgICAgMHgwOAorCisjZGVmaW5lIF9NTV9GUk9VTkRfTklOVCAgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfVE9fTkVBUkVTVF9JTlQpCisjZGVmaW5lIF9NTV9GUk9VTkRfRkxPT1IgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfVE9fTkVHX0lORikKKyNkZWZpbmUgX01NX0ZST1VORF9DRUlMICAgICAgKF9NTV9GUk9VTkRfUkFJU0VfRVhDIHwgX01NX0ZST1VORF9UT19QT1NfSU5GKQorI2RlZmluZSBfTU1fRlJPVU5EX1RSVU5DICAgICAoX01NX0ZST1VORF9SQUlTRV9FWEMgfCBfTU1fRlJPVU5EX1RPX1pFUk8pCisjZGVmaW5lIF9NTV9GUk9VTkRfUklOVCAgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKyNkZWZpbmUgX01NX0ZST1VORF9ORUFSQllJTlQgKF9NTV9GUk9VTkRfTk9fRVhDIHwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9jZWlsX3BzKFgpICAgICAgIF9tbV9yb3VuZF9wcygoWCksIF9NTV9GUk9VTkRfQ0VJTCkKKyNkZWZpbmUgX21tX2NlaWxfcGQoWCkgICAgICAgX21tX3JvdW5kX3BkKChYKSwgX01NX0ZST1VORF9DRUlMKQorI2RlZmluZSBfbW1fY2VpbF9zcyhYLCBZKSAgICBfbW1fcm91bmRfc3MoKFgpLCAoWSksIF9NTV9GUk9VTkRfQ0VJTCkKKyNkZWZpbmUgX21tX2NlaWxfc2QoWCwgWSkgICAgX21tX3JvdW5kX3NkKChYKSwgKFkpLCBfTU1fRlJPVU5EX0NFSUwpCisKKyNkZWZpbmUgX21tX2Zsb29yX3BzKFgpICAgICAgX21tX3JvdW5kX3BzKChYKSwgX01NX0ZST1VORF9GTE9PUikKKyNkZWZpbmUgX21tX2Zsb29yX3BkKFgpICAgICAgX21tX3JvdW5kX3BkKChYKSwgX01NX0ZST1VORF9GTE9PUikKKyNkZWZpbmUgX21tX2Zsb29yX3NzKFgsIFkpICAgX21tX3JvdW5kX3NzKChYKSwgKFkpLCBfTU1fRlJPVU5EX0ZMT09SKQorI2RlZmluZSBfbW1fZmxvb3Jfc2QoWCwgWSkgICBfbW1fcm91bmRfc2QoKFgpLCAoWSksIF9NTV9GUk9VTkRfRkxPT1IpCisKKyNkZWZpbmUgX21tX3JvdW5kX3BzKFgsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JvdW5kcHMoKF9fdjRzZikoX19tMTI4KShYKSwgKE0pKTsgfSkKKworI2RlZmluZSBfbW1fcm91bmRfc3MoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcm91bmRzcygoX192NHNmKShfX20xMjgpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFkpLCAoTSkpOyB9KQorCisjZGVmaW5lIF9tbV9yb3VuZF9wZChYLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcm91bmRwZCgoX192MmRmKShfX20xMjhkKShYKSwgKE0pKTsgfSkKKworI2RlZmluZSBfbW1fcm91bmRfc2QoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JvdW5kc2QoKF9fdjJkZikoX19tMTI4ZCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShZKSwgKE0pKTsgfSkKKworLyogU1NFNCBQYWNrZWQgQmxlbmRpbmcgSW50cmluc2ljcy4gICovCisjZGVmaW5lIF9tbV9ibGVuZF9wZChWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKShfX20xMjhkKShWMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVjIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyAyIDogMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAyKSA/IDMgOiAxKSk7IH0pCisKKyNkZWZpbmUgX21tX2JsZW5kX3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZikoX19tMTI4KShWMSksIChfX3Y0c2YpKF9fbTEyOCkoVjIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAxKSA/IDQgOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyA1IDogMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gNiA6IDIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA4KSA/IDcgOiAzKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYmxlbmR2X3BkIChfX20xMjhkIF9fVjEsIF9fbTEyOGQgX19WMiwgX19tMTI4ZCBfX00pCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYmxlbmR2cGQgKChfX3YyZGYpX19WMSwgKF9fdjJkZilfX1YyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9ibGVuZHZfcHMgKF9fbTEyOCBfX1YxLCBfX20xMjggX19WMiwgX19tMTI4IF9fTSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2JsZW5kdnBzICgoX192NHNmKV9fVjEsIChfX3Y0c2YpX19WMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYmxlbmR2X2VwaTggKF9fbTEyOGkgX19WMSwgX19tMTI4aSBfX1YyLCBfX20xMjhpIF9fTSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYmxlbmR2YjEyOCAoKF9fdjE2cWkpX19WMSwgKF9fdjE2cWkpX19WMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19NKTsKK30KKworI2RlZmluZSBfbW1fYmxlbmRfZXBpMTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSkoX19tMTI4aSkoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKFYyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gIDggOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gIDkgOiAxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gMTAgOiAyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gMTEgOiAzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MTApID8gMTIgOiA0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MjApID8gMTMgOiA1KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4NDApID8gMTQgOiA2KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4ODApID8gMTUgOiA3KSk7IH0pCisKKy8qIFNTRTQgRHdvcmQgTXVsdGlwbHkgSW5zdHJ1Y3Rpb25zLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bGxvX2VwaTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSAoKF9fdjRzdSlfX1YxICogKF9fdjRzdSlfX1YyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsX2VwaTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHExMjggKChfX3Y0c2kpX19WMSwgKF9fdjRzaSlfX1YyKTsKK30KKworLyogU1NFNCBGbG9hdGluZyBQb2ludCBEb3QgUHJvZHVjdCBJbnN0cnVjdGlvbnMuICAqLworI2RlZmluZSBfbW1fZHBfcHMoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2RwcHMoKF9fdjRzZikoX19tMTI4KShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoWSksIChNKSk7IH0pCisKKyNkZWZpbmUgX21tX2RwX3BkKFgsIFksIE0pIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kcHBkKChfX3YyZGYpKF9fbTEyOGQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFkpLCAoTSkpOyB9KQorCisvKiBTU0U0IFN0cmVhbWluZyBMb2FkIEhpbnQgSW5zdHJ1Y3Rpb24uICAqLworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RyZWFtX2xvYWRfc2kxMjggKF9fbTEyOGkgY29uc3QgKl9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9tb3ZudGRxYSAoKGNvbnN0IF9fdjJkaSAqKSBfX1YpOworfQorCisvKiBTU0U0IFBhY2tlZCBJbnRlZ2VyIE1pbi9NYXggSW5zdHJ1Y3Rpb25zLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9lcGk4IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc2IxMjggKChfX3YxNnFpKSBfX1YxLCAoX192MTZxaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcGk4IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2IxMjggKChfX3YxNnFpKSBfX1YxLCAoX192MTZxaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9lcHUxNiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnV3MTI4ICgoX192OGhpKSBfX1YxLCAoX192OGhpKSBfX1YyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X2VwdTE2IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXcxMjggKChfX3Y4aGkpIF9fVjEsIChfX3Y4aGkpIF9fVjIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyAgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fZXBpMzIgKF9fbTEyOGkgX19WMSwgX19tMTI4aSBfX1YyKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zZDEyOCAoKF9fdjRzaSkgX19WMSwgKF9fdjRzaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcGkzMiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNkMTI4ICgoX192NHNpKSBfX1YxLCAoX192NHNpKSBfX1YyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX2VwdTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludWQxMjgoKF9fdjRzaSkgX19WMSwgKF9fdjRzaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcHUzMiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHVkMTI4KChfX3Y0c2kpIF9fVjEsIChfX3Y0c2kpIF9fVjIpOworfQorCisvKiBTU0U0IEluc2VydGlvbiBhbmQgRXh0cmFjdGlvbiBmcm9tIFhNTSBSZWdpc3RlciBJbnN0cnVjdGlvbnMuICAqLworI2RlZmluZSBfbW1faW5zZXJ0X3BzKFgsIFksIE4pIF9fYnVpbHRpbl9pYTMyX2luc2VydHBzMTI4KChYKSwgKFkpLCAoTikpCisjZGVmaW5lIF9tbV9leHRyYWN0X3BzKFgsIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IHVuaW9uIHsgaW50IF9faTsgZmxvYXQgX19mOyB9IF9fdDsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdjRzZiBfX2EgPSAoX192NHNmKShfX20xMjgpKFgpOyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3QuX19mID0gX19hWyhOKSAmIDNdOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Ll9faTt9KSkKKworLyogTWlzY2VsbGFuZW91cyBpbnNlcnQgYW5kIGV4dHJhY3QgbWFjcm9zLiAgKi8KKy8qIEV4dHJhY3QgYSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0IGZyb20gWCBhdCBpbmRleCBOIGludG8gRC4gICovCisjZGVmaW5lIF9NTV9FWFRSQUNUX0ZMT0FUKEQsIFgsIE4pIChfX2V4dGVuc2lvbl9fICh7IF9fdjRzZiBfX2EgPSAoX192NHNmKShYKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEKSA9IF9fYVtOXTsgfSkpCisKKy8qIE9yIHRvZ2V0aGVyIDIgc2V0cyBvZiBpbmRleGVzIChYIGFuZCBZKSB3aXRoIHRoZSB6ZXJvaW5nIGJpdHMgKFopIHRvIGNyZWF0ZQorICAgYW4gaW5kZXggc3VpdGFibGUgZm9yIF9tbV9pbnNlcnRfcHMuICAqLworI2RlZmluZSBfTU1fTUtfSU5TRVJUUFNfTkRYKFgsIFksIFopICgoKFgpIDw8IDYpIHwgKChZKSA8PCA0KSB8IChaKSkKKworLyogRXh0cmFjdCBhIGZsb2F0IGZyb20gWCBhdCBpbmRleCBOIGludG8gdGhlIGZpcnN0IGluZGV4IG9mIHRoZSByZXR1cm4uICAqLworI2RlZmluZSBfTU1fUElDS19PVVRfUFMoWCwgTikgX21tX2luc2VydF9wcyAoX21tX3NldHplcm9fcHMoKSwgKFgpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9NS19JTlNFUlRQU19ORFgoKE4pLCAwLCAweDBlKSkKKworLyogSW5zZXJ0IGludCBpbnRvIHBhY2tlZCBpbnRlZ2VyIGFycmF5IGF0IGluZGV4LiAgKi8KKyNkZWZpbmUgX21tX2luc2VydF9lcGk4KFgsIEksIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IF9fdjE2cWkgX19hID0gKF9fdjE2cWkpKF9fbTEyOGkpKFgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDE1XSA9IChJKTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tMTI4aSlfX2E7fSkpCisjZGVmaW5lIF9tbV9pbnNlcnRfZXBpMzIoWCwgSSwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyBfX3Y0c2kgX19hID0gKF9fdjRzaSkoX19tMTI4aSkoWCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDNdID0gKEkpOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX20xMjhpKV9fYTt9KSkKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9tbV9pbnNlcnRfZXBpNjQoWCwgSSwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyBfX3YyZGkgX19hID0gKF9fdjJkaSkoX19tMTI4aSkoWCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDFdID0gKEkpOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX20xMjhpKV9fYTt9KSkKKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisKKy8qIEV4dHJhY3QgaW50IGZyb20gcGFja2VkIGludGVnZXIgYXJyYXkgYXQgaW5kZXguICBUaGlzIHJldHVybnMgdGhlIGVsZW1lbnQKKyAqIGFzIGEgemVybyBleHRlbmRlZCB2YWx1ZSwgc28gaXQgaXMgdW5zaWduZWQuCisgKi8KKyNkZWZpbmUgX21tX2V4dHJhY3RfZXBpOChYLCBOKSAoX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsgX192MTZxaSBfX2EgPSAoX192MTZxaSkoX19tMTI4aSkoWCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkodW5zaWduZWQgY2hhcikgX19hWyhOKSAmIDE1XTt9KSkKKyNkZWZpbmUgX21tX2V4dHJhY3RfZXBpMzIoWCwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsgX192NHNpIF9fYSA9IChfX3Y0c2kpKF9fbTEyOGkpKFgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KV9fYVsoTikgJiAzXTt9KSkKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9tbV9leHRyYWN0X2VwaTY0KFgsIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IF9fdjJkaSBfX2EgPSAoX192MmRpKShfX20xMjhpKShYKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZylfX2FbKE4pICYgMV07fSkpCisjZW5kaWYgLyogX194ODZfNjQgKi8KKworLyogU1NFNCAxMjgtYml0IFBhY2tlZCBJbnRlZ2VyIENvbXBhcmlzb25zLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0el9zaTEyOChfX20xMjhpIF9fTSwgX19tMTI4aSBfX1YpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdHoxMjgoKF9fdjJkaSlfX00sIChfX3YyZGkpX19WKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3RjX3NpMTI4KF9fbTEyOGkgX19NLCBfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3B0ZXN0YzEyOCgoX192MmRpKV9fTSwgKF9fdjJkaSlfX1YpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdG56Y19zaTEyOChfX20xMjhpIF9fTSwgX19tMTI4aSBfX1YpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdG56YzEyOCgoX192MmRpKV9fTSwgKF9fdjJkaSlfX1YpOworfQorCisjZGVmaW5lIF9tbV90ZXN0X2FsbF9vbmVzKFYpIF9tbV90ZXN0Y19zaTEyOCgoViksIF9tbV9jbXBlcV9lcGkzMigoViksIChWKSkpCisjZGVmaW5lIF9tbV90ZXN0X21peF9vbmVzX3plcm9zKE0sIFYpIF9tbV90ZXN0bnpjX3NpMTI4KChNKSwgKFYpKQorI2RlZmluZSBfbW1fdGVzdF9hbGxfemVyb3MoTSwgVikgX21tX3Rlc3R6X3NpMTI4ICgoTSksIChWKSkKKworLyogU1NFNCA2NC1iaXQgUGFja2VkIEludGVnZXIgQ29tcGFyaXNvbnMuICAqLworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcGk2NChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MmRpKV9fVjEgPT0gKF9fdjJkaSlfX1YyKTsKK30KKworLyogU1NFNCBQYWNrZWQgSW50ZWdlciBTaWduLUV4dGVuc2lvbi4gICovCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaThfZXBpMTYoX19tMTI4aSBfX1YpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpLCBfX3Y4aGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaThfZXBpMzIoX19tMTI4aSBfX1YpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEsIDIsIDMpLCBfX3Y0c2kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaThfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEpLCBfX3YyZGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTE2X2VwaTMyKF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSlfX1YsIChfX3Y4aGkpX19WLCAwLCAxLCAyLCAzKSwgX192NHNpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGkxNl9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpX19WLCAoX192OGhpKV9fViwgMCwgMSksIF9fdjJkaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXBpMzJfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKV9fViwgKF9fdjRzaSlfX1YsIDAsIDEpLCBfX3YyZGkpOworfQorCisvKiBTU0U0IFBhY2tlZCBJbnRlZ2VyIFplcm8tRXh0ZW5zaW9uLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1OF9lcGkxNihfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnF1KV9fViwgKF9fdjE2cXUpX19WLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KSwgX192OGhpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcHU4X2VwaTMyKF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXUpX19WLCAoX192MTZxdSlfX1YsIDAsIDEsIDIsIDMpLCBfX3Y0c2kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwdThfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxdSlfX1YsIChfX3YxNnF1KV9fViwgMCwgMSksIF9fdjJkaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1MTZfZXBpMzIoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGh1KV9fViwgKF9fdjhodSlfX1YsIDAsIDEsIDIsIDMpLCBfX3Y0c2kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwdTE2X2VwaTY0KF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhodSlfX1YsIChfX3Y4aHUpX19WLCAwLCAxKSwgX192MmRpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcHUzMl9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c3UpX19WLCAoX192NHN1KV9fViwgMCwgMSksIF9fdjJkaSk7Cit9CisKKy8qIFNTRTQgUGFjayB3aXRoIFVuc2lnbmVkIFNhdHVyYXRpb24uICAqLworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wYWNrdXNfZXBpMzIoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFja3VzZHcxMjgoKF9fdjRzaSlfX1YxLCAoX192NHNpKV9fVjIpOworfQorCisvKiBTU0U0IE11bHRpcGxlIFBhY2tlZCBTdW1zIG9mIEFic29sdXRlIERpZmZlcmVuY2UuICAqLworI2RlZmluZSBfbW1fbXBzYWRid19lcHU4KFgsIFksIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfbXBzYWRidzEyOCgoX192MTZxaSkoX19tMTI4aSkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKFkpLCAoTSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbnBvc19lcHUxNihfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9waG1pbnBvc3V3MTI4KChfX3Y4aGkpX19WKTsKK30KKworLyogSGFuZGxlIHRoZSBzc2U0LjIgZGVmaW5pdGlvbnMgaGVyZS4gKi8KKworLyogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIG5vcm1hbGx5IGluIG5tbWludHJpbi5oLCBidXQgZ2NjIHB1dHMgdGhlbSBpbiBoZXJlCisgICBzbyB3ZSdsbCBkbyB0aGUgc2FtZS4gICovCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygic3NlNC4yIikpKQorCisvKiBUaGVzZSBzcGVjaWZ5IHRoZSB0eXBlIG9mIGRhdGEgdGhhdCB3ZSdyZSBjb21wYXJpbmcuICAqLworI2RlZmluZSBfU0lERF9VQllURV9PUFMgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgX1NJRERfVVdPUkRfT1BTICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIF9TSUREX1NCWVRFX09QUyAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBfU0lERF9TV09SRF9PUFMgICAgICAgICAgICAgICAgIDB4MDMKKworLyogVGhlc2Ugc3BlY2lmeSB0aGUgdHlwZSBvZiBjb21wYXJpc29uIG9wZXJhdGlvbi4gICovCisjZGVmaW5lIF9TSUREX0NNUF9FUVVBTF9BTlkgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBfU0lERF9DTVBfUkFOR0VTICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgX1NJRERfQ01QX0VRVUFMX0VBQ0ggICAgICAgICAgICAweDA4CisjZGVmaW5lIF9TSUREX0NNUF9FUVVBTF9PUkRFUkVEICAgICAgICAgMHgwYworCisvKiBUaGVzZSBtYWNyb3Mgc3BlY2lmeSB0aGUgcG9sYXJpdHkgb2YgdGhlIG9wZXJhdGlvbi4gICovCisjZGVmaW5lIF9TSUREX1BPU0lUSVZFX1BPTEFSSVRZICAgICAgICAgMHgwMAorI2RlZmluZSBfU0lERF9ORUdBVElWRV9QT0xBUklUWSAgICAgICAgIDB4MTAKKyNkZWZpbmUgX1NJRERfTUFTS0VEX1BPU0lUSVZFX1BPTEFSSVRZICAweDIwCisjZGVmaW5lIF9TSUREX01BU0tFRF9ORUdBVElWRV9QT0xBUklUWSAgMHgzMAorCisvKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgaW4gX21tX2NtcFhzdHJpKCkgdG8gc3BlY2lmeSB0aGUgcmV0dXJuLiAgKi8KKyNkZWZpbmUgX1NJRERfTEVBU1RfU0lHTklGSUNBTlQgICAgICAgICAweDAwCisjZGVmaW5lIF9TSUREX01PU1RfU0lHTklGSUNBTlQgICAgICAgICAgMHg0MAorCisvKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgaW4gX21tX2NtcFhzdHJpKCkgdG8gc3BlY2lmeSB0aGUgcmV0dXJuLiAgKi8KKyNkZWZpbmUgX1NJRERfQklUX01BU0sgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIF9TSUREX1VOSVRfTUFTSyAgICAgICAgICAgICAgICAgMHg0MAorCisvKiBTU0U0LjIgUGFja2VkIENvbXBhcmlzb24gSW50cmluc2ljcy4gICovCisjZGVmaW5lIF9tbV9jbXBpc3RybShBLCBCLCBNKSBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BjbXBpc3RybTEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCisjZGVmaW5lIF9tbV9jbXBpc3RyaShBLCBCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoQiksIChpbnQpKE0pKQorCisjZGVmaW5lIF9tbV9jbXBlc3RybShBLCBMQSwgQiwgTEIsIE0pIFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGNtcGVzdHJtMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgKGludCkoTEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoQiksIChpbnQpKExCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoTSkpCisjZGVmaW5lIF9tbV9jbXBlc3RyaShBLCBMQSwgQiwgTEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21wZXN0cmkxMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoTSkpCisKKy8qIFNTRTQuMiBQYWNrZWQgQ29tcGFyaXNvbiBJbnRyaW5zaWNzIGFuZCBFRmxhZyBSZWFkaW5nLiAgKi8KKyNkZWZpbmUgX21tX2NtcGlzdHJhKEEsIEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21waXN0cmlhMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGlzdHJjKEEsIEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21waXN0cmljMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGlzdHJvKEEsIEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21waXN0cmlvMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGlzdHJzKEEsIEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21waXN0cmlzMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGlzdHJ6KEEsIEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21waXN0cml6MTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKKworI2RlZmluZSBfbW1fY21wZXN0cmEoQSwgTEEsIEIsIExCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpYTEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorI2RlZmluZSBfbW1fY21wZXN0cmMoQSwgTEEsIEIsIExCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpYzEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorI2RlZmluZSBfbW1fY21wZXN0cm8oQSwgTEEsIEIsIExCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpbzEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorI2RlZmluZSBfbW1fY21wZXN0cnMoQSwgTEEsIEIsIExCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpczEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorI2RlZmluZSBfbW1fY21wZXN0cnooQSwgTEEsIEIsIExCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpejEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorCisvKiBTU0U0LjIgQ29tcGFyZSBQYWNrZWQgRGF0YSAtLSBHcmVhdGVyIFRoYW4uICAqLworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9lcGk2NChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MmRpKV9fVjEgPiAoX192MmRpKV9fVjIpOworfQorCisvKiBTU0U0LjIgQWNjdW11bGF0ZSBDUkMzMi4gICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3JjMzJfdTgodW5zaWduZWQgaW50IF9fQywgdW5zaWduZWQgY2hhciBfX0QpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jcmMzMnFpKF9fQywgX19EKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NyYzMyX3UxNih1bnNpZ25lZCBpbnQgX19DLCB1bnNpZ25lZCBzaG9ydCBfX0QpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jcmMzMmhpKF9fQywgX19EKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NyYzMyX3UzMih1bnNpZ25lZCBpbnQgX19DLCB1bnNpZ25lZCBpbnQgX19EKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3JjMzJzaShfX0MsIF9fRCk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3JjMzJfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX0MsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0QpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jcmMzMmRpKF9fQywgX19EKTsKK30KKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2lmZGVmIF9fUE9QQ05UX18KKyNpbmNsdWRlIDxwb3BjbnRpbnRyaW4uaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX1NNTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGFsaWduLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGFsaWduLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczOGQxMgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYWxpZ24uaApAQCAtMCwwICsxLDM1IEBACisvKj09PS0tLS0gc3RkYWxpZ24uaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgYWxpZ25tZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1NUREFMSUdOX0gKKyNkZWZpbmUgX19TVERBTElHTl9ICisKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgYWxpZ25hcyBfQWxpZ25hcworI2RlZmluZSBhbGlnbm9mIF9BbGlnbm9mCisjZW5kaWYKKworI2RlZmluZSBfX2FsaWduYXNfaXNfZGVmaW5lZCAxCisjZGVmaW5lIF9fYWxpZ25vZl9pc19kZWZpbmVkIDEKKworI2VuZGlmIC8qIF9fU1REQUxJR05fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRhcmcuaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYXJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3ZTE4MwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYXJnLmgKQEAgLTAsMCArMSw1MiBAQAorLyo9PT0tLS0tIHN0ZGFyZy5oIC0gVmFyaWFibGUgYXJndW1lbnQgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBFbGkgRnJpZWRtYW4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19TVERBUkdfSAorI2RlZmluZSBfX1NUREFSR19ICisKKyNpZm5kZWYgX1ZBX0xJU1QKK3R5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgdmFfbGlzdDsKKyNkZWZpbmUgX1ZBX0xJU1QKKyNlbmRpZgorI2RlZmluZSB2YV9zdGFydChhcCwgcGFyYW0pIF9fYnVpbHRpbl92YV9zdGFydChhcCwgcGFyYW0pCisjZGVmaW5lIHZhX2VuZChhcCkgICAgICAgICAgX19idWlsdGluX3ZhX2VuZChhcCkKKyNkZWZpbmUgdmFfYXJnKGFwLCB0eXBlKSAgICBfX2J1aWx0aW5fdmFfYXJnKGFwLCB0eXBlKQorCisvKiBHQ0MgYWx3YXlzIGRlZmluZXMgX192YV9jb3B5LCBidXQgZG9lcyBub3QgZGVmaW5lIHZhX2NvcHkgdW5sZXNzIGluIGM5OSBtb2RlCisgKiBvciAtYW5zaSBpcyBub3Qgc3BlY2lmaWVkLCBzaW5jZSBpdCB3YXMgbm90IHBhcnQgb2YgQzkwLgorICovCisjZGVmaW5lIF9fdmFfY29weShkLHMpIF9fYnVpbHRpbl92YV9jb3B5KGQscykKKworI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMIHx8ICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKyNkZWZpbmUgdmFfY29weShkZXN0LCBzcmMpICBfX2J1aWx0aW5fdmFfY29weShkZXN0LCBzcmMpCisjZW5kaWYKKworLyogSGFjayByZXF1aXJlZCB0byBtYWtlIHN0YW5kYXJkIGhlYWRlcnMgd29yaywgYXQgbGVhc3Qgb24gVWJ1bnR1ICovCisjaWZuZGVmIF9fR05VQ19WQV9MSVNUCisjZGVmaW5lIF9fR05VQ19WQV9MSVNUIDEKKyNlbmRpZgordHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKKworI2VuZGlmIC8qIF9fU1REQVJHX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYXRvbWljLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGF0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTczYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGF0b21pYy5oCkBAIC0wLDAgKzEsNTQ2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBFZCBTY2hvdXRlbiA8ZWRARnJlZUJTRC5vcmc+CisgKiAgICAgICAgICAgICAgICAgICAgRGF2aWQgQ2hpc25hbGwgPHRoZXJhdmVuQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmIF9TVERBVE9NSUNfSF8KKyNkZWZpbmUJX1NUREFUT01JQ19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMICYmIGRlZmluZWQoX1VTSU5HX0xJQkNYWCkKKyMgaWZkZWYgX19jbGFuZ19fCisjICBpZiBfX2hhc19mZWF0dXJlKGN4eF9hdG9taWMpCisjICAgZGVmaW5lIF9TVERBVE9NSUNfSEFWRV9BVE9NSUMKKyMgIGVuZGlmCisjIGVsc2UgLyogZ2NjICovCisjICBkZWZpbmUgX1NUREFUT01JQ19IQVZFX0FUT01JQworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfU1REQVRPTUlDX0hBVkVfQVRPTUlDCisKKy8qIFdlIGhhdmUgYSB1c2FibGUgQysrIDxhdG9taWM+OyB1c2UgaXQgaW5zdGVhZC4gICovCisKKyNpbmNsdWRlIDxhdG9taWM+CisKKyN1bmRlZiBfQXRvbWljCisgICAgICAgIC8qIEFsc28gZGVmaW5lZCBieSA8YXRvbWljPiBmb3IgZ2NjLiAgQnV0IG5vdCB1c2VkIGluIG1hY3Jvcy4gKi8KKyAgICAgICAgLyogQWxzbyBhIGNsYW5nIGludHJpbnNpYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBTaG91bGQgbm90IGJlIHVzZWQgYnkgY2xpZW50IGNvZGUgYmVmb3JlIHRoaXMgZmlsZSBpcyAgICAgICovCisgICAgICAgIC8qIGluY2x1ZGVkLiAgVGhlIGRlZmluaXRpb25zIGluIDxhdG9taWM+IHRoZW1zZWx2ZXMgc2VlICAgICAgKi8KKyAgICAgICAgLyogdGhlIG9sZCBkZWZpbml0aW9uLCBhcyB0aGV5IHNob3VsZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBDbGllbnQgY29kZSBzZWVzIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbi4gICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgX0F0b21pYyh0KSBzdGQ6OmF0b21pYzx0PgorCit1c2luZyBzdGQ6OmF0b21pY19pc19sb2NrX2ZyZWU7Cit1c2luZyBzdGQ6OmF0b21pY19pbml0OwordXNpbmcgc3RkOjphdG9taWNfc3RvcmU7Cit1c2luZyBzdGQ6OmF0b21pY19zdG9yZV9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2xvYWQ7Cit1c2luZyBzdGQ6OmF0b21pY19sb2FkX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZXhjaGFuZ2U7Cit1c2luZyBzdGQ6OmF0b21pY19leGNoYW5nZV9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nOwordXNpbmcgc3RkOjphdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWs7Cit1c2luZyBzdGQ6OmF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9hZGQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9zdWI7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9vcjsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX29yX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfeG9yOwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfYW5kOwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfdGhyZWFkX2ZlbmNlOwordXNpbmcgc3RkOjphdG9taWNfc2lnbmFsX2ZlbmNlOworCit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcjsKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQ7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lOwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZTsKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2U7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9hY3FfcmVsOwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdDsKKwordXNpbmcgc3RkOjphdG9taWNfYm9vbDsKK3VzaW5nIHN0ZDo6YXRvbWljX2NoYXI7Cit1c2luZyBzdGQ6OmF0b21pY19zY2hhcjsKK3VzaW5nIHN0ZDo6YXRvbWljX3VjaGFyOwordXNpbmcgc3RkOjphdG9taWNfc2hvcnQ7Cit1c2luZyBzdGQ6OmF0b21pY191c2hvcnQ7Cit1c2luZyBzdGQ6OmF0b21pY19pbnQ7Cit1c2luZyBzdGQ6OmF0b21pY191aW50OwordXNpbmcgc3RkOjphdG9taWNfbG9uZzsKK3VzaW5nIHN0ZDo6YXRvbWljX3Vsb25nOwordXNpbmcgc3RkOjphdG9taWNfbGxvbmc7Cit1c2luZyBzdGQ6OmF0b21pY191bGxvbmc7Cit1c2luZyBzdGQ6OmF0b21pY19jaGFyMTZfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2NoYXIzMl90OwordXNpbmcgc3RkOjphdG9taWNfd2NoYXJfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRfbGVhc3Q4X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfbGVhc3QxNl90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDE2X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfbGVhc3QzMl90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfbGVhc3Q2NF90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDY0X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfZmFzdDhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRfZmFzdDhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9mYXN0MTZfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRfZmFzdDE2X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfZmFzdDMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50X2Zhc3QzMl90OwordXNpbmcgc3RkOjphdG9taWNfaW50X2Zhc3Q2NF90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9mYXN0NjRfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludHB0cl90OwordXNpbmcgc3RkOjphdG9taWNfdWludHB0cl90OwordXNpbmcgc3RkOjphdG9taWNfc2l6ZV90OwordXNpbmcgc3RkOjphdG9taWNfcHRyZGlmZl90OwordXNpbmcgc3RkOjphdG9taWNfaW50bWF4X3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50bWF4X3Q7CisKKyNlbHNlIC8qIDxhdG9taWM+IHVuYXZhaWxhYmxlLCBwb3NzaWJseSBiZWNhdXNlIHRoaXMgaXMgQywgbm90IEMrKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisvKgorICogQzogRG8gaXQgb3Vyc2VsdmVzLgorICogTm90ZSB0aGF0IHRoZSBydW50aW1lIHJlcHJlc2VudGF0aW9uIGRlZmluZWQgaGVyZSBzaG91bGQgYmUgY29tcGF0aWJsZQorICogd2l0aCB0aGUgQysrIG9uZSwgaS5lLiBhbiBfQXRvbWljKFQpIG5lZWRzIHRvIGNvbnRhaW4gdGhlIHNhbWUKKyAqIGJpdHMgYXMgYSBULgorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4gIC8qIEZvciBwdHJkaWZmX3QuICovCisjaW5jbHVkZSA8c3RkaW50Lmg+ICAvKiBUT0RPOiBkb24ndCBkcmFnIGluIGFsbCB0aGUgbWFjcm9zLCBqdXN0IHRoZSB0eXBlcy4gKi8KKy8vIEluY2x1ZGUgdWNoYXIuaCBvbmx5IHdoZW4gbmVlZGVkLiAgQmlvbmljJ3Mgc3RkYXRvbWljLmggaXMgYWxzbyB1c2VkIGZvciB0aGUKKy8vIGhvc3QgKHZpYSBhIGNvcHkgaW4gcHJlYnVpbHRzL2NsYW5nKSBhbmQgdWNoYXIuaCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZQorLy8gZ2xpYmMgdXNlZCBmb3IgdGhlIGhvc3QuCisjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAyMDExMTJMCisjIGluY2x1ZGUgPHVjaGFyLmg+ICAvKiBGb3IgY2hhcjE2X3QgYW5kIGNoYXIzMl90LiAgICAgICAgICAgICAgKi8KKyNlbmRpZgorCisKKyNpZmRlZiBfX2NsYW5nX18KKyMgaWYgX19oYXNfZXh0ZW5zaW9uKGNfYXRvbWljKSB8fCBfX2hhc19leHRlbnNpb24oY3h4X2F0b21pYykKKyMgIGRlZmluZSAgICAgICBfX0NMQU5HX0FUT01JQ1MKKyMgZWxzZQorIyAgZXJyb3IgInN0ZGF0b21pYy5oIGRvZXMgbm90IHN1cHBvcnQgeW91ciBjb21waWxlciIKKyMgZW5kaWYKKyMgaWYgX19oYXNfYnVpbHRpbihfX3N5bmNfc3dhcCkKKyMgIGRlZmluZSBfX0hBU19CVUlMVElOX1NZTkNfU1dBUAorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9fR05VQ19BVE9NSUNTCisjZW5kaWYKKworLyoKKyAqIDcuMTcuMSBBdG9taWMgbG9jay1mcmVlIG1hY3Jvcy4KKyAqLworCisjaWZkZWYgX19HQ0NfQVRPTUlDX0JPT0xfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19CT09MX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0JPT0xfTE9DS19GUkVFCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfQ0hBUl9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0NIQVJfTE9DS19GUkVFCQlfX0dDQ19BVE9NSUNfQ0hBUl9MT0NLX0ZSRUUKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19DSEFSMzJfVF9MT0NLX0ZSRUUJX19HQ0NfQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRQorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19TSE9SVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX0lOVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0lOVF9MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19JTlRfTE9DS19GUkVFCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfTE9OR19MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0xPTkdfTE9DS19GUkVFCQlfX0dDQ19BVE9NSUNfTE9OR19MT0NLX0ZSRUUKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19MTE9OR19MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19QT0lOVEVSX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfUE9JTlRFUl9MT0NLX0ZSRUUKKyNlbmRpZgorCisvKgorICogNy4xNy4yIEluaXRpYWxpemF0aW9uLgorICovCisKKyNpZiBkZWZpbmVkKF9fQ0xBTkdfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX1ZBUl9JTklUKHZhbHVlKQkJKHZhbHVlKQorI2RlZmluZQlhdG9taWNfaW5pdChvYmosIHZhbHVlKQkJX19jMTFfYXRvbWljX2luaXQob2JqLCB2YWx1ZSkKKyNlbHNlCisjZGVmaW5lCUFUT01JQ19WQVJfSU5JVCh2YWx1ZSkJCXsgLl9fdmFsID0gKHZhbHVlKSB9CisjZGVmaW5lCWF0b21pY19pbml0KG9iaiwgdmFsdWUpCQkoKHZvaWQpKChvYmopLT5fX3ZhbCA9ICh2YWx1ZSkpKQorI2VuZGlmCisKKy8qCisgKiBDbGFuZyBhbmQgcmVjZW50IEdDQyBib3RoIHByb3ZpZGUgcHJlZGVmaW5lZCBtYWNyb3MgZm9yIHRoZSBtZW1vcnkKKyAqIG9yZGVyaW5ncy4gIElmIHdlIGFyZSB1c2luZyBhIGNvbXBpbGVyIHRoYXQgZG9lc24ndCBkZWZpbmUgdGhlbSwgdXNlIHRoZQorICogY2xhbmcgdmFsdWVzIC0gdGhlc2Ugd2lsbCBiZSBpZ25vcmVkIGluIHRoZSBmYWxsYmFjayBwYXRoLgorICovCisKKyNpZm5kZWYgX19BVE9NSUNfUkVMQVhFRAorI2RlZmluZSBfX0FUT01JQ19SRUxBWEVECQkwCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQ09OU1VNRQorI2RlZmluZSBfX0FUT01JQ19DT05TVU1FCQkxCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQUNRVUlSRQorI2RlZmluZSBfX0FUT01JQ19BQ1FVSVJFCQkyCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfUkVMRUFTRQorI2RlZmluZSBfX0FUT01JQ19SRUxFQVNFCQkzCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQUNRX1JFTAorI2RlZmluZSBfX0FUT01JQ19BQ1FfUkVMCQk0CisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfU0VRX0NTVAorI2RlZmluZSBfX0FUT01JQ19TRVFfQ1NUCQk1CisjZW5kaWYKKworLyoKKyAqIDcuMTcuMyBPcmRlciBhbmQgY29uc2lzdGVuY3kuCisgKgorICogVGhlIG1lbW9yeV9vcmRlcl8qIGNvbnN0YW50cyB0aGF0IGRlbm90ZSB0aGUgYmFycmllciBiZWhhdmlvdXIgb2YgdGhlCisgKiBhdG9taWMgb3BlcmF0aW9ucy4KKyAqIFRoZSBlbnVtIHZhbHVlcyBtdXN0IGJlIGlkZW50aWNhbCB0byB0aG9zZSB1c2VkIGJ5IHRoZQorICogQysrIDxhdG9taWM+IGhlYWRlci4KKyAqLworCit0eXBlZGVmIGVudW0geworCW1lbW9yeV9vcmRlcl9yZWxheGVkID0gX19BVE9NSUNfUkVMQVhFRCwKKwltZW1vcnlfb3JkZXJfY29uc3VtZSA9IF9fQVRPTUlDX0NPTlNVTUUsCisJbWVtb3J5X29yZGVyX2FjcXVpcmUgPSBfX0FUT01JQ19BQ1FVSVJFLAorCW1lbW9yeV9vcmRlcl9yZWxlYXNlID0gX19BVE9NSUNfUkVMRUFTRSwKKwltZW1vcnlfb3JkZXJfYWNxX3JlbCA9IF9fQVRPTUlDX0FDUV9SRUwsCisJbWVtb3J5X29yZGVyX3NlcV9jc3QgPSBfX0FUT01JQ19TRVFfQ1NUCit9IG1lbW9yeV9vcmRlcjsKKworLyoKKyAqIDcuMTcuNCBGZW5jZXMuCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY190aHJlYWRfZmVuY2UobWVtb3J5X29yZGVyIF9fb3JkZXIgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisKKyNpZmRlZiBfX0NMQU5HX0FUT01JQ1MKKwlfX2MxMV9hdG9taWNfdGhyZWFkX2ZlbmNlKF9fb3JkZXIpOworI2VsaWYgZGVmaW5lZChfX0dOVUNfQVRPTUlDUykKKwlfX2F0b21pY190aHJlYWRfZmVuY2UoX19vcmRlcik7CisjZWxzZQorCV9fc3luY19zeW5jaHJvbml6ZSgpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCithdG9taWNfc2lnbmFsX2ZlbmNlKG1lbW9yeV9vcmRlciBfX29yZGVyIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQoreworCisjaWZkZWYgX19DTEFOR19BVE9NSUNTCisJX19jMTFfYXRvbWljX3NpZ25hbF9mZW5jZShfX29yZGVyKTsKKyNlbGlmIGRlZmluZWQoX19HTlVDX0FUT01JQ1MpCisJX19hdG9taWNfc2lnbmFsX2ZlbmNlKF9fb3JkZXIpOworI2Vsc2UKKwlfX2FzbSB2b2xhdGlsZSAoIiIgOjo6ICJtZW1vcnkiKTsKKyNlbmRpZgorfQorCisvKgorICogNy4xNy41IExvY2stZnJlZSBwcm9wZXJ0eS4KKyAqLworCisjaWYgZGVmaW5lZChfS0VSTkVMKQorLyogQXRvbWljcyBpbiBrZXJuZWxzcGFjZSBhcmUgYWx3YXlzIGxvY2stZnJlZS4gKi8KKyNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKKwkoKHZvaWQpKG9iaiksIChfQm9vbCkxKQorI2VsaWYgZGVmaW5lZChfX0NMQU5HX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19pc19sb2NrX2ZyZWUob2JqKSBcCisJX19jMTFfYXRvbWljX2lzX2xvY2tfZnJlZShzaXplb2YoKihvYmopKSkKKyNlbGlmIGRlZmluZWQoX19HTlVDX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19pc19sb2NrX2ZyZWUob2JqKSBcCisJX19hdG9taWNfaXNfbG9ja19mcmVlKHNpemVvZigob2JqKS0+X192YWwpLCAmKG9iaiktPl9fdmFsKQorI2Vsc2UKKyNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKKwkoKHZvaWQpKG9iaiksIHNpemVvZigob2JqKS0+X192YWwpIDw9IHNpemVvZih2b2lkICopKQorI2VuZGlmCisKKy8qCisgKiA3LjE3LjYgQXRvbWljIGludGVnZXIgdHlwZXMuCisgKi8KKworI2lmbmRlZiBfX0NMQU5HX0FUT01JQ1MKKy8qCisgKiBObyBuYXRpdmUgc3VwcG9ydCBmb3IgX0F0b21pYygpLiBQbGFjZSBvYmplY3QgaW4gc3RydWN0dXJlIHRvIHByZXZlbnQKKyAqIG1vc3QgZm9ybXMgb2YgZGlyZWN0IG5vbi1hdG9taWMgYWNjZXNzLgorICovCisjZGVmaW5lIF9BdG9taWMoVCkgICAgICAgICAgICAgIHN0cnVjdCB7IFQgdm9sYXRpbGUgX192YWw7IH0KKyNlbmRpZgorCit0eXBlZGVmIF9BdG9taWMoYm9vbCkJCQlhdG9taWNfYm9vbDsKK3R5cGVkZWYgX0F0b21pYyhjaGFyKQkJCWF0b21pY19jaGFyOwordHlwZWRlZiBfQXRvbWljKHNpZ25lZCBjaGFyKQkJYXRvbWljX3NjaGFyOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGNoYXIpCQlhdG9taWNfdWNoYXI7Cit0eXBlZGVmIF9BdG9taWMoc2hvcnQpCQkJYXRvbWljX3Nob3J0OwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIHNob3J0KQkJYXRvbWljX3VzaG9ydDsKK3R5cGVkZWYgX0F0b21pYyhpbnQpCQkJYXRvbWljX2ludDsKK3R5cGVkZWYgX0F0b21pYyh1bnNpZ25lZCBpbnQpCQlhdG9taWNfdWludDsKK3R5cGVkZWYgX0F0b21pYyhsb25nKQkJCWF0b21pY19sb25nOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGxvbmcpCQlhdG9taWNfdWxvbmc7Cit0eXBlZGVmIF9BdG9taWMobG9uZyBsb25nKQkJYXRvbWljX2xsb25nOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGxvbmcgbG9uZykJYXRvbWljX3VsbG9uZzsKKyNpZiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwgfHwgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0eXBlZGVmIF9BdG9taWMoY2hhcjE2X3QpCQlhdG9taWNfY2hhcjE2X3Q7CisgIHR5cGVkZWYgX0F0b21pYyhjaGFyMzJfdCkJCWF0b21pY19jaGFyMzJfdDsKKyNlbmRpZgordHlwZWRlZiBfQXRvbWljKHdjaGFyX3QpCQlhdG9taWNfd2NoYXJfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfbGVhc3Q4X3QpCQlhdG9taWNfaW50X2xlYXN0OF90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfbGVhc3Q4X3QpCWF0b21pY191aW50X2xlYXN0OF90OwordHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDE2X3QpCWF0b21pY19pbnRfbGVhc3QxNl90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfbGVhc3QxNl90KQlhdG9taWNfdWludF9sZWFzdDE2X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2xlYXN0MzJfdCkJYXRvbWljX2ludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9sZWFzdDMyX3QpCWF0b21pY191aW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfbGVhc3Q2NF90KQlhdG9taWNfaW50X2xlYXN0NjRfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2xlYXN0NjRfdCkJYXRvbWljX3VpbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfQXRvbWljKGludF9mYXN0OF90KQkJYXRvbWljX2ludF9mYXN0OF90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfZmFzdDhfdCkJCWF0b21pY191aW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2Zhc3QxNl90KQkJYXRvbWljX2ludF9mYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2Zhc3QxNl90KQlhdG9taWNfdWludF9mYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfZmFzdDMyX3QpCQlhdG9taWNfaW50X2Zhc3QzMl90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfZmFzdDMyX3QpCWF0b21pY191aW50X2Zhc3QzMl90OwordHlwZWRlZiBfQXRvbWljKGludF9mYXN0NjRfdCkJCWF0b21pY19pbnRfZmFzdDY0X3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9mYXN0NjRfdCkJYXRvbWljX3VpbnRfZmFzdDY0X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50cHRyX3QpCQlhdG9taWNfaW50cHRyX3Q7Cit0eXBlZGVmIF9BdG9taWModWludHB0cl90KQkJYXRvbWljX3VpbnRwdHJfdDsKK3R5cGVkZWYgX0F0b21pYyhzaXplX3QpCQlhdG9taWNfc2l6ZV90OwordHlwZWRlZiBfQXRvbWljKHB0cmRpZmZfdCkJCWF0b21pY19wdHJkaWZmX3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50bWF4X3QpCQlhdG9taWNfaW50bWF4X3Q7Cit0eXBlZGVmIF9BdG9taWModWludG1heF90KQkJYXRvbWljX3VpbnRtYXhfdDsKKworLyoKKyAqIDcuMTcuNyBPcGVyYXRpb25zIG9uIGF0b21pYyB0eXBlcy4KKyAqLworCisvKgorICogQ29tcGlsZXItc3BlY2lmaWMgb3BlcmF0aW9ucy4KKyAqLworCisjaWYgZGVmaW5lZChfX0NMQU5HX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisgICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCisJX19jMTFfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKG9iamVjdCwgZXhwZWN0ZWQsIGRlc2lyZWQsCVwKKwkgICAgc3VjY2VzcywgZmFpbHVyZSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAkJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCV9fYzExX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWsob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCwJXAorCSAgICBzdWNjZXNzLCBmYWlsdXJlKQorI2RlZmluZQlhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZXhjaGFuZ2Uob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19mZXRjaF9hZGQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19mZXRjaF9hbmQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19jMTFfYXRvbWljX2ZldGNoX29yKG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZmV0Y2hfc3ViKG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF94b3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZmV0Y2hfeG9yKG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19sb2FkX2V4cGxpY2l0KG9iamVjdCwgb3JkZXIpCQkJCVwKKwlfX2MxMV9hdG9taWNfbG9hZChvYmplY3QsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCQlcCisJX19jMTFfYXRvbWljX3N0b3JlKG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCisjZWxpZiBkZWZpbmVkKF9fR05VQ19BVE9NSUNTKQorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCV9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmKG9iamVjdCktPl9fdmFsLCBleHBlY3RlZCwJCVwKKwkgICAgZGVzaXJlZCwgMCwgc3VjY2VzcywgZmFpbHVyZSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAkJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCV9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmKG9iamVjdCktPl9fdmFsLCBleHBlY3RlZCwJCVwKKwkgICAgZGVzaXJlZCwgMSwgc3VjY2VzcywgZmFpbHVyZSkKKyNkZWZpbmUJYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZXhjaGFuZ2VfbigmKG9iamVjdCktPl9fdmFsLCBkZXNpcmVkLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2ZldGNoX2FkZCgmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2ZldGNoX2FuZCgmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZmV0Y2hfb3IoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2F0b21pY19mZXRjaF9zdWIoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF94b3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2F0b21pY19mZXRjaF94b3IoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19sb2FkX2V4cGxpY2l0KG9iamVjdCwgb3JkZXIpCQkJCVwKKwlfX2F0b21pY19sb2FkX24oJihvYmplY3QpLT5fX3ZhbCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19zdG9yZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJCVwKKwlfX2F0b21pY19zdG9yZV9uKCYob2JqZWN0KS0+X192YWwsIGRlc2lyZWQsIG9yZGVyKQorI2Vsc2UKKyNkZWZpbmUJX19hdG9taWNfYXBwbHlfc3RyaWRlKG9iamVjdCwgb3BlcmFuZCkgXAorCSgoKF9fdHlwZW9mX18oKG9iamVjdCktPl9fdmFsKSkwKSArIChvcGVyYW5kKSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCVwKKyAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQlfX2V4dGVuc2lvbl9fICh7CQkJXAorCV9fdHlwZW9mX18oZXhwZWN0ZWQpIF9fZXAgPSAoZXhwZWN0ZWQpOwkJCQlcCisJX190eXBlb2ZfXygqX19lcCkgX19lID0gKl9fZXA7CQkJCQlcCisJKHZvaWQpKHN1Y2Nlc3MpOyAodm9pZCkoZmFpbHVyZSk7CQkJCVwKKwkoYm9vbCkoKCpfX2VwID0gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCYob2JqZWN0KS0+X192YWwsCVwKKwkgICAgX19lLCBkZXNpcmVkKSkgPT0gX19lKTsJCQkJCVwKK30pCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJCVwKKyAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQkJCQkJCVwKKwlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorCQlkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQorI2lmZGVmIF9fSEFTX0JVSUxUSU5fU1lOQ19TV0FQCisvKiBDbGFuZyBwcm92aWRlcyBhIGZ1bGwtYmFycmllciBhdG9taWMgZXhjaGFuZ2UgLSB1c2UgaXQgaWYgYXZhaWxhYmxlLiAqLworI2RlZmluZQlhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCVwKKwkoKHZvaWQpKG9yZGVyKSwgX19zeW5jX3N3YXAoJihvYmplY3QpLT5fX3ZhbCwgZGVzaXJlZCkpCisjZWxzZQorLyoKKyAqIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgpIGlzIG9ubHkgYW4gYWNxdWlyZSBiYXJyaWVyIGluIHRoZW9yeSAoYWx0aG91Z2ggaW4KKyAqIHByYWN0aWNlIGl0IGlzIHVzdWFsbHkgYSBmdWxsIGJhcnJpZXIpIHNvIHdlIG5lZWQgYW4gZXhwbGljaXQgYmFycmllciBiZWZvcmUKKyAqIGl0LgorICovCisjZGVmaW5lCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJXAorX19leHRlbnNpb25fXyAoewkJCQkJCQlcCisJX190eXBlb2ZfXyhvYmplY3QpIF9fbyA9IChvYmplY3QpOwkJCQlcCisJX190eXBlb2ZfXyhkZXNpcmVkKSBfX2QgPSAoZGVzaXJlZCk7CQkJCVwKKwkodm9pZCkob3JkZXIpOwkJCQkJCQlcCisJX19zeW5jX3N5bmNocm9uaXplKCk7CQkJCQkJXAorCV9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgmKF9fbyktPl9fdmFsLCBfX2QpOwkJCVwKK30pCisjZW5kaWYKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmKG9iamVjdCktPl9fdmFsLAkJXAorCSAgICBfX2F0b21pY19hcHBseV9zdHJpZGUob2JqZWN0LCBvcGVyYW5kKSkpCisjZGVmaW5lCWF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwkoKHZvaWQpKG9yZGVyKSwgX19zeW5jX2ZldGNoX2FuZF9hbmQoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCkpCisjZGVmaW5lCWF0b21pY19mZXRjaF9vcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX29yKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQpKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfc3ViKCYob2JqZWN0KS0+X192YWwsCQlcCisJICAgIF9fYXRvbWljX2FwcGx5X3N0cmlkZShvYmplY3QsIG9wZXJhbmQpKSkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX3hvcigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kKSkKKyNkZWZpbmUJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBvcmRlcikJCQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmKG9iamVjdCktPl9fdmFsLCAwKSkKKyNkZWZpbmUJYXRvbWljX3N0b3JlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQkJXAorCSgodm9pZClhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikpCisjZW5kaWYKKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9ucy4KKyAqCisgKiBEb24ndCBwcm92aWRlIHRoZXNlIGluIGtlcm5lbCBzcGFjZS4gSW4ga2VybmVsIHNwYWNlLCB3ZSBzaG91bGQgYmUKKyAqIGRpc2NpcGxpbmVkIGVub3VnaCB0byBhbHdheXMgcHJvdmlkZSBleHBsaWNpdCBiYXJyaWVycy4KKyAqLworCisjaWZuZGVmIF9LRVJORUwKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKG9iamVjdCwgZXhwZWN0ZWQsIGRlc2lyZWQpCVwKKwlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorCSAgICBkZXNpcmVkLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWsob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCkJCVwKKwlhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCQlcCisJICAgIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2V4Y2hhbmdlKG9iamVjdCwgZGVzaXJlZCkJCQkJXAorCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZChvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19mZXRjaF9vcihvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3N1YihvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19mZXRjaF94b3Iob2JqZWN0LCBvcGVyYW5kKQkJCQlcCisJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfbG9hZChvYmplY3QpCQkJCQkJXAorCWF0b21pY19sb2FkX2V4cGxpY2l0KG9iamVjdCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19zdG9yZShvYmplY3QsIGRlc2lyZWQpCQkJCQlcCisJYXRvbWljX3N0b3JlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZW5kaWYgLyogIV9LRVJORUwgKi8KKworLyoKKyAqIDcuMTcuOCBBdG9taWMgZmxhZyB0eXBlIGFuZCBvcGVyYXRpb25zLgorICoKKyAqIFhYWDogQXNzdW1lIGF0b21pY19ib29sIGNhbiBiZSB1c2VkIGFzIGFuIGF0b21pY19mbGFnLiBJcyB0aGVyZSBzb21lCisgKiBraW5kIG9mIGNvbXBpbGVyIGJ1aWx0LWluIHR5cGUgd2UgY291bGQgdXNlPworICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdG9taWNfYm9vbAlfX2ZsYWc7Cit9IGF0b21pY19mbGFnOworCisjZGVmaW5lCUFUT01JQ19GTEFHX0lOSVQJCXsgQVRPTUlDX1ZBUl9JTklUKGZhbHNlKSB9CisKK3N0YXRpYyBfX2lubGluZSBib29sCithdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ZsYWcgKl9fb2JqZWN0LAorICAgIG1lbW9yeV9vcmRlciBfX29yZGVyKQoreworCXJldHVybiAoYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KCZfX29iamVjdC0+X19mbGFnLCAxLCBfX29yZGVyKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCithdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyAqX19vYmplY3QsIG1lbW9yeV9vcmRlciBfX29yZGVyKQoreworCisJYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZfX29iamVjdC0+X19mbGFnLCAwLCBfX29yZGVyKTsKK30KKworI2lmbmRlZiBfS0VSTkVMCitzdGF0aWMgX19pbmxpbmUgYm9vbAorYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0KHZvbGF0aWxlIGF0b21pY19mbGFnICpfX29iamVjdCkKK3sKKworCXJldHVybiAoYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0X2V4cGxpY2l0KF9fb2JqZWN0LAorCSAgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYXRvbWljX2ZsYWdfY2xlYXIodm9sYXRpbGUgYXRvbWljX2ZsYWcgKl9fb2JqZWN0KQoreworCisJYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoX19vYmplY3QsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKK30KKyNlbmRpZiAvKiAhX0tFUk5FTCAqLworCisjZW5kaWYgLyogPGF0b21pYz4gdW5hdmFpbGFibGUgKi8KKworI2VuZGlmIC8qICFfU1REQVRPTUlDX0hfICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGJvb2wuaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYm9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Njc4OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGJvb2wuaApAQCAtMCwwICsxLDQ0IEBACisvKj09PS0tLS0gc3RkYm9vbC5oIC0gU3RhbmRhcmQgaGVhZGVyIGZvciBib29sZWFucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVsaSBGcmllZG1hbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1NUREJPT0xfSAorI2RlZmluZSBfX1NUREJPT0xfSAorCisvKiBEb24ndCBkZWZpbmUgYm9vbCwgdHJ1ZSwgYW5kIGZhbHNlIGluIEMrKywgZXhjZXB0IGFzIGEgR05VIGV4dGVuc2lvbi4gKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgYm9vbCBfQm9vbAorI2RlZmluZSB0cnVlIDEKKyNkZWZpbmUgZmFsc2UgMAorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorLyogRGVmaW5lIF9Cb29sLCBib29sLCBmYWxzZSwgdHJ1ZSBhcyBhIEdOVSBleHRlbnNpb24uICovCisjZGVmaW5lIF9Cb29sIGJvb2wKKyNkZWZpbmUgYm9vbCAgYm9vbAorI2RlZmluZSBmYWxzZSBmYWxzZQorI2RlZmluZSB0cnVlICB0cnVlCisjZW5kaWYKKworI2RlZmluZSBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCAxCisKKyNlbmRpZiAvKiBfX1NUREJPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRkZWYuaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1NDk5NgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkZGVmLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qPT09LS0tLSBzdGRkZWYuaCAtIEJhc2ljIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRWxpIEZyaWVkbWFuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWYgIWRlZmluZWQoX19TVERERUZfSCkgfHwgZGVmaW5lZChfX25lZWRfcHRyZGlmZl90KSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoX19uZWVkX3NpemVfdCkgfHwgZGVmaW5lZChfX25lZWRfd2NoYXJfdCkgfHwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKF9fbmVlZF9OVUxMKSB8fCBkZWZpbmVkKF9fbmVlZF93aW50X3QpCisKKyNpZiAhZGVmaW5lZChfX25lZWRfcHRyZGlmZl90KSAmJiAhZGVmaW5lZChfX25lZWRfc2l6ZV90KSAmJiAgICAgICAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoX19uZWVkX3djaGFyX3QpICYmICFkZWZpbmVkKF9fbmVlZF9OVUxMKSAmJiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKF9fbmVlZF93aW50X3QpCisvKiBBbHdheXMgZGVmaW5lIG1pc2NlbGxhbmVvdXMgcGllY2VzIHdoZW4gbW9kdWxlcyBhcmUgYXZhaWxhYmxlLiAqLworI2lmICFfX2hhc19mZWF0dXJlKG1vZHVsZXMpCisjZGVmaW5lIF9fU1REREVGX0gKKyNlbmRpZgorI2RlZmluZSBfX25lZWRfcHRyZGlmZl90CisjZGVmaW5lIF9fbmVlZF9zaXplX3QKKyNkZWZpbmUgX19uZWVkX3djaGFyX3QKKyNkZWZpbmUgX19uZWVkX05VTEwKKyNkZWZpbmUgX19uZWVkX1NURERFRl9IX21pc2MKKy8qIF9fbmVlZF93aW50X3QgaXMgaW50ZW50aW9uYWxseSBub3QgZGVmaW5lZCBoZXJlLiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fbmVlZF9wdHJkaWZmX3QpCisjaWYgIWRlZmluZWQoX1BUUkRJRkZfVCkgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKQorLyogQWx3YXlzIGRlZmluZSBwdHJkaWZmX3Qgd2hlbiBtb2R1bGVzIGFyZSBhdmFpbGFibGUuICovCisjaWYgIV9faGFzX2ZlYXR1cmUobW9kdWxlcykKKyNkZWZpbmUgX1BUUkRJRkZfVAorI2VuZGlmCit0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gcHRyZGlmZl90OworI2VuZGlmCisjdW5kZWYgX19uZWVkX3B0cmRpZmZfdAorI2VuZGlmIC8qIGRlZmluZWQoX19uZWVkX3B0cmRpZmZfdCkgKi8KKworI2lmIGRlZmluZWQoX19uZWVkX3NpemVfdCkKKyNpZiAhZGVmaW5lZChfU0laRV9UKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpCisvKiBBbHdheXMgZGVmaW5lIHNpemVfdCB3aGVuIG1vZHVsZXMgYXJlIGF2YWlsYWJsZS4gKi8KKyNpZiAhX19oYXNfZmVhdHVyZShtb2R1bGVzKQorI2RlZmluZSBfU0laRV9UCisjZW5kaWYKK3R5cGVkZWYgX19TSVpFX1RZUEVfXyBzaXplX3Q7CisjZW5kaWYKKyN1bmRlZiBfX25lZWRfc2l6ZV90CisjZW5kaWYgLypkZWZpbmVkKF9fbmVlZF9zaXplX3QpICovCisKKyNpZiBkZWZpbmVkKF9fbmVlZF9TVERERUZfSF9taXNjKQorLyogSVNPOTg5OToyMDExIDcuMjAgKEMxMSBBbm5leCBLKTogRGVmaW5lIHJzaXplX3QgaWYgX19TVERDX1dBTlRfTElCX0VYVDFfXyBpcworICogZW5hYmxlZC4gKi8KKyNpZiAoZGVmaW5lZChfX1NURENfV0FOVF9MSUJfRVhUMV9fKSAmJiBfX1NURENfV0FOVF9MSUJfRVhUMV9fID49IDEgJiYgXAorICAgICAhZGVmaW5lZChfUlNJWkVfVCkpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykKKy8qIEFsd2F5cyBkZWZpbmUgcnNpemVfdCB3aGVuIG1vZHVsZXMgYXJlIGF2YWlsYWJsZS4gKi8KKyNpZiAhX19oYXNfZmVhdHVyZShtb2R1bGVzKQorI2RlZmluZSBfUlNJWkVfVAorI2VuZGlmCit0eXBlZGVmIF9fU0laRV9UWVBFX18gcnNpemVfdDsKKyNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQoX19uZWVkX1NURERFRl9IX21pc2MpICovCisKKyNpZiBkZWZpbmVkKF9fbmVlZF93Y2hhcl90KQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogQWx3YXlzIGRlZmluZSB3Y2hhcl90IHdoZW4gbW9kdWxlcyBhcmUgYXZhaWxhYmxlLiAqLworI2lmICFkZWZpbmVkKF9XQ0hBUl9UKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpCisjaWYgIV9faGFzX2ZlYXR1cmUobW9kdWxlcykKKyNkZWZpbmUgX1dDSEFSX1QKKyNpZiBkZWZpbmVkKF9NU0NfRVhURU5TSU9OUykKKyNkZWZpbmUgX1dDSEFSX1RfREVGSU5FRAorI2VuZGlmCisjZW5kaWYKK3R5cGVkZWYgX19XQ0hBUl9UWVBFX18gd2NoYXJfdDsKKyNlbmRpZgorI2VuZGlmCisjdW5kZWYgX19uZWVkX3djaGFyX3QKKyNlbmRpZiAvKiBkZWZpbmVkKF9fbmVlZF93Y2hhcl90KSAqLworCisjaWYgZGVmaW5lZChfX25lZWRfTlVMTCkKKyN1bmRlZiBOVUxMCisjaWZkZWYgX19jcGx1c3BsdXMKKyMgIGlmICFkZWZpbmVkKF9fTUlOR1czMl9fKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikKKyMgICAgZGVmaW5lIE5VTEwgX19udWxsCisjICBlbHNlCisjICAgIGRlZmluZSBOVUxMIDAKKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5lIE5VTEwgKCh2b2lkKikwKQorI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpZiBkZWZpbmVkKF9NU0NfRVhURU5TSU9OUykgJiYgZGVmaW5lZChfTkFUSVZFX05VTExQVFJfU1VQUE9SVEVEKQorbmFtZXNwYWNlIHN0ZCB7IHR5cGVkZWYgZGVjbHR5cGUobnVsbHB0cikgbnVsbHB0cl90OyB9Cit1c2luZyA6OnN0ZDo6bnVsbHB0cl90OworI2VuZGlmCisjZW5kaWYKKyN1bmRlZiBfX25lZWRfTlVMTAorI2VuZGlmIC8qIGRlZmluZWQoX19uZWVkX05VTEwpICovCisKKyNpZiBkZWZpbmVkKF9fbmVlZF9TVERERUZfSF9taXNjKQorI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMjAxMTEyTCB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjaW5jbHVkZSAiX19zdGRkZWZfbWF4X2FsaWduX3QuaCIKKyNlbmRpZgorI2RlZmluZSBvZmZzZXRvZih0LCBkKSBfX2J1aWx0aW5fb2Zmc2V0b2YodCwgZCkKKyN1bmRlZiBfX25lZWRfU1REREVGX0hfbWlzYworI2VuZGlmICAvKiBkZWZpbmVkKF9fbmVlZF9TVERERUZfSF9taXNjKSAqLworCisvKiBTb21lIEMgbGlicmFyaWVzIGV4cGVjdCB0byBzZWUgYSB3aW50X3QgaGVyZS4gT3RoZXJzIChub3RhYmx5IE1pbkdXKSB3aWxsIHVzZQorX19XSU5UX1RZUEVfXyBkaXJlY3RseTsgYWNjb21tb2RhdGUgYm90aCBieSByZXF1aXJpbmcgX19uZWVkX3dpbnRfdCAqLworI2lmIGRlZmluZWQoX19uZWVkX3dpbnRfdCkKKy8qIEFsd2F5cyBkZWZpbmUgd2ludF90IHdoZW4gbW9kdWxlcyBhcmUgYXZhaWxhYmxlLiAqLworI2lmICFkZWZpbmVkKF9XSU5UX1QpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykKKyNpZiAhX19oYXNfZmVhdHVyZShtb2R1bGVzKQorI2RlZmluZSBfV0lOVF9UCisjZW5kaWYKK3R5cGVkZWYgX19XSU5UX1RZUEVfXyB3aW50X3Q7CisjZW5kaWYKKyN1bmRlZiBfX25lZWRfd2ludF90CisjZW5kaWYgLyogX19uZWVkX3dpbnRfdCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkaW50LmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMmZjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGludC5oCkBAIC0wLDAgKzEsNzA3IEBACisvKj09PS0tLS0gc3RkaW50LmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIHNpemVkIGludGVnZXIgdHlwZXMgLS0tLS0tLS0tLS0tLS09PT0qXAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDaHJpcyBMYXR0bmVyCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKK1wqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSovCisKKyNpZm5kZWYgX19DTEFOR19TVERJTlRfSAorI2RlZmluZSBfX0NMQU5HX1NURElOVF9ICisKKy8qIElmIHdlJ3JlIGhvc3RlZCwgZmFsbCBiYWNrIHRvIHRoZSBzeXN0ZW0ncyBzdGRpbnQuaCwgd2hpY2ggbWlnaHQgaGF2ZQorICogYWRkaXRpb25hbCBkZWZpbml0aW9ucy4KKyAqLworI2lmIF9fU1REQ19IT1NURURfXyAmJiBfX2hhc19pbmNsdWRlX25leHQoPHN0ZGludC5oPikKKworLy8gQzk5IDcuMTguMyBMaW1pdHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcworLy8KKy8vICBGb290bm90ZSAyMTksIDIyMDogQysrIGltcGxlbWVudGF0aW9ucyBzaG91bGQgZGVmaW5lIHRoZXNlIG1hY3JvcyBvbmx5IHdoZW4KKy8vICBfX1NURENfTElNSVRfTUFDUk9TIGlzIGRlZmluZWQgYmVmb3JlIDxzdGRpbnQuaD4gaXMgaW5jbHVkZWQuCisvLworLy8gIEZvb3Rub3RlIDIyMjogQysrIGltcGxlbWVudGF0aW9ucyBzaG91bGQgZGVmaW5lIHRoZXNlIG1hY3JvcyBvbmx5IHdoZW4KKy8vICBfX1NURENfQ09OU1RBTlRfTUFDUk9TIGlzIGRlZmluZWQgYmVmb3JlIDxzdGRpbnQuaD4gaXMgaW5jbHVkZWQuCisvLworLy8gQysrMTEgW2NzdGRpbnQuc3luXXAyOgorLy8KKy8vICBUaGUgbWFjcm9zIGRlZmluZWQgYnkgPGNzdGRpbnQ+IGFyZSBwcm92aWRlZCB1bmNvbmRpdGlvbmFsbHkuIEluIHBhcnRpY3VsYXIsCisvLyAgdGhlIHN5bWJvbHMgX19TVERDX0xJTUlUX01BQ1JPUyBhbmQgX19TVERDX0NPTlNUQU5UX01BQ1JPUyAobWVudGlvbmVkIGluCisvLyAgZm9vdG5vdGVzIDIxOSwgMjIwLCBhbmQgMjIyIGluIHRoZSBDIHN0YW5kYXJkKSBwbGF5IG5vIHJvbGUgaW4gQysrLgorLy8KKy8vIEMxMSByZW1vdmVkIHRoZSBwcm9ibGVtYXRpYyBmb290bm90ZXMuCisvLworLy8gV29yayBhcm91bmQgdGhpcyBpbmNvbnNpc3RlbmN5IGJ5IGFsd2F5cyBkZWZpbmluZyB0aG9zZSBtYWNyb3MgaW4gQysrIG1vZGUsCisvLyBzbyB0aGF0IGEgQyBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIHdoaWNoIGZvbGxvd3MgdGhlIEM5OSBzdGFuZGFyZCBjYW4gYmUKKy8vIHVzZWQgaW4gQysrLgorIyBpZmRlZiBfX2NwbHVzcGx1cworIyAgaWYgIWRlZmluZWQoX19TVERDX0xJTUlUX01BQ1JPUykKKyMgICBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUworIyAgIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TX0RFRklORURfQllfQ0xBTkcKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKQorIyAgIGRlZmluZSBfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjICAgZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1NfREVGSU5FRF9CWV9DTEFORworIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpbmNsdWRlX25leHQgPHN0ZGludC5oPgorCisjIGlmZGVmIF9fU1REQ19MSU1JVF9NQUNST1NfREVGSU5FRF9CWV9DTEFORworIyAgdW5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworIyAgdW5kZWYgX19TVERDX0xJTUlUX01BQ1JPU19ERUZJTkVEX0JZX0NMQU5HCisjIGVuZGlmCisjIGlmZGVmIF9fU1REQ19DT05TVEFOVF9NQUNST1NfREVGSU5FRF9CWV9DTEFORworIyAgdW5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyAgdW5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPU19ERUZJTkVEX0JZX0NMQU5HCisjIGVuZGlmCisKKyNlbHNlCisKKy8qIEM5OSA3LjE4LjEuMSBFeGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzLgorICogQzk5IDcuMTguMS4yIE1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcy4KKyAqIEM5OSA3LjE4LjEuMyBGYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcy4KKyAqCisgKiBUaGUgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBleGFjdC13aWR0aCB0eXBlIGJlIGRlZmluZWQgZm9yIDgtLCAxNi0sIDMyLSwgYW5kCisgKiA2NC1iaXQgdHlwZXMgaWYgdGhleSBhcmUgaW1wbGVtZW50ZWQuIE90aGVyIGV4YWN0IHdpZHRoIHR5cGVzIGFyZSBvcHRpb25hbC4KKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lcyBhbiBleGFjdC13aWR0aCB0eXBlcyBmb3IgZXZlcnkgaW50ZWdlciB3aWR0aAorICogdGhhdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3RhbmRhcmQgaW50ZWdlciB0eXBlcy4KKyAqCisgKiBUaGUgc3RhbmRhcmQgYWxzbyByZXF1aXJlcyBtaW5pbXVtLXdpZHRoIHR5cGVzIGJlIGRlZmluZWQgZm9yIDgtLCAxNi0sIDMyLSwKKyAqIGFuZCA2NC1iaXQgd2lkdGhzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSBhcmUgY29ycmVzcG9uZGluZyBleGFjdC13aWR0aAorICogdHlwZXMuCisgKgorICogVG8gYWNjb21tb2RhdGUgdGFyZ2V0cyB0aGF0IGFyZSBtaXNzaW5nIHR5cGVzIHRoYXQgYXJlIGV4YWN0bHkgOCwgMTYsIDMyLCBvcgorICogNjQgYml0cyB3aWRlLCB0aGlzIGltcGxlbWVudGF0aW9uIHRha2VzIGFuIGFwcHJvYWNoIG9mIGNhc2NhZGluZworICogcmVkZWZpbnRpb25zLCByZWRlZmluaW5nIF9faW50X2xlYXN0Tl90IHRvIHN1Y2Nlc3NpdmVseSBzbWFsbGVyIGV4YWN0LXdpZHRoCisgKiB0eXBlcy4gSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHRoZSB0eXBlcyBhcmUgZGVmaW5lZCBpbiBvcmRlciBvZgorICogZGVzY2VuZGluZyB3aWR0aHMuCisgKgorICogV2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHRoZSBtaW5pbXVtLXdpZHRoIHR5cGVzIGFuZCB0aGUgZmFzdGVzdAorICogbWluaW11bS13aWR0aCB0eXBlcyBhcmUgdGhlIHNhbWUuIFRoaXMgaXMgYWxsb3dlZCBieSB0aGUgc3RhbmRhcmQsIGJ1dCBpcworICogc3Vib3B0aW1hbC4KKyAqCisgKiBJbiB2aW9sYXRpb24gb2YgdGhlIHN0YW5kYXJkLCBzb21lIHRhcmdldHMgZG8gbm90IGltcGxlbWVudCBhIHR5cGUgdGhhdCBpcworICogd2lkZSBlbm91Z2ggdG8gcmVwcmVzZW50IGFsbCBvZiB0aGUgcmVxdWlyZWQgd2lkdGhzICg4LSwgMTYtLCAzMi0sIDY0LWJpdCkuCisgKiBUbyBhY2NvbW1vZGF0ZSB0aGVzZSB0YXJnZXRzLCBhIHJlcXVpcmVkIG1pbmltdW0td2lkdGggdHlwZSBpcyBvbmx5CisgKiBkZWZpbmVkIGlmIHRoZXJlIGV4aXN0cyBhbiBleGFjdC13aWR0aCB0eXBlIG9mIGVxdWFsIG9yIGdyZWF0ZXIgd2lkdGguCisgKi8KKworI2lmZGVmIF9fSU5UNjRfVFlQRV9fCisjIGlmbmRlZiBfX2ludDhfdF9kZWZpbmVkIC8qIGdsaWJjIHN5cy90eXBlcy5oIGFsc28gZGVmaW5lcyBpbnQ2NF90Ki8KK3R5cGVkZWYgX19JTlQ2NF9UWVBFX18gaW50NjRfdDsKKyMgZW5kaWYgLyogX19pbnQ4X3RfZGVmaW5lZCAqLwordHlwZWRlZiBfX1VJTlQ2NF9UWVBFX18gdWludDY0X3Q7CisjIGRlZmluZSBfX2ludF9sZWFzdDY0X3QgaW50NjRfdAorIyBkZWZpbmUgX191aW50X2xlYXN0NjRfdCB1aW50NjRfdAorIyBkZWZpbmUgX19pbnRfbGVhc3QzMl90IGludDY0X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDMyX3QgdWludDY0X3QKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQ2NF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQ2NF90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQ2NF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDY0X3QKKyNlbmRpZiAvKiBfX0lOVDY0X1RZUEVfXyAqLworCisjaWZkZWYgX19pbnRfbGVhc3Q2NF90Cit0eXBlZGVmIF9faW50X2xlYXN0NjRfdCBpbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfX3VpbnRfbGVhc3Q2NF90IHVpbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfX2ludF9sZWFzdDY0X3QgaW50X2Zhc3Q2NF90OwordHlwZWRlZiBfX3VpbnRfbGVhc3Q2NF90IHVpbnRfZmFzdDY0X3Q7CisjZW5kaWYgLyogX19pbnRfbGVhc3Q2NF90ICovCisKKyNpZmRlZiBfX0lOVDU2X1RZUEVfXwordHlwZWRlZiBfX0lOVDU2X1RZUEVfXyBpbnQ1Nl90OwordHlwZWRlZiBfX1VJTlQ1Nl9UWVBFX18gdWludDU2X3Q7Cit0eXBlZGVmIGludDU2X3QgaW50X2xlYXN0NTZfdDsKK3R5cGVkZWYgdWludDU2X3QgdWludF9sZWFzdDU2X3Q7Cit0eXBlZGVmIGludDU2X3QgaW50X2Zhc3Q1Nl90OwordHlwZWRlZiB1aW50NTZfdCB1aW50X2Zhc3Q1Nl90OworIyBkZWZpbmUgX19pbnRfbGVhc3QzMl90IGludDU2X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDMyX3QgdWludDU2X3QKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQ1Nl90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQ1Nl90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQ1Nl90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDU2X3QKKyNlbmRpZiAvKiBfX0lOVDU2X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDQ4X1RZUEVfXwordHlwZWRlZiBfX0lOVDQ4X1RZUEVfXyBpbnQ0OF90OwordHlwZWRlZiBfX1VJTlQ0OF9UWVBFX18gdWludDQ4X3Q7Cit0eXBlZGVmIGludDQ4X3QgaW50X2xlYXN0NDhfdDsKK3R5cGVkZWYgdWludDQ4X3QgdWludF9sZWFzdDQ4X3Q7Cit0eXBlZGVmIGludDQ4X3QgaW50X2Zhc3Q0OF90OwordHlwZWRlZiB1aW50NDhfdCB1aW50X2Zhc3Q0OF90OworIyBkZWZpbmUgX19pbnRfbGVhc3QzMl90IGludDQ4X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDMyX3QgdWludDQ4X3QKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQ0OF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQ0OF90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQ0OF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDQ4X3QKKyNlbmRpZiAvKiBfX0lOVDQ4X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDQwX1RZUEVfXwordHlwZWRlZiBfX0lOVDQwX1RZUEVfXyBpbnQ0MF90OwordHlwZWRlZiBfX1VJTlQ0MF9UWVBFX18gdWludDQwX3Q7Cit0eXBlZGVmIGludDQwX3QgaW50X2xlYXN0NDBfdDsKK3R5cGVkZWYgdWludDQwX3QgdWludF9sZWFzdDQwX3Q7Cit0eXBlZGVmIGludDQwX3QgaW50X2Zhc3Q0MF90OwordHlwZWRlZiB1aW50NDBfdCB1aW50X2Zhc3Q0MF90OworIyBkZWZpbmUgX19pbnRfbGVhc3QzMl90IGludDQwX3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDMyX3QgdWludDQwX3QKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQ0MF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQ0MF90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQ0MF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDQwX3QKKyNlbmRpZiAvKiBfX0lOVDQwX1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDMyX1RZUEVfXworCisjIGlmbmRlZiBfX2ludDhfdF9kZWZpbmVkIC8qIGdsaWJjIHN5cy90eXBlcy5oIGFsc28gZGVmaW5lcyBpbnQzMl90Ki8KK3R5cGVkZWYgX19JTlQzMl9UWVBFX18gaW50MzJfdDsKKyMgZW5kaWYgLyogX19pbnQ4X3RfZGVmaW5lZCAqLworCisjIGlmbmRlZiBfX3VpbnQzMl90X2RlZmluZWQgIC8qIG1vcmUgZ2xpYmMgY29tcGF0aWJpbGl0eSAqLworIyBkZWZpbmUgX191aW50MzJfdF9kZWZpbmVkCit0eXBlZGVmIF9fVUlOVDMyX1RZUEVfXyB1aW50MzJfdDsKKyMgZW5kaWYgLyogX191aW50MzJfdF9kZWZpbmVkICovCisKKyMgZGVmaW5lIF9faW50X2xlYXN0MzJfdCBpbnQzMl90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QzMl90IHVpbnQzMl90CisjIGRlZmluZSBfX2ludF9sZWFzdDE2X3QgaW50MzJfdAorIyBkZWZpbmUgX191aW50X2xlYXN0MTZfdCB1aW50MzJfdAorIyBkZWZpbmUgX19pbnRfbGVhc3Q4X3QgaW50MzJfdAorIyBkZWZpbmUgX191aW50X2xlYXN0OF90IHVpbnQzMl90CisjZW5kaWYgLyogX19JTlQzMl9UWVBFX18gKi8KKworI2lmZGVmIF9faW50X2xlYXN0MzJfdAordHlwZWRlZiBfX2ludF9sZWFzdDMyX3QgaW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgX191aW50X2xlYXN0MzJfdCB1aW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgX19pbnRfbGVhc3QzMl90IGludF9mYXN0MzJfdDsKK3R5cGVkZWYgX191aW50X2xlYXN0MzJfdCB1aW50X2Zhc3QzMl90OworI2VuZGlmIC8qIF9faW50X2xlYXN0MzJfdCAqLworCisjaWZkZWYgX19JTlQyNF9UWVBFX18KK3R5cGVkZWYgX19JTlQyNF9UWVBFX18gaW50MjRfdDsKK3R5cGVkZWYgX19VSU5UMjRfVFlQRV9fIHVpbnQyNF90OwordHlwZWRlZiBpbnQyNF90IGludF9sZWFzdDI0X3Q7Cit0eXBlZGVmIHVpbnQyNF90IHVpbnRfbGVhc3QyNF90OwordHlwZWRlZiBpbnQyNF90IGludF9mYXN0MjRfdDsKK3R5cGVkZWYgdWludDI0X3QgdWludF9mYXN0MjRfdDsKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQyNF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQyNF90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQyNF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDI0X3QKKyNlbmRpZiAvKiBfX0lOVDI0X1RZUEVfXyAqLworCisjaWZkZWYgX19JTlQxNl9UWVBFX18KKyNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZCAvKiBnbGliYyBzeXMvdHlwZXMuaCBhbHNvIGRlZmluZXMgaW50MTZfdCovCit0eXBlZGVmIF9fSU5UMTZfVFlQRV9fIGludDE2X3Q7CisjZW5kaWYgLyogX19pbnQ4X3RfZGVmaW5lZCAqLwordHlwZWRlZiBfX1VJTlQxNl9UWVBFX18gdWludDE2X3Q7CisjIGRlZmluZSBfX2ludF9sZWFzdDE2X3QgaW50MTZfdAorIyBkZWZpbmUgX191aW50X2xlYXN0MTZfdCB1aW50MTZfdAorIyBkZWZpbmUgX19pbnRfbGVhc3Q4X3QgaW50MTZfdAorIyBkZWZpbmUgX191aW50X2xlYXN0OF90IHVpbnQxNl90CisjZW5kaWYgLyogX19JTlQxNl9UWVBFX18gKi8KKworI2lmZGVmIF9faW50X2xlYXN0MTZfdAordHlwZWRlZiBfX2ludF9sZWFzdDE2X3QgaW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgX191aW50X2xlYXN0MTZfdCB1aW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgX19pbnRfbGVhc3QxNl90IGludF9mYXN0MTZfdDsKK3R5cGVkZWYgX191aW50X2xlYXN0MTZfdCB1aW50X2Zhc3QxNl90OworI2VuZGlmIC8qIF9faW50X2xlYXN0MTZfdCAqLworCisKKyNpZmRlZiBfX0lOVDhfVFlQRV9fCisjaWZuZGVmIF9faW50OF90X2RlZmluZWQgIC8qIGdsaWJjIHN5cy90eXBlcy5oIGFsc28gZGVmaW5lcyBpbnQ4X3QqLwordHlwZWRlZiBfX0lOVDhfVFlQRV9fIGludDhfdDsKKyNlbmRpZiAvKiBfX2ludDhfdF9kZWZpbmVkICovCit0eXBlZGVmIF9fVUlOVDhfVFlQRV9fIHVpbnQ4X3Q7CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQ4X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50OF90CisjZW5kaWYgLyogX19JTlQ4X1RZUEVfXyAqLworCisjaWZkZWYgX19pbnRfbGVhc3Q4X3QKK3R5cGVkZWYgX19pbnRfbGVhc3Q4X3QgaW50X2xlYXN0OF90OwordHlwZWRlZiBfX3VpbnRfbGVhc3Q4X3QgdWludF9sZWFzdDhfdDsKK3R5cGVkZWYgX19pbnRfbGVhc3Q4X3QgaW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIF9fdWludF9sZWFzdDhfdCB1aW50X2Zhc3Q4X3Q7CisjZW5kaWYgLyogX19pbnRfbGVhc3Q4X3QgKi8KKworLyogcHJldmVudCBnbGliYyBzeXMvdHlwZXMuaCBmcm9tIGRlZmluaW5nIGNvbmZsaWN0aW5nIHR5cGVzICovCisjaWZuZGVmIF9faW50OF90X2RlZmluZWQKKyMgZGVmaW5lIF9faW50OF90X2RlZmluZWQKKyNlbmRpZiAvKiBfX2ludDhfdF9kZWZpbmVkICovCisKKy8qIEM5OSA3LjE4LjEuNCBJbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMuCisgKi8KKyNkZWZpbmUgX19zdGRpbnRfam9pbjMoYSxiLGMpIGEgIyMgYiAjIyBjCisKKyNkZWZpbmUgIF9faW50bl90KG4pIF9fc3RkaW50X2pvaW4zKCBpbnQsIG4sIF90KQorI2RlZmluZSBfX3VpbnRuX3QobikgX19zdGRpbnRfam9pbjModWludCwgbiwgX3QpCisKKyNpZm5kZWYgX0lOVFBUUl9UCisjaWZuZGVmIF9faW50cHRyX3RfZGVmaW5lZAordHlwZWRlZiAgX19pbnRuX3QoX19JTlRQVFJfV0lEVEhfXykgIGludHB0cl90OworI2RlZmluZSBfX2ludHB0cl90X2RlZmluZWQKKyNkZWZpbmUgX0lOVFBUUl9UCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9VSU5UUFRSX1QKK3R5cGVkZWYgX191aW50bl90KF9fSU5UUFRSX1dJRFRIX18pIHVpbnRwdHJfdDsKKyNkZWZpbmUgX1VJTlRQVFJfVAorI2VuZGlmCisKKy8qIEM5OSA3LjE4LjEuNSBHcmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzLgorICovCit0eXBlZGVmIF9fSU5UTUFYX1RZUEVfXyAgaW50bWF4X3Q7Cit0eXBlZGVmIF9fVUlOVE1BWF9UWVBFX18gdWludG1heF90OworCisvKiBDOTkgNy4xOC40IE1hY3JvcyBmb3IgbWluaW11bS13aWR0aCBpbnRlZ2VyIGNvbnN0YW50cy4KKyAqCisgKiBUaGUgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBpbnRlZ2VyIGNvbnN0YW50IG1hY3JvcyBiZSBkZWZpbmVkIGZvciBhbGwgdGhlCisgKiBtaW5pbXVtLXdpZHRoIHR5cGVzIGRlZmluZWQgYWJvdmUuIEFzIDgtLCAxNi0sIDMyLSwgYW5kIDY0LWJpdCBtaW5pbXVtLXdpZHRoCisgKiB0eXBlcyBhcmUgcmVxdWlyZWQsIHRoZSBjb3JyZXNwb25kaW5nIGludGVnZXIgY29uc3RhbnQgbWFjcm9zIGFyZSBkZWZpbmVkCisgKiBoZXJlLiBUaGlzIGltcGxlbWVudGF0aW9uIGFsc28gZGVmaW5lcyBtaW5pbXVtLXdpZHRoIHR5cGVzIGZvciBldmVyeSBvdGhlcgorICogaW50ZWdlciB3aWR0aCB0aGF0IHRoZSB0YXJnZXQgaW1wbGVtZW50cywgc28gY29ycmVzcG9uZGluZyBtYWNyb3MgYXJlCisgKiBkZWZpbmVkIGJlbG93LCB0b28uCisgKgorICogVGhlc2UgbWFjcm9zIGFyZSBkZWZpbmVkIHVzaW5nIHRoZSBzYW1lIHN1Y2Nlc3NpdmUtc2hyaW5raW5nIGFwcHJvYWNoIGFzCisgKiB0aGUgdHlwZSBkZWZpbml0aW9ucyBhYm92ZS4gSXQgaXMgbGlrZXdpc2UgaW1wb3J0YW50IHRoYXQgbWFjcm9zIGFyZSBkZWZpbmVkCisgKiBpbiBvcmRlciBvZiBkZWNlbmRpbmcgd2lkdGguCisgKgorICogTm90ZSB0aGF0IEMrKyBzaG91bGQgbm90IGNoZWNrIF9fU1REQ19DT05TVEFOVF9NQUNST1MgaGVyZSwgY29udHJhcnkgdG8gdGhlCisgKiBjbGFpbXMgb2YgdGhlIEMgc3RhbmRhcmQgKHNlZSBDKysgMTguMy4xcDIsIFtjc3RkaW50LnN5bl0pLgorICovCisKKyNkZWZpbmUgX19pbnRfY19qb2luKGEsIGIpIGEgIyMgYgorI2RlZmluZSBfX2ludF9jKHYsIHN1ZmZpeCkgX19pbnRfY19qb2luKHYsIHN1ZmZpeCkKKyNkZWZpbmUgX191aW50X2Modiwgc3VmZml4KSBfX2ludF9jX2pvaW4odiMjVSwgc3VmZml4KQorCisKKyNpZmRlZiBfX0lOVDY0X1RZUEVfXworIyBpZmRlZiBfX0lOVDY0X0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDY0X2Nfc3VmZml4IF9fSU5UNjRfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50MzJfY19zdWZmaXggX19JTlQ2NF9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDY0X0NfU1VGRklYX18KKyMgIGRlZmluZSAgX19pbnQ4X2Nfc3VmZml4IF9fSU5UNjRfQ19TVUZGSVhfXworIyBlbHNlCisjICB1bmRlZiBfX2ludDY0X2Nfc3VmZml4CisjICB1bmRlZiBfX2ludDMyX2Nfc3VmZml4CisjICB1bmRlZiBfX2ludDE2X2Nfc3VmZml4CisjICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4CisjIGVuZGlmIC8qIF9fSU5UNjRfQ19TVUZGSVhfXyAqLworI2VuZGlmIC8qIF9fSU5UNjRfVFlQRV9fICovCisKKyNpZmRlZiBfX2ludF9sZWFzdDY0X3QKKyMgaWZkZWYgX19pbnQ2NF9jX3N1ZmZpeAorIyAgZGVmaW5lIElOVDY0X0ModikgX19pbnRfYyh2LCBfX2ludDY0X2Nfc3VmZml4KQorIyAgZGVmaW5lIFVJTlQ2NF9DKHYpIF9fdWludF9jKHYsIF9faW50NjRfY19zdWZmaXgpCisjIGVsc2UKKyMgIGRlZmluZSBJTlQ2NF9DKHYpIHYKKyMgIGRlZmluZSBVSU5UNjRfQyh2KSB2ICMjIFUKKyMgZW5kaWYgLyogX19pbnQ2NF9jX3N1ZmZpeCAqLworI2VuZGlmIC8qIF9faW50X2xlYXN0NjRfdCAqLworCisKKyNpZmRlZiBfX0lOVDU2X1RZUEVfXworIyBpZmRlZiBfX0lOVDU2X0NfU1VGRklYX18KKyMgIGRlZmluZSBJTlQ1Nl9DKHYpIF9faW50X2ModiwgX19JTlQ1Nl9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIFVJTlQ1Nl9DKHYpIF9fdWludF9jKHYsIF9fSU5UNTZfQ19TVUZGSVhfXykKKyMgIGRlZmluZSBfX2ludDMyX2Nfc3VmZml4IF9fSU5UNTZfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50MTZfY19zdWZmaXggX19JTlQ1Nl9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQ4X2Nfc3VmZml4ICBfX0lOVDU2X0NfU1VGRklYX18KKyMgZWxzZQorIyAgZGVmaW5lIElOVDU2X0ModikgdgorIyAgZGVmaW5lIFVJTlQ1Nl9DKHYpIHYgIyMgVQorIyAgdW5kZWYgX19pbnQzMl9jX3N1ZmZpeAorIyAgdW5kZWYgX19pbnQxNl9jX3N1ZmZpeAorIyAgdW5kZWYgIF9faW50OF9jX3N1ZmZpeAorIyBlbmRpZiAvKiBfX0lOVDU2X0NfU1VGRklYX18gKi8KKyNlbmRpZiAvKiBfX0lOVDU2X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDQ4X1RZUEVfXworIyBpZmRlZiBfX0lOVDQ4X0NfU1VGRklYX18KKyMgIGRlZmluZSBJTlQ0OF9DKHYpIF9faW50X2ModiwgX19JTlQ0OF9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIFVJTlQ0OF9DKHYpIF9fdWludF9jKHYsIF9fSU5UNDhfQ19TVUZGSVhfXykKKyMgIGRlZmluZSBfX2ludDMyX2Nfc3VmZml4IF9fSU5UNDhfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50MTZfY19zdWZmaXggX19JTlQ0OF9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQ4X2Nfc3VmZml4ICBfX0lOVDQ4X0NfU1VGRklYX18KKyMgZWxzZQorIyAgZGVmaW5lIElOVDQ4X0ModikgdgorIyAgZGVmaW5lIFVJTlQ0OF9DKHYpIHYgIyMgVQorIyAgdW5kZWYgX19pbnQzMl9jX3N1ZmZpeAorIyAgdW5kZWYgX19pbnQxNl9jX3N1ZmZpeAorIyAgdW5kZWYgIF9faW50OF9jX3N1ZmZpeAorIyBlbmRpZiAvKiBfX0lOVDQ4X0NfU1VGRklYX18gKi8KKyNlbmRpZiAvKiBfX0lOVDQ4X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDQwX1RZUEVfXworIyBpZmRlZiBfX0lOVDQwX0NfU1VGRklYX18KKyMgIGRlZmluZSBJTlQ0MF9DKHYpIF9faW50X2ModiwgX19JTlQ0MF9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIFVJTlQ0MF9DKHYpIF9fdWludF9jKHYsIF9fSU5UNDBfQ19TVUZGSVhfXykKKyMgIGRlZmluZSBfX2ludDMyX2Nfc3VmZml4IF9fSU5UNDBfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50MTZfY19zdWZmaXggX19JTlQ0MF9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQ4X2Nfc3VmZml4ICBfX0lOVDQwX0NfU1VGRklYX18KKyMgZWxzZQorIyAgZGVmaW5lIElOVDQwX0ModikgdgorIyAgZGVmaW5lIFVJTlQ0MF9DKHYpIHYgIyMgVQorIyAgdW5kZWYgX19pbnQzMl9jX3N1ZmZpeAorIyAgdW5kZWYgX19pbnQxNl9jX3N1ZmZpeAorIyAgdW5kZWYgIF9faW50OF9jX3N1ZmZpeAorIyBlbmRpZiAvKiBfX0lOVDQwX0NfU1VGRklYX18gKi8KKyNlbmRpZiAvKiBfX0lOVDQwX1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDMyX1RZUEVfXworIyBpZmRlZiBfX0lOVDMyX0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDMyX2Nfc3VmZml4IF9fSU5UMzJfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50MTZfY19zdWZmaXggX19JTlQzMl9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQ4X2Nfc3VmZml4ICBfX0lOVDMyX0NfU1VGRklYX18KKyNlbHNlCisjICB1bmRlZiBfX2ludDMyX2Nfc3VmZml4CisjICB1bmRlZiBfX2ludDE2X2Nfc3VmZml4CisjICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4CisjIGVuZGlmIC8qIF9fSU5UMzJfQ19TVUZGSVhfXyAqLworI2VuZGlmIC8qIF9fSU5UMzJfVFlQRV9fICovCisKKyNpZmRlZiBfX2ludF9sZWFzdDMyX3QKKyMgaWZkZWYgX19pbnQzMl9jX3N1ZmZpeAorIyAgZGVmaW5lIElOVDMyX0ModikgX19pbnRfYyh2LCBfX2ludDMyX2Nfc3VmZml4KQorIyAgZGVmaW5lIFVJTlQzMl9DKHYpIF9fdWludF9jKHYsIF9faW50MzJfY19zdWZmaXgpCisjIGVsc2UKKyMgIGRlZmluZSBJTlQzMl9DKHYpIHYKKyMgIGRlZmluZSBVSU5UMzJfQyh2KSB2ICMjIFUKKyMgZW5kaWYgLyogX19pbnQzMl9jX3N1ZmZpeCAqLworI2VuZGlmIC8qIF9faW50X2xlYXN0MzJfdCAqLworCisKKyNpZmRlZiBfX0lOVDI0X1RZUEVfXworIyBpZmRlZiBfX0lOVDI0X0NfU1VGRklYX18KKyMgIGRlZmluZSBJTlQyNF9DKHYpIF9faW50X2ModiwgX19JTlQyNF9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIFVJTlQyNF9DKHYpIF9fdWludF9jKHYsIF9fSU5UMjRfQ19TVUZGSVhfXykKKyMgIGRlZmluZSBfX2ludDE2X2Nfc3VmZml4IF9fSU5UMjRfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50OF9jX3N1ZmZpeCAgX19JTlQyNF9DX1NVRkZJWF9fCisjIGVsc2UKKyMgIGRlZmluZSBJTlQyNF9DKHYpIHYKKyMgIGRlZmluZSBVSU5UMjRfQyh2KSB2ICMjIFUKKyMgIHVuZGVmIF9faW50MTZfY19zdWZmaXgKKyMgIHVuZGVmICBfX2ludDhfY19zdWZmaXgKKyMgZW5kaWYgLyogX19JTlQyNF9DX1NVRkZJWF9fICovCisjZW5kaWYgLyogX19JTlQyNF9UWVBFX18gKi8KKworCisjaWZkZWYgX19JTlQxNl9UWVBFX18KKyMgaWZkZWYgX19JTlQxNl9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDE2X0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggIF9fSU5UMTZfQ19TVUZGSVhfXworI2Vsc2UKKyMgIHVuZGVmIF9faW50MTZfY19zdWZmaXgKKyMgIHVuZGVmICBfX2ludDhfY19zdWZmaXgKKyMgZW5kaWYgLyogX19JTlQxNl9DX1NVRkZJWF9fICovCisjZW5kaWYgLyogX19JTlQxNl9UWVBFX18gKi8KKworI2lmZGVmIF9faW50X2xlYXN0MTZfdAorIyBpZmRlZiBfX2ludDE2X2Nfc3VmZml4CisjICBkZWZpbmUgSU5UMTZfQyh2KSBfX2ludF9jKHYsIF9faW50MTZfY19zdWZmaXgpCisjICBkZWZpbmUgVUlOVDE2X0ModikgX191aW50X2ModiwgX19pbnQxNl9jX3N1ZmZpeCkKKyMgZWxzZQorIyAgZGVmaW5lIElOVDE2X0ModikgdgorIyAgZGVmaW5lIFVJTlQxNl9DKHYpIHYgIyMgVQorIyBlbmRpZiAvKiBfX2ludDE2X2Nfc3VmZml4ICovCisjZW5kaWYgLyogX19pbnRfbGVhc3QxNl90ICovCisKKworI2lmZGVmIF9fSU5UOF9UWVBFX18KKyMgaWZkZWYgX19JTlQ4X0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggX19JTlQ4X0NfU1VGRklYX18KKyNlbHNlCisjICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4CisjIGVuZGlmIC8qIF9fSU5UOF9DX1NVRkZJWF9fICovCisjZW5kaWYgLyogX19JTlQ4X1RZUEVfXyAqLworCisjaWZkZWYgX19pbnRfbGVhc3Q4X3QKKyMgaWZkZWYgX19pbnQ4X2Nfc3VmZml4CisjICBkZWZpbmUgSU5UOF9DKHYpIF9faW50X2ModiwgX19pbnQ4X2Nfc3VmZml4KQorIyAgZGVmaW5lIFVJTlQ4X0ModikgX191aW50X2ModiwgX19pbnQ4X2Nfc3VmZml4KQorIyBlbHNlCisjICBkZWZpbmUgSU5UOF9DKHYpIHYKKyMgIGRlZmluZSBVSU5UOF9DKHYpIHYgIyMgVQorIyBlbmRpZiAvKiBfX2ludDhfY19zdWZmaXggKi8KKyNlbmRpZiAvKiBfX2ludF9sZWFzdDhfdCAqLworCisKKy8qIEM5OSA3LjE4LjIuMSBMaW1pdHMgb2YgZXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcy4KKyAqIEM5OSA3LjE4LjIuMiBMaW1pdHMgb2YgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzLgorICogQzk5IDcuMTguMi4zIExpbWl0cyBvZiBmYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcy4KKyAqCisgKiBUaGUgcHJlc2VuY2Ugb2YgbGltaXQgbWFjcm9zIGFyZSBjb21wbGV0ZWx5IG9wdGlvbmFsIGluIEM5OS4gIFRoaXMKKyAqIGltcGxlbWVudGF0aW9uIGRlZmluZXMgbGltaXRzIGZvciBhbGwgb2YgdGhlIHR5cGVzIChleGFjdC0gYW5kCisgKiBtaW5pbXVtLXdpZHRoKSB0aGF0IGl0IGRlZmluZXMgYWJvdmUsIHVzaW5nIHRoZSBsaW1pdHMgb2YgdGhlIG1pbmltdW0td2lkdGgKKyAqIHR5cGUgZm9yIGFueSB0eXBlcyB0aGF0IGRvIG5vdCBoYXZlIGV4YWN0LXdpZHRoIHJlcHJlc2VudGF0aW9ucy4KKyAqCisgKiBBcyBpbiB0aGUgdHlwZSBkZWZpbml0aW9ucywgdGhpcyBzZWN0aW9uIHRha2VzIGFuIGFwcHJvYWNoIG9mCisgKiBzdWNjZXNzaXZlLXNocmlua2luZyB0byBkZXRlcm1pbmUgd2hpY2ggbGltaXRzIHRvIHVzZSBmb3IgdGhlIHN0YW5kYXJkICg4LAorICogMTYsIDMyLCA2NCkgYml0IHdpZHRocyB3aGVuIHRoZXkgZG9uJ3QgaGF2ZSBleGFjdCByZXByZXNlbnRhdGlvbnMuIEl0IGlzCisgKiB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgdGhlIGRlZmludGlvbnMgYmUga2VwdCBpbiBvcmRlciBvZiBkZWNlbmRpbmcKKyAqIHdpZHRocy4KKyAqCisgKiBOb3RlIHRoYXQgQysrIHNob3VsZCBub3QgY2hlY2sgX19TVERDX0xJTUlUX01BQ1JPUyBoZXJlLCBjb250cmFyeSB0byB0aGUKKyAqIGNsYWltcyBvZiB0aGUgQyBzdGFuZGFyZCAoc2VlIEMrKyAxOC4zLjFwMiwgW2NzdGRpbnQuc3luXSkuCisgKi8KKworI2lmZGVmIF9fSU5UNjRfVFlQRV9fCisjIGRlZmluZSBJTlQ2NF9NQVggICAgICAgICAgIElOVDY0X0MoIDkyMjMzNzIwMzY4NTQ3NzU4MDcpCisjIGRlZmluZSBJTlQ2NF9NSU4gICAgICAgICAoLUlOVDY0X0MoIDkyMjMzNzIwMzY4NTQ3NzU4MDcpLTEpCisjIGRlZmluZSBVSU5UNjRfTUFYICAgICAgICAgVUlOVDY0X0MoMTg0NDY3NDQwNzM3MDk1NTE2MTUpCisjIGRlZmluZSBfX0lOVF9MRUFTVDY0X01JTiAgIElOVDY0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1Q2NF9NQVggICBJTlQ2NF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDY0X01BWCBVSU5UNjRfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDMyX01JTiAgIElOVDY0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NQVggICBJTlQ2NF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDMyX01BWCBVSU5UNjRfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01JTiAgIElOVDY0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NQVggICBJTlQ2NF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDE2X01BWCBVSU5UNjRfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDY0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01BWCAgICBJTlQ2NF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UNjRfTUFYCisjZW5kaWYgLyogX19JTlQ2NF9UWVBFX18gKi8KKworI2lmZGVmIF9fSU5UX0xFQVNUNjRfTUlOCisjIGRlZmluZSBJTlRfTEVBU1Q2NF9NSU4gICBfX0lOVF9MRUFTVDY0X01JTgorIyBkZWZpbmUgSU5UX0xFQVNUNjRfTUFYICAgX19JTlRfTEVBU1Q2NF9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1Q2NF9NQVggX19VSU5UX0xFQVNUNjRfTUFYCisjIGRlZmluZSBJTlRfRkFTVDY0X01JTiAgICBfX0lOVF9MRUFTVDY0X01JTgorIyBkZWZpbmUgSU5UX0ZBU1Q2NF9NQVggICAgX19JTlRfTEVBU1Q2NF9NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDY0X01BWCAgX19VSU5UX0xFQVNUNjRfTUFYCisjZW5kaWYgLyogX19JTlRfTEVBU1Q2NF9NSU4gKi8KKworCisjaWZkZWYgX19JTlQ1Nl9UWVBFX18KKyMgZGVmaW5lIElOVDU2X01BWCAgICAgICAgICAgSU5UNTZfQygzNjAyODc5NzAxODk2Mzk2NykKKyMgZGVmaW5lIElOVDU2X01JTiAgICAgICAgICgtSU5UNTZfQygzNjAyODc5NzAxODk2Mzk2NyktMSkKKyMgZGVmaW5lIFVJTlQ1Nl9NQVggICAgICAgICBVSU5UNTZfQyg3MjA1NzU5NDAzNzkyNzkzNSkKKyMgZGVmaW5lIElOVF9MRUFTVDU2X01JTiAgICAgSU5UNTZfTUlOCisjIGRlZmluZSBJTlRfTEVBU1Q1Nl9NQVggICAgIElOVDU2X01BWAorIyBkZWZpbmUgVUlOVF9MRUFTVDU2X01BWCAgIFVJTlQ1Nl9NQVgKKyMgZGVmaW5lIElOVF9GQVNUNTZfTUlOICAgICAgSU5UNTZfTUlOCisjIGRlZmluZSBJTlRfRkFTVDU2X01BWCAgICAgIElOVDU2X01BWAorIyBkZWZpbmUgVUlOVF9GQVNUNTZfTUFYICAgIFVJTlQ1Nl9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUlOICAgSU5UNTZfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDMyX01BWCAgIElOVDU2X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUMzJfTUFYIFVJTlQ1Nl9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUlOICAgSU5UNTZfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01BWCAgIElOVDU2X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUMTZfTUFYIFVJTlQ1Nl9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UNTZfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDU2X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUOF9NQVggIFVJTlQ1Nl9NQVgKKyNlbmRpZiAvKiBfX0lOVDU2X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDQ4X1RZUEVfXworIyBkZWZpbmUgSU5UNDhfTUFYICAgICAgICAgICBJTlQ0OF9DKDE0MDczNzQ4ODM1NTMyNykKKyMgZGVmaW5lIElOVDQ4X01JTiAgICAgICAgICgtSU5UNDhfQygxNDA3Mzc0ODgzNTUzMjcpLTEpCisjIGRlZmluZSBVSU5UNDhfTUFYICAgICAgICAgVUlOVDQ4X0MoMjgxNDc0OTc2NzEwNjU1KQorIyBkZWZpbmUgSU5UX0xFQVNUNDhfTUlOICAgICBJTlQ0OF9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDQ4X01BWCAgICAgSU5UNDhfTUFYCisjIGRlZmluZSBVSU5UX0xFQVNUNDhfTUFYICAgVUlOVDQ4X01BWAorIyBkZWZpbmUgSU5UX0ZBU1Q0OF9NSU4gICAgICBJTlQ0OF9NSU4KKyMgZGVmaW5lIElOVF9GQVNUNDhfTUFYICAgICAgSU5UNDhfTUFYCisjIGRlZmluZSBVSU5UX0ZBU1Q0OF9NQVggICAgVUlOVDQ4X01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NSU4gICBJTlQ0OF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUFYICAgSU5UNDhfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1QzMl9NQVggVUlOVDQ4X01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NSU4gICBJTlQ0OF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUFYICAgSU5UNDhfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1QxNl9NQVggVUlOVDQ4X01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01JTiAgICBJTlQ0OF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NQVggICAgSU5UNDhfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1Q4X01BWCAgVUlOVDQ4X01BWAorI2VuZGlmIC8qIF9fSU5UNDhfVFlQRV9fICovCisKKworI2lmZGVmIF9fSU5UNDBfVFlQRV9fCisjIGRlZmluZSBJTlQ0MF9NQVggICAgICAgICAgIElOVDQwX0MoNTQ5NzU1ODEzODg3KQorIyBkZWZpbmUgSU5UNDBfTUlOICAgICAgICAgKC1JTlQ0MF9DKDU0OTc1NTgxMzg4NyktMSkKKyMgZGVmaW5lIFVJTlQ0MF9NQVggICAgICAgICBVSU5UNDBfQygxMDk5NTExNjI3Nzc1KQorIyBkZWZpbmUgSU5UX0xFQVNUNDBfTUlOICAgICBJTlQ0MF9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDQwX01BWCAgICAgSU5UNDBfTUFYCisjIGRlZmluZSBVSU5UX0xFQVNUNDBfTUFYICAgVUlOVDQwX01BWAorIyBkZWZpbmUgSU5UX0ZBU1Q0MF9NSU4gICAgICBJTlQ0MF9NSU4KKyMgZGVmaW5lIElOVF9GQVNUNDBfTUFYICAgICAgSU5UNDBfTUFYCisjIGRlZmluZSBVSU5UX0ZBU1Q0MF9NQVggICAgVUlOVDQwX01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NSU4gICBJTlQ0MF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUFYICAgSU5UNDBfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1QzMl9NQVggVUlOVDQwX01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NSU4gICBJTlQ0MF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUFYICAgSU5UNDBfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1QxNl9NQVggVUlOVDQwX01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01JTiAgICBJTlQ0MF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NQVggICAgSU5UNDBfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1Q4X01BWCAgVUlOVDQwX01BWAorI2VuZGlmIC8qIF9fSU5UNDBfVFlQRV9fICovCisKKworI2lmZGVmIF9fSU5UMzJfVFlQRV9fCisjIGRlZmluZSBJTlQzMl9NQVggICAgICAgICAgIElOVDMyX0MoMjE0NzQ4MzY0NykKKyMgZGVmaW5lIElOVDMyX01JTiAgICAgICAgICgtSU5UMzJfQygyMTQ3NDgzNjQ3KS0xKQorIyBkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgIFVJTlQzMl9DKDQyOTQ5NjcyOTUpCisjIGRlZmluZSBfX0lOVF9MRUFTVDMyX01JTiAgIElOVDMyX01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NQVggICBJTlQzMl9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDMyX01BWCBVSU5UMzJfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01JTiAgIElOVDMyX01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NQVggICBJTlQzMl9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDE2X01BWCBVSU5UMzJfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDMyX01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01BWCAgICBJTlQzMl9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UMzJfTUFYCisjZW5kaWYgLyogX19JTlQzMl9UWVBFX18gKi8KKworI2lmZGVmIF9fSU5UX0xFQVNUMzJfTUlOCisjIGRlZmluZSBJTlRfTEVBU1QzMl9NSU4gICBfX0lOVF9MRUFTVDMyX01JTgorIyBkZWZpbmUgSU5UX0xFQVNUMzJfTUFYICAgX19JTlRfTEVBU1QzMl9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1QzMl9NQVggX19VSU5UX0xFQVNUMzJfTUFYCisjIGRlZmluZSBJTlRfRkFTVDMyX01JTiAgICBfX0lOVF9MRUFTVDMyX01JTgorIyBkZWZpbmUgSU5UX0ZBU1QzMl9NQVggICAgX19JTlRfTEVBU1QzMl9NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDMyX01BWCAgX19VSU5UX0xFQVNUMzJfTUFYCisjZW5kaWYgLyogX19JTlRfTEVBU1QzMl9NSU4gKi8KKworCisjaWZkZWYgX19JTlQyNF9UWVBFX18KKyMgZGVmaW5lIElOVDI0X01BWCAgICAgICAgICAgSU5UMjRfQyg4Mzg4NjA3KQorIyBkZWZpbmUgSU5UMjRfTUlOICAgICAgICAgKC1JTlQyNF9DKDgzODg2MDcpLTEpCisjIGRlZmluZSBVSU5UMjRfTUFYICAgICAgICAgVUlOVDI0X0MoMTY3NzcyMTUpCisjIGRlZmluZSBJTlRfTEVBU1QyNF9NSU4gICAgIElOVDI0X01JTgorIyBkZWZpbmUgSU5UX0xFQVNUMjRfTUFYICAgICBJTlQyNF9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1QyNF9NQVggICBVSU5UMjRfTUFYCisjIGRlZmluZSBJTlRfRkFTVDI0X01JTiAgICAgIElOVDI0X01JTgorIyBkZWZpbmUgSU5UX0ZBU1QyNF9NQVggICAgICBJTlQyNF9NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDI0X01BWCAgICBVSU5UMjRfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01JTiAgIElOVDI0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NQVggICBJTlQyNF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDE2X01BWCBVSU5UMjRfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDI0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01BWCAgICBJTlQyNF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UMjRfTUFYCisjZW5kaWYgLyogX19JTlQyNF9UWVBFX18gKi8KKworCisjaWZkZWYgX19JTlQxNl9UWVBFX18KKyNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgSU5UMTZfQygzMjc2NykKKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICgtSU5UMTZfQygzMjc2NyktMSkKKyNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICBVSU5UMTZfQyg2NTUzNSkKKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUlOICAgSU5UMTZfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01BWCAgIElOVDE2X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUMTZfTUFYIFVJTlQxNl9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UMTZfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDE2X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUOF9NQVggIFVJTlQxNl9NQVgKKyNlbmRpZiAvKiBfX0lOVDE2X1RZUEVfXyAqLworCisjaWZkZWYgX19JTlRfTEVBU1QxNl9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDE2X01JTiAgIF9fSU5UX0xFQVNUMTZfTUlOCisjIGRlZmluZSBJTlRfTEVBU1QxNl9NQVggICBfX0lOVF9MRUFTVDE2X01BWAorIyBkZWZpbmUgVUlOVF9MRUFTVDE2X01BWCBfX1VJTlRfTEVBU1QxNl9NQVgKKyMgZGVmaW5lIElOVF9GQVNUMTZfTUlOICAgIF9fSU5UX0xFQVNUMTZfTUlOCisjIGRlZmluZSBJTlRfRkFTVDE2X01BWCAgICBfX0lOVF9MRUFTVDE2X01BWAorIyBkZWZpbmUgVUlOVF9GQVNUMTZfTUFYICBfX1VJTlRfTEVBU1QxNl9NQVgKKyNlbmRpZiAvKiBfX0lOVF9MRUFTVDE2X01JTiAqLworCisKKyNpZmRlZiBfX0lOVDhfVFlQRV9fCisjIGRlZmluZSBJTlQ4X01BWCAgICAgICAgICAgIElOVDhfQygxMjcpCisjIGRlZmluZSBJTlQ4X01JTiAgICAgICAgICAoLUlOVDhfQygxMjcpLTEpCisjIGRlZmluZSBVSU5UOF9NQVggICAgICAgICAgVUlOVDhfQygyNTUpCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDhfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDhfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1Q4X01BWCAgVUlOVDhfTUFYCisjZW5kaWYgLyogX19JTlQ4X1RZUEVfXyAqLworCisjaWZkZWYgX19JTlRfTEVBU1Q4X01JTgorIyBkZWZpbmUgSU5UX0xFQVNUOF9NSU4gICBfX0lOVF9MRUFTVDhfTUlOCisjIGRlZmluZSBJTlRfTEVBU1Q4X01BWCAgIF9fSU5UX0xFQVNUOF9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1Q4X01BWCBfX1VJTlRfTEVBU1Q4X01BWAorIyBkZWZpbmUgSU5UX0ZBU1Q4X01JTiAgICBfX0lOVF9MRUFTVDhfTUlOCisjIGRlZmluZSBJTlRfRkFTVDhfTUFYICAgIF9fSU5UX0xFQVNUOF9NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDhfTUFYICBfX1VJTlRfTEVBU1Q4X01BWAorI2VuZGlmIC8qIF9fSU5UX0xFQVNUOF9NSU4gKi8KKworLyogU29tZSB1dGlsaXR5IG1hY3JvcyAqLworI2RlZmluZSAgX19JTlROX01JTihuKSAgX19zdGRpbnRfam9pbjMoIElOVCwgbiwgX01JTikKKyNkZWZpbmUgIF9fSU5UTl9NQVgobikgIF9fc3RkaW50X2pvaW4zKCBJTlQsIG4sIF9NQVgpCisjZGVmaW5lIF9fVUlOVE5fTUFYKG4pICBfX3N0ZGludF9qb2luMyhVSU5ULCBuLCBfTUFYKQorI2RlZmluZSAgX19JTlROX0MobiwgdikgX19zdGRpbnRfam9pbjMoIElOVCwgbiwgX0ModikpCisjZGVmaW5lIF9fVUlOVE5fQyhuLCB2KSBfX3N0ZGludF9qb2luMyhVSU5ULCBuLCBfQyh2KSkKKworLyogQzk5IDcuMTguMi40IExpbWl0cyBvZiBpbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMuICovCisvKiBDOTkgNy4xOC4zIExpbWl0cyBvZiBvdGhlciBpbnRlZ2VyIHR5cGVzLiAqLworCisjZGVmaW5lICBJTlRQVFJfTUlOICBfX0lOVE5fTUlOKF9fSU5UUFRSX1dJRFRIX18pCisjZGVmaW5lICBJTlRQVFJfTUFYICBfX0lOVE5fTUFYKF9fSU5UUFRSX1dJRFRIX18pCisjZGVmaW5lIFVJTlRQVFJfTUFYIF9fVUlOVE5fTUFYKF9fSU5UUFRSX1dJRFRIX18pCisjZGVmaW5lIFBUUkRJRkZfTUlOICBfX0lOVE5fTUlOKF9fUFRSRElGRl9XSURUSF9fKQorI2RlZmluZSBQVFJESUZGX01BWCAgX19JTlROX01BWChfX1BUUkRJRkZfV0lEVEhfXykKKyNkZWZpbmUgICAgU0laRV9NQVggX19VSU5UTl9NQVgoX19TSVpFX1dJRFRIX18pCisKKy8qIElTTzk4OTk6MjAxMSA3LjIwIChDMTEgQW5uZXggSyk6IERlZmluZSBSU0laRV9NQVggaWYgX19TVERDX1dBTlRfTElCX0VYVDFfXworICogaXMgZW5hYmxlZC4gKi8KKyNpZiBkZWZpbmVkKF9fU1REQ19XQU5UX0xJQl9FWFQxX18pICYmIF9fU1REQ19XQU5UX0xJQl9FWFQxX18gPj0gMQorI2RlZmluZSAgIFJTSVpFX01BWCAgICAgICAgICAgIChTSVpFX01BWCA+PiAxKQorI2VuZGlmCisKKy8qIEM5OSA3LjE4LjIuNSBMaW1pdHMgb2YgZ3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcy4gKi8KKyNkZWZpbmUgSU5UTUFYX01JTiAgIF9fSU5UTl9NSU4oX19JTlRNQVhfV0lEVEhfXykKKyNkZWZpbmUgSU5UTUFYX01BWCAgIF9fSU5UTl9NQVgoX19JTlRNQVhfV0lEVEhfXykKKyNkZWZpbmUgVUlOVE1BWF9NQVggX19VSU5UTl9NQVgoX19JTlRNQVhfV0lEVEhfXykKKworLyogQzk5IDcuMTguMyBMaW1pdHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcy4gKi8KKyNkZWZpbmUgU0lHX0FUT01JQ19NSU4gX19JTlROX01JTihfX1NJR19BVE9NSUNfV0lEVEhfXykKKyNkZWZpbmUgU0lHX0FUT01JQ19NQVggX19JTlROX01BWChfX1NJR19BVE9NSUNfV0lEVEhfXykKKyNpZmRlZiBfX1dJTlRfVU5TSUdORURfXworIyBkZWZpbmUgV0lOVF9NSU4gICAgICAgX19VSU5UTl9DKF9fV0lOVF9XSURUSF9fLCAwKQorIyBkZWZpbmUgV0lOVF9NQVggICAgICAgX19VSU5UTl9NQVgoX19XSU5UX1dJRFRIX18pCisjZWxzZQorIyBkZWZpbmUgV0lOVF9NSU4gICAgICAgX19JTlROX01JTihfX1dJTlRfV0lEVEhfXykKKyMgZGVmaW5lIFdJTlRfTUFYICAgICAgIF9fSU5UTl9NQVgoX19XSU5UX1dJRFRIX18pCisjZW5kaWYKKworI2lmbmRlZiBXQ0hBUl9NQVgKKyMgZGVmaW5lIFdDSEFSX01BWCBfX1dDSEFSX01BWF9fCisjZW5kaWYKKyNpZm5kZWYgV0NIQVJfTUlOCisjIGlmIF9fV0NIQVJfTUFYX18gPT0gX19JTlROX01BWChfX1dDSEFSX1dJRFRIX18pCisjICBkZWZpbmUgV0NIQVJfTUlOIF9fSU5UTl9NSU4oX19XQ0hBUl9XSURUSF9fKQorIyBlbHNlCisjICBkZWZpbmUgV0NIQVJfTUlOIF9fVUlOVE5fQyhfX1dDSEFSX1dJRFRIX18sIDApCisjIGVuZGlmCisjZW5kaWYKKworLyogNy4xOC40LjIgTWFjcm9zIGZvciBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgSU5UTUFYX0ModikgICBfX0lOVE5fQyhfX0lOVE1BWF9XSURUSF9fLCB2KQorI2RlZmluZSBVSU5UTUFYX0ModikgX19VSU5UTl9DKF9fSU5UTUFYX1dJRFRIX18sIHYpCisKKyNlbmRpZiAvKiBfX1NURENfSE9TVEVEX18gKi8KKyNlbmRpZiAvKiBfX0NMQU5HX1NURElOVF9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZG5vcmV0dXJuLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZG5vcmV0dXJuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhMzAxZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3Rkbm9yZXR1cm4uaApAQCAtMCwwICsxLDMwIEBACisvKj09PS0tLS0gc3Rkbm9yZXR1cm4uaCAtIFN0YW5kYXJkIGhlYWRlciBmb3Igbm9yZXR1cm4gbWFjcm8gLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fU1RETk9SRVRVUk5fSAorI2RlZmluZSBfX1NURE5PUkVUVVJOX0gKKworI2RlZmluZSBub3JldHVybiBfTm9yZXR1cm4KKyNkZWZpbmUgX19ub3JldHVybl9pc19kZWZpbmVkIDEKKworI2VuZGlmIC8qIF9fU1RETk9SRVRVUk5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS90Ym1pbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdGJtaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwZDc0NgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdGJtaW50cmluLmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qPT09LS0tLSB0Ym1pbnRyaW4uaCAtIFRCTSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YODZJTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHRibWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19UQk1JTlRSSU5fSAorI2RlZmluZSBfX1RCTUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygidGJtIikpKQorCisjZGVmaW5lIF9fYmV4dHJpX3UzMihhLCBiKSBcCisgICgodW5zaWduZWQgaW50KV9fYnVpbHRpbl9pYTMyX2JleHRyaV91MzIoKHVuc2lnbmVkIGludCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KShiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxjZmlsbF91MzIodW5zaWduZWQgaW50IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSAmIChfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNpX3UzMih1bnNpZ25lZCBpbnQgX19hKQoreworICByZXR1cm4gX19hIHwgfihfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNpY191MzIodW5zaWduZWQgaW50IF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgJiAoX19hICsgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxjbXNrX3UzMih1bnNpZ25lZCBpbnQgX19hKQoreworICByZXR1cm4gX19hIF4gKF9fYSArIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2JsY3NfdTMyKHVuc2lnbmVkIGludCBfX2EpCit7CisgIHJldHVybiBfX2EgfCAoX19hICsgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxzZmlsbF91MzIodW5zaWduZWQgaW50IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSB8IChfX2EgLSAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNpY191MzIodW5zaWduZWQgaW50IF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgfCAoX19hIC0gMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fdDFtc2tjX3UzMih1bnNpZ25lZCBpbnQgX19hKQoreworICByZXR1cm4gfl9fYSB8IChfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX190em1za191MzIodW5zaWduZWQgaW50IF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgJiAoX19hIC0gMSk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9fYmV4dHJpX3U2NChhLCBiKSBcCisgICgodW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9pYTMyX2JleHRyaV91NjQoKHVuc2lnbmVkIGxvbmcgbG9uZykoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxjZmlsbF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fYSkKK3sKKyAgcmV0dXJuIF9fYSAmIChfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNpX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19hKQoreworICByZXR1cm4gX19hIHwgfihfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNpY191NjQodW5zaWduZWQgbG9uZyBsb25nIF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgJiAoX19hICsgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxjbXNrX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19hKQoreworICByZXR1cm4gX19hIF4gKF9fYSArIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2JsY3NfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpCit7CisgIHJldHVybiBfX2EgfCAoX19hICsgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxzZmlsbF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fYSkKK3sKKyAgcmV0dXJuIF9fYSB8IChfX2EgLSAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNpY191NjQodW5zaWduZWQgbG9uZyBsb25nIF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgfCAoX19hIC0gMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fdDFtc2tjX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19hKQoreworICByZXR1cm4gfl9fYSB8IChfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX190em1za191NjQodW5zaWduZWQgbG9uZyBsb25nIF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgJiAoX19hIC0gMSk7Cit9CisjZW5kaWYKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19UQk1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS90Z21hdGguaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdGdtYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4ZTExOAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdGdtYXRoLmgKQEAgLTAsMCArMSwxMzc0IEBACisvKj09PS0tLS0gdGdtYXRoLmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIHR5cGUgZ2VuZXJpYyBtYXRoIC0tLS0tLS0tLS0tLS0tLS09PT0qXAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBIb3dhcmQgSGlubmFudAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCitcKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLworCisjaWZuZGVmIF9fVEdNQVRIX0gKKyNkZWZpbmUgX19UR01BVEhfSAorCisvKiBDOTkgNy4yMiBUeXBlLWdlbmVyaWMgbWF0aCA8dGdtYXRoLmg+LiAqLworI2luY2x1ZGUgPG1hdGguaD4KKworLyogQysrIGhhbmRsZXMgdHlwZSBnZW5lcmljaXR5IHdpdGggb3ZlcmxvYWRpbmcgaW4gbWF0aC5oLiAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworI2luY2x1ZGUgPGNvbXBsZXguaD4KKworI2RlZmluZSBfVEdfQVRUUlNwIF9fYXR0cmlidXRlX18oKF9fb3ZlcmxvYWRhYmxlX18pKQorI2RlZmluZSBfVEdfQVRUUlMgX19hdHRyaWJ1dGVfXygoX19vdmVybG9hZGFibGVfXywgX19hbHdheXNfaW5saW5lX18pKQorCisvLyBwcm9tb3Rpb24KKwordHlwZWRlZiB2b2lkIF9Bcmd1bWVudF90eXBlX2lzX25vdF9hcml0aG1ldGljOworc3RhdGljIF9Bcmd1bWVudF90eXBlX2lzX25vdF9hcml0aG1ldGljIF9fdGdfcHJvbW90ZSguLi4pCisgIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXyxfX292ZXJsb2FkYWJsZV9fKSk7CitzdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUoaW50KTsKK3N0YXRpYyBkb3VibGUgICAgICAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZSh1bnNpZ25lZCBpbnQpOworc3RhdGljIGRvdWJsZSAgICAgICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKGxvbmcpOworc3RhdGljIGRvdWJsZSAgICAgICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIGRvdWJsZSAgICAgICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKGxvbmcgbG9uZyk7CitzdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUodW5zaWduZWQgbG9uZyBsb25nKTsKK3N0YXRpYyBmbG9hdCAgICAgICAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShmbG9hdCk7CitzdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUoZG91YmxlKTsKK3N0YXRpYyBsb25nIGRvdWJsZSAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShsb25nIGRvdWJsZSk7CitzdGF0aWMgZmxvYXQgX0NvbXBsZXggICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUoZmxvYXQgX0NvbXBsZXgpOworc3RhdGljIGRvdWJsZSBfQ29tcGxleCAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKGRvdWJsZSBfQ29tcGxleCk7CitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXggX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUobG9uZyBkb3VibGUgX0NvbXBsZXgpOworCisjZGVmaW5lIF9fdGdfcHJvbW90ZTEoX194KSAgICAgICAgICAgKF9fdHlwZW9mX18oX190Z19wcm9tb3RlKF9feCkpKQorI2RlZmluZSBfX3RnX3Byb21vdGUyKF9feCwgX195KSAgICAgIChfX3R5cGVvZl9fKF9fdGdfcHJvbW90ZShfX3gpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZShfX3kpKSkKKyNkZWZpbmUgX190Z19wcm9tb3RlMyhfX3gsIF9feSwgX196KSAoX190eXBlb2ZfXyhfX3RnX3Byb21vdGUoX194KSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUoX195KSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUoX196KSkpCisKKy8vIGFjb3MKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zKGZsb2F0IF9feCkge3JldHVybiBhY29zZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvcyhkb3VibGUgX194KSB7cmV0dXJuIGFjb3MoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvcyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYWNvc2woX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvcyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fjb3NmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fjb3MoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvcyhsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fjb3NsKF9feCk7fQorCisjdW5kZWYgYWNvcworI2RlZmluZSBhY29zKF9feCkgX190Z19hY29zKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGFzaW4KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luKGZsb2F0IF9feCkge3JldHVybiBhc2luZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbihkb3VibGUgX194KSB7cmV0dXJuIGFzaW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYXNpbmwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbihmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FzaW5mKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FzaW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbihsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FzaW5sKF9feCk7fQorCisjdW5kZWYgYXNpbgorI2RlZmluZSBhc2luKF9feCkgX190Z19hc2luKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGF0YW4KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuKGZsb2F0IF9feCkge3JldHVybiBhdGFuZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbihkb3VibGUgX194KSB7cmV0dXJuIGF0YW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYXRhbmwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbihmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2F0YW5mKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2F0YW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbihsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2F0YW5sKF9feCk7fQorCisjdW5kZWYgYXRhbgorI2RlZmluZSBhdGFuKF9feCkgX190Z19hdGFuKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGFjb3NoCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvc2goZmxvYXQgX194KSB7cmV0dXJuIGFjb3NoZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvc2goZG91YmxlIF9feCkge3JldHVybiBhY29zaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zaChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYWNvc2hsKF9feCk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Fjb3NoKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYWNvc2hmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zaChkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhY29zaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zaChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fjb3NobChfX3gpO30KKworI3VuZGVmIGFjb3NoCisjZGVmaW5lIGFjb3NoKF9feCkgX190Z19hY29zaChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBhc2luaAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2FzaW5oKGZsb2F0IF9feCkge3JldHVybiBhc2luaGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2FzaW5oKGRvdWJsZSBfX3gpIHtyZXR1cm4gYXNpbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbmgobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGFzaW5obChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luaChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FzaW5oZihfX3gpO30KKworc3RhdGljIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbmgoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXNpbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbmgobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhc2luaGwoX194KTt9CisKKyN1bmRlZiBhc2luaAorI2RlZmluZSBhc2luaChfX3gpIF9fdGdfYXNpbmgoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gYXRhbmgKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuaChmbG9hdCBfX3gpIHtyZXR1cm4gYXRhbmhmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuaChkb3VibGUgX194KSB7cmV0dXJuIGF0YW5oKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW5oKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBhdGFuaGwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbmgoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhdGFuaGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW5oKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2F0YW5oKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW5oKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXRhbmhsKF9feCk7fQorCisjdW5kZWYgYXRhbmgKKyNkZWZpbmUgYXRhbmgoX194KSBfX3RnX2F0YW5oKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGNvcworCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvcyhmbG9hdCBfX3gpIHtyZXR1cm4gY29zZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zKGRvdWJsZSBfX3gpIHtyZXR1cm4gY29zKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nvcyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gY29zbChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3MoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNjb3NmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3MoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjY29zKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nvcyhsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Nvc2woX194KTt9CisKKyN1bmRlZiBjb3MKKyNkZWZpbmUgY29zKF9feCkgX190Z19jb3MoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gc2luCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luKGZsb2F0IF9feCkge3JldHVybiBzaW5mKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW4oZG91YmxlIF9feCkge3JldHVybiBzaW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBzaW5sKF9feCk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NpbihmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NpbmYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3Npbihkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNzaW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjc2lubChfX3gpO30KKworI3VuZGVmIHNpbgorI2RlZmluZSBzaW4oX194KSBfX3RnX3NpbihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyB0YW4KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW4oZmxvYXQgX194KSB7cmV0dXJuIHRhbmYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3Rhbihkb3VibGUgX194KSB7cmV0dXJuIHRhbihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW4obG9uZyBkb3VibGUgX194KSB7cmV0dXJuIHRhbmwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjdGFuZihfX3gpO30KKworc3RhdGljIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3RhbihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW4obG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGN0YW5sKF9feCk7fQorCisjdW5kZWYgdGFuCisjZGVmaW5lIHRhbihfX3gpIF9fdGdfdGFuKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGNvc2gKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3NoKGZsb2F0IF9feCkge3JldHVybiBjb3NoZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zaChkb3VibGUgX194KSB7cmV0dXJuIGNvc2goX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zaChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gY29zaGwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zaChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Nvc2hmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3NoKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Nvc2goX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zaChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Nvc2hsKF9feCk7fQorCisjdW5kZWYgY29zaAorI2RlZmluZSBjb3NoKF9feCkgX190Z19jb3NoKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIHNpbmgKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW5oKGZsb2F0IF9feCkge3JldHVybiBzaW5oZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luaChkb3VibGUgX194KSB7cmV0dXJuIHNpbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luaChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gc2luaGwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luaChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NpbmhmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW5oKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NpbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luaChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NpbmhsKF9feCk7fQorCisjdW5kZWYgc2luaAorI2RlZmluZSBzaW5oKF9feCkgX190Z19zaW5oKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIHRhbmgKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW5oKGZsb2F0IF9feCkge3JldHVybiB0YW5oZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuaChkb3VibGUgX194KSB7cmV0dXJuIHRhbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuaChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gdGFuaGwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuaChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3RhbmhmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW5oKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3RhbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuaChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3RhbmhsKF9feCk7fQorCisjdW5kZWYgdGFuaAorI2RlZmluZSB0YW5oKF9feCkgX190Z190YW5oKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGV4cAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cChmbG9hdCBfX3gpIHtyZXR1cm4gZXhwZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXhwKGRvdWJsZSBfX3gpIHtyZXR1cm4gZXhwKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZXhwbChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHAoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNleHBmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHAoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjZXhwKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2V4cGwoX194KTt9CisKKyN1bmRlZiBleHAKKyNkZWZpbmUgZXhwKF9feCkgX190Z19leHAoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbG9nCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nKGZsb2F0IF9feCkge3JldHVybiBsb2dmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2coZG91YmxlIF9feCkge3JldHVybiBsb2coX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsb2dsKF9feCk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2xvZ2YoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZyhkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNsb2coX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjbG9nbChfX3gpO30KKworI3VuZGVmIGxvZworI2RlZmluZSBsb2coX194KSBfX3RnX2xvZyhfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBwb3cKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19wb3coZmxvYXQgX194LCBmbG9hdCBfX3kpIHtyZXR1cm4gcG93ZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19wb3coZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBwb3coX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19wb3cobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gcG93bChfX3gsIF9feSk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3BvdyhmbG9hdCBfQ29tcGxleCBfX3gsIGZsb2F0IF9Db21wbGV4IF9feSkge3JldHVybiBjcG93ZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19wb3coZG91YmxlIF9Db21wbGV4IF9feCwgZG91YmxlIF9Db21wbGV4IF9feSkge3JldHVybiBjcG93KF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfcG93KGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCwgbG9uZyBkb3VibGUgX0NvbXBsZXggX195KQorICAgIHtyZXR1cm4gY3Bvd2woX194LCBfX3kpO30KKworI3VuZGVmIHBvdworI2RlZmluZSBwb3coX194LCBfX3kpIF9fdGdfcG93KF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIHNxcnQKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zcXJ0KGZsb2F0IF9feCkge3JldHVybiBzcXJ0ZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc3FydChkb3VibGUgX194KSB7cmV0dXJuIHNxcnQoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc3FydChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gc3FydGwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc3FydChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NxcnRmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zcXJ0KGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NxcnQoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc3FydChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NxcnRsKF9feCk7fQorCisjdW5kZWYgc3FydAorI2RlZmluZSBzcXJ0KF9feCkgX190Z19zcXJ0KF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGZhYnMKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19mYWJzKGZsb2F0IF9feCkge3JldHVybiBmYWJzZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmFicyhkb3VibGUgX194KSB7cmV0dXJuIGZhYnMoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmFicyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZmFic2woX194KTt9CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmFicyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fic2YoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZhYnMoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYWJzKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZhYnMobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhYnNsKF9feCk7fQorCisjdW5kZWYgZmFicworI2RlZmluZSBmYWJzKF9feCkgX190Z19mYWJzKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGF0YW4yCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbjIoZmxvYXQgX194LCBmbG9hdCBfX3kpIHtyZXR1cm4gYXRhbjJmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW4yKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gYXRhbjIoX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuMihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBhdGFuMmwoX194LCBfX3kpO30KKworI3VuZGVmIGF0YW4yCisjZGVmaW5lIGF0YW4yKF9feCwgX195KSBfX3RnX2F0YW4yKF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3kpKQorCisvLyBjYnJ0CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2JydChmbG9hdCBfX3gpIHtyZXR1cm4gY2JydGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NicnQoZG91YmxlIF9feCkge3JldHVybiBjYnJ0KF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NicnQobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGNicnRsKF9feCk7fQorCisjdW5kZWYgY2JydAorI2RlZmluZSBjYnJ0KF9feCkgX190Z19jYnJ0KF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGNlaWwKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jZWlsKGZsb2F0IF9feCkge3JldHVybiBjZWlsZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2VpbChkb3VibGUgX194KSB7cmV0dXJuIGNlaWwoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2VpbChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gY2VpbGwoX194KTt9CisKKyN1bmRlZiBjZWlsCisjZGVmaW5lIGNlaWwoX194KSBfX3RnX2NlaWwoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gY29weXNpZ24KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3B5c2lnbihmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBjb3B5c2lnbmYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29weXNpZ24oZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBjb3B5c2lnbihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvcHlzaWduKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGNvcHlzaWdubChfX3gsIF9feSk7fQorCisjdW5kZWYgY29weXNpZ24KKyNkZWZpbmUgY29weXNpZ24oX194LCBfX3kpIF9fdGdfY29weXNpZ24oX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIGVyZgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2VyZihmbG9hdCBfX3gpIHtyZXR1cm4gZXJmZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXJmKGRvdWJsZSBfX3gpIHtyZXR1cm4gZXJmKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2VyZihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZXJmbChfX3gpO30KKworI3VuZGVmIGVyZgorI2RlZmluZSBlcmYoX194KSBfX3RnX2VyZihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBlcmZjCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXJmYyhmbG9hdCBfX3gpIHtyZXR1cm4gZXJmY2YoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2VyZmMoZG91YmxlIF9feCkge3JldHVybiBlcmZjKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2VyZmMobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGVyZmNsKF9feCk7fQorCisjdW5kZWYgZXJmYworI2RlZmluZSBlcmZjKF9feCkgX190Z19lcmZjKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGV4cDIKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHAyKGZsb2F0IF9feCkge3JldHVybiBleHAyZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXhwMihkb3VibGUgX194KSB7cmV0dXJuIGV4cDIoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXhwMihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZXhwMmwoX194KTt9CisKKyN1bmRlZiBleHAyCisjZGVmaW5lIGV4cDIoX194KSBfX3RnX2V4cDIoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gZXhwbTEKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHBtMShmbG9hdCBfX3gpIHtyZXR1cm4gZXhwbTFmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHBtMShkb3VibGUgX194KSB7cmV0dXJuIGV4cG0xKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cG0xKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBleHBtMWwoX194KTt9CisKKyN1bmRlZiBleHBtMQorI2RlZmluZSBleHBtMShfX3gpIF9fdGdfZXhwbTEoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gZmRpbQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZkaW0oZmxvYXQgX194LCBmbG9hdCBfX3kpIHtyZXR1cm4gZmRpbWYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmRpbShkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIGZkaW0oX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mZGltKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGZkaW1sKF9feCwgX195KTt9CisKKyN1bmRlZiBmZGltCisjZGVmaW5lIGZkaW0oX194LCBfX3kpIF9fdGdfZmRpbShfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIGZsb29yCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmxvb3IoZmxvYXQgX194KSB7cmV0dXJuIGZsb29yZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmxvb3IoZG91YmxlIF9feCkge3JldHVybiBmbG9vcihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbG9vcihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZmxvb3JsKF9feCk7fQorCisjdW5kZWYgZmxvb3IKKyNkZWZpbmUgZmxvb3IoX194KSBfX3RnX2Zsb29yKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGZtYQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZtYShmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KQorICAgIHtyZXR1cm4gZm1hZihfX3gsIF9feSwgX196KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZtYShkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KQorICAgIHtyZXR1cm4gZm1hKF9feCwgX195LCBfX3opO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbWEobG9uZyBkb3VibGUgX194LGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KQorICAgIHtyZXR1cm4gZm1hbChfX3gsIF9feSwgX196KTt9CisKKyN1bmRlZiBmbWEKKyNkZWZpbmUgZm1hKF9feCwgX195LCBfX3opICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fdGdfZm1hKF9fdGdfcHJvbW90ZTMoKF9feCksIChfX3kpLCAoX196KSkoX194KSwgXAorICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUzKChfX3gpLCAoX195KSwgKF9feikpKF9feSksIFwKKyAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMygoX194KSwgKF9feSksIChfX3opKShfX3opKQorCisvLyBmbWF4CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZm1heChmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBmbWF4ZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbWF4KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gZm1heChfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZtYXgobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gZm1heGwoX194LCBfX3kpO30KKworI3VuZGVmIGZtYXgKKyNkZWZpbmUgZm1heChfX3gsIF9feSkgX190Z19mbWF4KF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKKworLy8gZm1pbgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZtaW4oZmxvYXQgX194LCBmbG9hdCBfX3kpIHtyZXR1cm4gZm1pbmYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZm1pbihkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIGZtaW4oX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbWluKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGZtaW5sKF9feCwgX195KTt9CisKKyN1bmRlZiBmbWluCisjZGVmaW5lIGZtaW4oX194LCBfX3kpIF9fdGdfZm1pbihfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIGZtb2QKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbW9kKGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIGZtb2RmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Ztb2QoZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBmbW9kKF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBmbW9kbChfX3gsIF9feSk7fQorCisjdW5kZWYgZm1vZAorI2RlZmluZSBmbW9kKF9feCwgX195KSBfX3RnX2Ztb2QoX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3kpKQorCisvLyBmcmV4cAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZyZXhwKGZsb2F0IF9feCwgaW50KiBfX3kpIHtyZXR1cm4gZnJleHBmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZyZXhwKGRvdWJsZSBfX3gsIGludCogX195KSB7cmV0dXJuIGZyZXhwKF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZnJleHAobG9uZyBkb3VibGUgX194LCBpbnQqIF9feSkge3JldHVybiBmcmV4cGwoX194LCBfX3kpO30KKworI3VuZGVmIGZyZXhwCisjZGVmaW5lIGZyZXhwKF9feCwgX195KSBfX3RnX2ZyZXhwKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCksIF9feSkKKworLy8gaHlwb3QKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19oeXBvdChmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBoeXBvdGYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfaHlwb3QoZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBoeXBvdChfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2h5cG90KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGh5cG90bChfX3gsIF9feSk7fQorCisjdW5kZWYgaHlwb3QKKyNkZWZpbmUgaHlwb3QoX194LCBfX3kpIF9fdGdfaHlwb3QoX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIGlsb2diCisKK3N0YXRpYyBpbnQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2lsb2diKGZsb2F0IF9feCkge3JldHVybiBpbG9nYmYoX194KTt9CisKK3N0YXRpYyBpbnQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2lsb2diKGRvdWJsZSBfX3gpIHtyZXR1cm4gaWxvZ2IoX194KTt9CisKK3N0YXRpYyBpbnQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2lsb2diKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBpbG9nYmwoX194KTt9CisKKyN1bmRlZiBpbG9nYgorI2RlZmluZSBpbG9nYihfX3gpIF9fdGdfaWxvZ2IoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbGRleHAKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19sZGV4cChmbG9hdCBfX3gsIGludCBfX3kpIHtyZXR1cm4gbGRleHBmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xkZXhwKGRvdWJsZSBfX3gsIGludCBfX3kpIHtyZXR1cm4gbGRleHAoX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX3kpIHtyZXR1cm4gbGRleHBsKF9feCwgX195KTt9CisKKyN1bmRlZiBsZGV4cAorI2RlZmluZSBsZGV4cChfX3gsIF9feSkgX190Z19sZGV4cChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpLCBfX3kpCisKKy8vIGxnYW1tYQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xnYW1tYShmbG9hdCBfX3gpIHtyZXR1cm4gbGdhbW1hZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbGdhbW1hKGRvdWJsZSBfX3gpIHtyZXR1cm4gbGdhbW1hKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xnYW1tYShsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gbGdhbW1hbChfX3gpO30KKworI3VuZGVmIGxnYW1tYQorI2RlZmluZSBsZ2FtbWEoX194KSBfX3RnX2xnYW1tYShfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBsbHJpbnQKKworc3RhdGljIGxvbmcgbG9uZworICAgIF9UR19BVFRSUworICAgIF9fdGdfbGxyaW50KGZsb2F0IF9feCkge3JldHVybiBsbHJpbnRmKF9feCk7fQorCitzdGF0aWMgbG9uZyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sbHJpbnQoZG91YmxlIF9feCkge3JldHVybiBsbHJpbnQoX194KTt9CisKK3N0YXRpYyBsb25nIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xscmludChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gbGxyaW50bChfX3gpO30KKworI3VuZGVmIGxscmludAorI2RlZmluZSBsbHJpbnQoX194KSBfX3RnX2xscmludChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBsbHJvdW5kCisKK3N0YXRpYyBsb25nIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xscm91bmQoZmxvYXQgX194KSB7cmV0dXJuIGxscm91bmRmKF9feCk7fQorCitzdGF0aWMgbG9uZyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sbHJvdW5kKGRvdWJsZSBfX3gpIHtyZXR1cm4gbGxyb3VuZChfX3gpO30KKworc3RhdGljIGxvbmcgbG9uZworICAgIF9UR19BVFRSUworICAgIF9fdGdfbGxyb3VuZChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gbGxyb3VuZGwoX194KTt9CisKKyN1bmRlZiBsbHJvdW5kCisjZGVmaW5lIGxscm91bmQoX194KSBfX3RnX2xscm91bmQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbG9nMTAKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cxMChmbG9hdCBfX3gpIHtyZXR1cm4gbG9nMTBmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cxMChkb3VibGUgX194KSB7cmV0dXJuIGxvZzEwKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzEwKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsb2cxMGwoX194KTt9CisKKyN1bmRlZiBsb2cxMAorI2RlZmluZSBsb2cxMChfX3gpIF9fdGdfbG9nMTAoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbG9nMXAKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cxcChmbG9hdCBfX3gpIHtyZXR1cm4gbG9nMXBmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cxcChkb3VibGUgX194KSB7cmV0dXJuIGxvZzFwKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzFwKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsb2cxcGwoX194KTt9CisKKyN1bmRlZiBsb2cxcAorI2RlZmluZSBsb2cxcChfX3gpIF9fdGdfbG9nMXAoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbG9nMgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzIoZmxvYXQgX194KSB7cmV0dXJuIGxvZzJmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cyKGRvdWJsZSBfX3gpIHtyZXR1cm4gbG9nMihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cyKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsb2cybChfX3gpO30KKworI3VuZGVmIGxvZzIKKyNkZWZpbmUgbG9nMihfX3gpIF9fdGdfbG9nMihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBsb2diCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nYihmbG9hdCBfX3gpIHtyZXR1cm4gbG9nYmYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZ2IoZG91YmxlIF9feCkge3JldHVybiBsb2diKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZ2IobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxvZ2JsKF9feCk7fQorCisjdW5kZWYgbG9nYgorI2RlZmluZSBsb2diKF9feCkgX190Z19sb2diKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGxyaW50CisKK3N0YXRpYyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19scmludChmbG9hdCBfX3gpIHtyZXR1cm4gbHJpbnRmKF9feCk7fQorCitzdGF0aWMgbG9uZworICAgIF9UR19BVFRSUworICAgIF9fdGdfbHJpbnQoZG91YmxlIF9feCkge3JldHVybiBscmludChfX3gpO30KKworc3RhdGljIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xyaW50KGxvbmcgZG91YmxlIF9feCkge3JldHVybiBscmludGwoX194KTt9CisKKyN1bmRlZiBscmludAorI2RlZmluZSBscmludChfX3gpIF9fdGdfbHJpbnQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbHJvdW5kCisKK3N0YXRpYyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19scm91bmQoZmxvYXQgX194KSB7cmV0dXJuIGxyb3VuZGYoX194KTt9CisKK3N0YXRpYyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19scm91bmQoZG91YmxlIF9feCkge3JldHVybiBscm91bmQoX194KTt9CisKK3N0YXRpYyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19scm91bmQobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxyb3VuZGwoX194KTt9CisKKyN1bmRlZiBscm91bmQKKyNkZWZpbmUgbHJvdW5kKF9feCkgX190Z19scm91bmQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbmVhcmJ5aW50CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbmVhcmJ5aW50KGZsb2F0IF9feCkge3JldHVybiBuZWFyYnlpbnRmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19uZWFyYnlpbnQoZG91YmxlIF9feCkge3JldHVybiBuZWFyYnlpbnQoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbmVhcmJ5aW50KGxvbmcgZG91YmxlIF9feCkge3JldHVybiBuZWFyYnlpbnRsKF9feCk7fQorCisjdW5kZWYgbmVhcmJ5aW50CisjZGVmaW5lIG5lYXJieWludChfX3gpIF9fdGdfbmVhcmJ5aW50KF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIG5leHRhZnRlcgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX25leHRhZnRlcihmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBuZXh0YWZ0ZXJmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX25leHRhZnRlcihkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIG5leHRhZnRlcihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX25leHRhZnRlcihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBuZXh0YWZ0ZXJsKF9feCwgX195KTt9CisKKyN1bmRlZiBuZXh0YWZ0ZXIKKyNkZWZpbmUgbmV4dGFmdGVyKF9feCwgX195KSBfX3RnX25leHRhZnRlcihfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3kpKQorCisvLyBuZXh0dG93YXJkCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbmV4dHRvd2FyZChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBuZXh0dG93YXJkZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19uZXh0dG93YXJkKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBuZXh0dG93YXJkKF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbmV4dHRvd2FyZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBuZXh0dG93YXJkbChfX3gsIF9feSk7fQorCisjdW5kZWYgbmV4dHRvd2FyZAorI2RlZmluZSBuZXh0dG93YXJkKF9feCwgX195KSBfX3RnX25leHR0b3dhcmQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSwgKF9feSkpCisKKy8vIHJlbWFpbmRlcgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JlbWFpbmRlcihmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiByZW1haW5kZXJmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JlbWFpbmRlcihkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIHJlbWFpbmRlcihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JlbWFpbmRlcihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiByZW1haW5kZXJsKF9feCwgX195KTt9CisKKyN1bmRlZiByZW1haW5kZXIKKyNkZWZpbmUgcmVtYWluZGVyKF9feCwgX195KSBfX3RnX3JlbWFpbmRlcihfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3kpKQorCisvLyByZW1xdW8KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19yZW1xdW8oZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCogX196KQorICAgIHtyZXR1cm4gcmVtcXVvZihfX3gsIF9feSwgX196KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JlbXF1byhkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQqIF9feikKKyAgICB7cmV0dXJuIHJlbXF1byhfX3gsIF9feSwgX196KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfcmVtcXVvKGxvbmcgZG91YmxlIF9feCxsb25nIGRvdWJsZSBfX3ksIGludCogX196KQorICAgIHtyZXR1cm4gcmVtcXVvbChfX3gsIF9feSwgX196KTt9CisKKyN1bmRlZiByZW1xdW8KKyNkZWZpbmUgcmVtcXVvKF9feCwgX195LCBfX3opICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX190Z19yZW1xdW8oX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKKyAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSksIFwKKyAgICAgICAgICAgICAgICAgICAgKF9feikpCisKKy8vIHJpbnQKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19yaW50KGZsb2F0IF9feCkge3JldHVybiByaW50ZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfcmludChkb3VibGUgX194KSB7cmV0dXJuIHJpbnQoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfcmludChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gcmludGwoX194KTt9CisKKyN1bmRlZiByaW50CisjZGVmaW5lIHJpbnQoX194KSBfX3RnX3JpbnQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gcm91bmQKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19yb3VuZChmbG9hdCBfX3gpIHtyZXR1cm4gcm91bmRmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19yb3VuZChkb3VibGUgX194KSB7cmV0dXJuIHJvdW5kKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JvdW5kKGxvbmcgZG91YmxlIF9feCkge3JldHVybiByb3VuZGwoX194KTt9CisKKyN1bmRlZiByb3VuZAorI2RlZmluZSByb3VuZChfX3gpIF9fdGdfcm91bmQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gc2NhbGJuCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2NhbGJuKGZsb2F0IF9feCwgaW50IF9feSkge3JldHVybiBzY2FsYm5mKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NjYWxibihkb3VibGUgX194LCBpbnQgX195KSB7cmV0dXJuIHNjYWxibihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NjYWxibihsb25nIGRvdWJsZSBfX3gsIGludCBfX3kpIHtyZXR1cm4gc2NhbGJubChfX3gsIF9feSk7fQorCisjdW5kZWYgc2NhbGJuCisjZGVmaW5lIHNjYWxibihfX3gsIF9feSkgX190Z19zY2FsYm4oX190Z19wcm9tb3RlMSgoX194KSkoX194KSwgX195KQorCisvLyBzY2FsYmxuCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2NhbGJsbihmbG9hdCBfX3gsIGxvbmcgX195KSB7cmV0dXJuIHNjYWxibG5mKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NjYWxibG4oZG91YmxlIF9feCwgbG9uZyBfX3kpIHtyZXR1cm4gc2NhbGJsbihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NjYWxibG4obG9uZyBkb3VibGUgX194LCBsb25nIF9feSkge3JldHVybiBzY2FsYmxubChfX3gsIF9feSk7fQorCisjdW5kZWYgc2NhbGJsbgorI2RlZmluZSBzY2FsYmxuKF9feCwgX195KSBfX3RnX3NjYWxibG4oX190Z19wcm9tb3RlMSgoX194KSkoX194KSwgX195KQorCisvLyB0Z2FtbWEKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z190Z2FtbWEoZmxvYXQgX194KSB7cmV0dXJuIHRnYW1tYWYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3RnYW1tYShkb3VibGUgX194KSB7cmV0dXJuIHRnYW1tYShfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z190Z2FtbWEobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIHRnYW1tYWwoX194KTt9CisKKyN1bmRlZiB0Z2FtbWEKKyNkZWZpbmUgdGdhbW1hKF9feCkgX190Z190Z2FtbWEoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gdHJ1bmMKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z190cnVuYyhmbG9hdCBfX3gpIHtyZXR1cm4gdHJ1bmNmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z190cnVuYyhkb3VibGUgX194KSB7cmV0dXJuIHRydW5jKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3RydW5jKGxvbmcgZG91YmxlIF9feCkge3JldHVybiB0cnVuY2woX194KTt9CisKKyN1bmRlZiB0cnVuYworI2RlZmluZSB0cnVuYyhfX3gpIF9fdGdfdHJ1bmMoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gY2FyZworCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NhcmcoZmxvYXQgX194KSB7cmV0dXJuIGF0YW4yZigwLkYsIF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jYXJnKGRvdWJsZSBfX3gpIHtyZXR1cm4gYXRhbjIoMC4sIF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NhcmcobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGF0YW4ybCgwLkwsIF9feCk7fQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NhcmcoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhcmdmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jYXJnKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FyZyhfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jYXJnKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXJnbChfX3gpO30KKworI3VuZGVmIGNhcmcKKyNkZWZpbmUgY2FyZyhfX3gpIF9fdGdfY2FyZyhfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBjaW1hZworCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NpbWFnKGZsb2F0IF9feCkge3JldHVybiAwO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2ltYWcoZG91YmxlIF9feCkge3JldHVybiAwO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jaW1hZyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gMDt9CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2ltYWcoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNpbWFnZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2ltYWcoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjaW1hZyhfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jaW1hZyhsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2ltYWdsKF9feCk7fQorCisjdW5kZWYgY2ltYWcKKyNkZWZpbmUgY2ltYWcoX194KSBfX3RnX2NpbWFnKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGNvbmoKKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb25qKGZsb2F0IF9feCkge3JldHVybiBfX3g7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb25qKGRvdWJsZSBfX3gpIHtyZXR1cm4gX194O30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb25qKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBfX3g7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvbmooZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNvbmpmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb25qKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY29uaihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb25qKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjb25qbChfX3gpO30KKworI3VuZGVmIGNvbmoKKyNkZWZpbmUgY29uaihfX3gpIF9fdGdfY29uaihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBjcHJvagorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nwcm9qKGZsb2F0IF9feCkge3JldHVybiBjcHJvamYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nwcm9qKGRvdWJsZSBfX3gpIHtyZXR1cm4gY3Byb2ooX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3Byb2oobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGNwcm9qbChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jcHJvaihmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3Byb2pmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jcHJvaihkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNwcm9qKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nwcm9qKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjcHJvamwoX194KTt9CisKKyN1bmRlZiBjcHJvagorI2RlZmluZSBjcHJvaihfX3gpIF9fdGdfY3Byb2ooX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gY3JlYWwKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jcmVhbChmbG9hdCBfX3gpIHtyZXR1cm4gX194O30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3JlYWwoZG91YmxlIF9feCkge3JldHVybiBfX3g7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NyZWFsKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBfX3g7fQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NyZWFsKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjcmVhbGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NyZWFsKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3JlYWwoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3JlYWwobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNyZWFsbChfX3gpO30KKworI3VuZGVmIGNyZWFsCisjZGVmaW5lIGNyZWFsKF9feCkgX190Z19jcmVhbChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisjdW5kZWYgX1RHX0FUVFJTcAorI3VuZGVmIF9UR19BVFRSUworCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNlbmRpZiAvKiBfX1RHTUFUSF9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3RtbWludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS90bW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzI3OTZiCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS90bW1pbnRyaW4uaApAQCAtMCwwICsxLDc3MyBAQAorLyo9PT0tLS0tIHRtbWludHJpbi5oIC0gU1NTRTMgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1RNTUlOVFJJTl9ICisjZGVmaW5lIF9fVE1NSU5UUklOX0gKKworI2luY2x1ZGUgPHBtbWludHJpbi5oPgorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInNzc2UzIikpKQorCisvLy8gXGJyaWVmIENvbXB1dGVzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBlYWNoIG9mIHRoZSBwYWNrZWQgOC1iaXQgc2lnbmVkCisvLy8gICAgaW50ZWdlcnMgaW4gdGhlIHNvdXJjZSBvcGVyYW5kIGFuZCBzdG9yZXMgdGhlIDgtYml0IHVuc2lnbmVkIGludGVnZXIKKy8vLyAgICByZXN1bHRzIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUJTQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZQorLy8vICAgIGVsZW1lbnRzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWJzX3BpOChfX202NCBfX2EpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWJzYigoX192OHFpKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGVhY2ggb2YgdGhlIHBhY2tlZCA4LWJpdCBzaWduZWQKKy8vLyAgICBpbnRlZ2VycyBpbiB0aGUgc291cmNlIG9wZXJhbmQgYW5kIHN0b3JlcyB0aGUgOC1iaXQgdW5zaWduZWQgaW50ZWdlcgorLy8vICAgIHJlc3VsdHMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQQUJTQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsxNiB4IGk4XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZQorLy8vICAgIGVsZW1lbnRzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hYnNfZXBpOChfX20xMjhpIF9fYSkKK3sKKyAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFic2IxMjgoKF9fdjE2cWkpX19hKTsKK30KKworLy8vIFxicmllZiBDb21wdXRlcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgZWFjaCBvZiB0aGUgcGFja2VkIDE2LWJpdCBzaWduZWQKKy8vLyAgICBpbnRlZ2VycyBpbiB0aGUgc291cmNlIG9wZXJhbmQgYW5kIHN0b3JlcyB0aGUgMTYtYml0IHVuc2lnbmVkIGludGVnZXIKKy8vLyAgICByZXN1bHRzIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUJTVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlcyBvZiB0aGUKKy8vLyAgICBlbGVtZW50cyBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Fic19waTE2KF9fbTY0IF9fYSkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhYnN3KChfX3Y0aGkpX19hKTsKK30KKworLy8vIFxicmllZiBDb21wdXRlcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgZWFjaCBvZiB0aGUgcGFja2VkIDE2LWJpdCBzaWduZWQKKy8vLyAgICBpbnRlZ2VycyBpbiB0aGUgc291cmNlIG9wZXJhbmQgYW5kIHN0b3JlcyB0aGUgMTYtYml0IHVuc2lnbmVkIGludGVnZXIKKy8vLyAgICByZXN1bHRzIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEFCU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlcyBvZiB0aGUKKy8vLyAgICBlbGVtZW50cyBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWJzX2VwaTE2KF9fbTEyOGkgX19hKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWJzdzEyOCgoX192OGhpKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGVhY2ggb2YgdGhlIHBhY2tlZCAzMi1iaXQgc2lnbmVkCisvLy8gICAgaW50ZWdlcnMgaW4gdGhlIHNvdXJjZSBvcGVyYW5kIGFuZCBzdG9yZXMgdGhlIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyCisvLy8gICAgcmVzdWx0cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFCU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZXMgb2YgdGhlCisvLy8gICAgZWxlbWVudHMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hYnNfcGkzMihfX202NCBfX2EpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWJzZCgoX192MnNpKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGVhY2ggb2YgdGhlIHBhY2tlZCAzMi1iaXQgc2lnbmVkCisvLy8gICAgaW50ZWdlcnMgaW4gdGhlIHNvdXJjZSBvcGVyYW5kIGFuZCBzdG9yZXMgdGhlIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyCisvLy8gICAgcmVzdWx0cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBBQlNEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZXMgb2YgdGhlCisvLy8gICAgZWxlbWVudHMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Fic19lcGkzMihfX20xMjhpIF9fYSkKK3sKKyAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFic2QxMjgoKF9fdjRzaSlfX2EpOworfQorCisvLy8gXGJyaWVmIENvbmNhdGVuYXRlcyB0aGUgdHdvIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZHMsIGFuZAorLy8vICAgIHJpZ2h0LXNoaWZ0cyB0aGUgcmVzdWx0IGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgc3BlY2lmaWVkIGluIHRoZSBpbW1lZGlhdGUKKy8vLyAgICBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20xMjhpIF9tbV9hbGlnbnJfZXBpOChfX20xMjhpIGEsIF9fbTEyOGkgYiwgY29uc3QgaW50IG4pOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFMSUdOUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMTYgeCBpOF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzE2IHggaThdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIG4KKy8vLyAgICBBbiBpbW1lZGlhdGUgb3BlcmFuZCBzcGVjaWZ5aW5nIGhvdyBtYW55IGJ5dGVzIHRvIHJpZ2h0LXNoaWZ0IHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbmNhdGVuYXRlZCByaWdodC1zaGlmdGVkCisvLy8gICAgdmFsdWUuCisjZGVmaW5lIF9tbV9hbGlnbnJfZXBpOChhLCBiLCBuKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFsaWducjEyOCgoX192MTZxaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoYiksIChuKSk7IH0pCisKKy8vLyBcYnJpZWYgQ29uY2F0ZW5hdGVzIHRoZSB0d28gNjQtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmRzLCBhbmQgcmlnaHQtc2hpZnRzCisvLy8gICAgdGhlIHJlc3VsdCBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNwZWNpZmllZCBpbiB0aGUgaW1tZWRpYXRlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTY0IF9tbV9hbGlnbnJfcGk4KF9fbTY0IGEsIF9fbTY0IGIsIGNvbnN0IGludCBuKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBBTElHTlIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbOCB4IGk4XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBiCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIG4KKy8vLyAgICBBbiBpbW1lZGlhdGUgb3BlcmFuZCBzcGVjaWZ5aW5nIGhvdyBtYW55IGJ5dGVzIHRvIHJpZ2h0LXNoaWZ0IHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29uY2F0ZW5hdGVkIHJpZ2h0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZS4KKyNkZWZpbmUgX21tX2FsaWducl9waTgoYSwgYiwgbikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX202NClfX2J1aWx0aW5faWEzMl9wYWxpZ25yKChfX3Y4cWkpKF9fbTY0KShhKSwgKF9fdjhxaSkoX19tNjQpKGIpLCAobikpOyB9KQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBhZGRzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIDIgcGFja2VkCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs4IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEhBRERXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzggeCBpMTZdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzggeCBpMTZdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIHVwcGVyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBzdW1zIG9mCisvLy8gICAgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BoYWRkdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBhZGRzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIDIgcGFja2VkCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEhBREREIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIHVwcGVyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBzdW1zIG9mCisvLy8gICAgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZF9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BoYWRkZDEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBhZGRzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIDIgcGFja2VkCisvLy8gICAgNjQtYml0IHZlY3RvcnMgb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBIQUREVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgc3VtcyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9waGFkZHcoKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKK30KKworLy8vIFxicmllZiBIb3Jpem9udGFsbHkgYWRkcyB0aGUgYWRqYWNlbnQgcGFpcnMgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiAyIHBhY2tlZAorLy8vICAgIDY0LWJpdCB2ZWN0b3JzIG9mIFsyIHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQSEFEREQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLiBUaGUKKy8vLyAgICBob3Jpem9udGFsIHN1bXMgb2YgdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSBsb3dlciBiaXRzIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIHVwcGVyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIHN1bXMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZF9waTMyKF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGhhZGRkKChfX3Yyc2kpX19hLCAoX192MnNpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IGFkZHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMiBwYWNrZWQKKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzggeCBpMTZdLiBQb3NpdGl2ZSBzdW1zIGdyZWF0ZXIgdGhhbiA3RkZGaCBhcmUKKy8vLyAgICBzYXR1cmF0ZWQgdG8gN0ZGRmguIE5lZ2F0aXZlIHN1bXMgbGVzcyB0aGFuIDgwMDBoIGFyZSBzYXR1cmF0ZWQgdG8gODAwMGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBIQUREU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIHNhdHVyYXRlZAorLy8vICAgIHN1bXMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9waGFkZHN3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IGFkZHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMiBwYWNrZWQKKy8vLyAgICA2NC1iaXQgdmVjdG9ycyBvZiBbNCB4IGkxNl0uIFBvc2l0aXZlIHN1bXMgZ3JlYXRlciB0aGFuIDdGRkZoIGFyZQorLy8vICAgIHNhdHVyYXRlZCB0byA3RkZGaC4gTmVnYXRpdmUgc3VtcyBsZXNzIHRoYW4gODAwMGggYXJlIHNhdHVyYXRlZCB0byA4MDAwaC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQSEFERFNXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLiBUaGUKKy8vLyAgICBob3Jpem9udGFsIHN1bXMgb2YgdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSB1cHBlciBiaXRzIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBzYXR1cmF0ZWQKKy8vLyAgICBzdW1zIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkc19waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGhhZGRzdygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBzdWJ0cmFjdHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMgorLy8vICAgIHBhY2tlZCAxMjgtYml0IHZlY3RvcnMgb2YgWzggeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQSFNVQlcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIGRpZmZlcmVuY2VzCisvLy8gICAgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1Yl9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Boc3VidzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBzdWJ0cmFjdHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMgorLy8vICAgIHBhY2tlZCAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQSFNVQkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIGRpZmZlcmVuY2VzCisvLy8gICAgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1Yl9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Boc3ViZDEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBzdWJ0cmFjdHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMgorLy8vICAgIHBhY2tlZCA2NC1iaXQgdmVjdG9ycyBvZiBbNCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEhTVUJXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLiBUaGUKKy8vLyAgICBob3Jpem9udGFsIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSB1cHBlciBiaXRzIG9mCisvLy8gICAgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcworLy8vICAgIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oc3ViX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9waHN1YncoKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKK30KKworLy8vIFxicmllZiBIb3Jpem9udGFsbHkgc3VidHJhY3RzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIDIKKy8vLyAgICBwYWNrZWQgNjQtYml0IHZlY3RvcnMgb2YgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBIU1VCRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YKKy8vLyAgICB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgZGlmZmVyZW5jZXMKKy8vLyAgICBvZiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1Yl9waTMyKF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGhzdWJkKChfX3Yyc2kpX19hLCAoX192MnNpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IHN1YnRyYWN0cyB0aGUgYWRqYWNlbnQgcGFpcnMgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiAyCisvLy8gICAgcGFja2VkIDEyOC1iaXQgdmVjdG9ycyBvZiBbOCB4IGkxNl0uIFBvc2l0aXZlIGRpZmZlcmVuY2VzIGdyZWF0ZXIgdGhhbgorLy8vICAgIDdGRkZoIGFyZSBzYXR1cmF0ZWQgdG8gN0ZGRmguIE5lZ2F0aXZlIGRpZmZlcmVuY2VzIGxlc3MgdGhhbiA4MDAwaCBhcmUKKy8vLyAgICBzYXR1cmF0ZWQgdG8gODAwMGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBIU1VCU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIHNhdHVyYXRlZAorLy8vICAgIGRpZmZlcmVuY2VzIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGhzdWJzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBzdWJ0cmFjdHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMgorLy8vICAgIHBhY2tlZCA2NC1iaXQgdmVjdG9ycyBvZiBbNCB4IGkxNl0uIFBvc2l0aXZlIGRpZmZlcmVuY2VzIGdyZWF0ZXIgdGhhbgorLy8vICAgIDdGRkZoIGFyZSBzYXR1cmF0ZWQgdG8gN0ZGRmguIE5lZ2F0aXZlIGRpZmZlcmVuY2VzIGxlc3MgdGhhbiA4MDAwaCBhcmUKKy8vLyAgICBzYXR1cmF0ZWQgdG8gODAwMGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEhTVUJTVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YKKy8vLyAgICB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgc2F0dXJhdGVkCisvLy8gICAgZGlmZmVyZW5jZXMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJzX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9waHN1YnN3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyBjb3JyZXNwb25kaW5nIHBhaXJzIG9mIHBhY2tlZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyCisvLy8gICAgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQgYW5kIHBhY2tlZCA4LWJpdCBzaWduZWQKKy8vLyAgICBpbnRlZ2VyIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZCwgYWRkcyBwYWlycyBvZgorLy8vICAgIGNvbnRpZ3VvdXMgcHJvZHVjdHMgd2l0aCBzaWduZWQgc2F0dXJhdGlvbiwgYW5kIHdyaXRlcyB0aGUgMTYtYml0IHN1bXMgdG8KKy8vLyAgICB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGluIHRoZSBkZXN0aW5hdGlvbi4gRm9yIGV4YW1wbGUsIGJpdHMgWzc6MF0gb2YKKy8vLyAgICBib3RoIG9wZXJhbmRzIGFyZSBtdWx0aXBsaWVkLCBiaXRzIFsxNTo4XSBvZiBib3RoIG9wZXJhbmRzIGFyZQorLy8vICAgIG11bHRpcGxpZWQsIGFuZCB0aGUgc3VtIG9mIGJvdGggcmVzdWx0cyBpcyB3cml0dGVuIHRvIGJpdHMgWzE1OjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQTUFERFVCU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc2Vjb25kIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdW1zIG9mIHByb2R1Y3RzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kczoKKy8vLyAgICBSMCA6PSAoX19hMCAqIF9fYjApICsgKF9fYTEgKiBfX2IxKQorLy8vICAgIFIxIDo9IChfX2EyICogX19iMikgKyAoX19hMyAqIF9fYjMpCisvLy8gICAgUjIgOj0gKF9fYTQgKiBfX2I0KSArIChfX2E1ICogX19iNSkKKy8vLyAgICBSMyA6PSAoX19hNiAqIF9fYjYpICsgKF9fYTcgKiBfX2I3KQorLy8vICAgIFI0IDo9IChfX2E4ICogX19iOCkgKyAoX19hOSAqIF9fYjkpCisvLy8gICAgUjUgOj0gKF9fYTEwICogX19iMTApICsgKF9fYTExICogX19iMTEpCisvLy8gICAgUjYgOj0gKF9fYTEyICogX19iMTIpICsgKF9fYTEzICogX19iMTMpCisvLy8gICAgUjcgOj0gKF9fYTE0ICogX19iMTQpICsgKF9fYTE1ICogX19iMTUpCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGR1YnNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbWFkZHVic3cxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgY29ycmVzcG9uZGluZyBwYWlycyBvZiBwYWNrZWQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcgorLy8vICAgIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kIGFuZCBwYWNrZWQgOC1iaXQgc2lnbmVkCisvLy8gICAgaW50ZWdlciB2YWx1ZXMgY29udGFpbmVkIGluIHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQsIGFkZHMgcGFpcnMgb2YKKy8vLyAgICBjb250aWd1b3VzIHByb2R1Y3RzIHdpdGggc2lnbmVkIHNhdHVyYXRpb24sIGFuZCB3cml0ZXMgdGhlIDE2LWJpdCBzdW1zIHRvCisvLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgZGVzdGluYXRpb24uIEZvciBleGFtcGxlLCBiaXRzIFs3OjBdIG9mCisvLy8gICAgYm90aCBvcGVyYW5kcyBhcmUgbXVsdGlwbGllZCwgYml0cyBbMTU6OF0gb2YgYm90aCBvcGVyYW5kcyBhcmUKKy8vLyAgICBtdWx0aXBsaWVkLCBhbmQgdGhlIHN1bSBvZiBib3RoIHJlc3VsdHMgaXMgd3JpdHRlbiB0byBiaXRzIFsxNTowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQTUFERFVCU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdW1zIG9mIHByb2R1Y3RzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kczoKKy8vLyAgICBSMCA6PSAoX19hMCAqIF9fYjApICsgKF9fYTEgKiBfX2IxKQorLy8vICAgIFIxIDo9IChfX2EyICogX19iMikgKyAoX19hMyAqIF9fYjMpCisvLy8gICAgUjIgOj0gKF9fYTQgKiBfX2I0KSArIChfX2E1ICogX19iNSkKKy8vLyAgICBSMyA6PSAoX19hNiAqIF9fYjYpICsgKF9fYTcgKiBfX2I3KQorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFkZHVic19waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG1hZGR1YnN3KChfX3Y4cWkpX19hLCAoX192OHFpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyBwYWNrZWQgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlcywgdHJ1bmNhdGVzIHRoZSAzMi1iaXQKKy8vLyAgICBwcm9kdWN0cyB0byB0aGUgMTggbW9zdCBzaWduaWZpY2FudCBiaXRzIGJ5IHJpZ2h0LXNoaWZ0aW5nLCByb3VuZHMgdGhlCisvLy8gICAgdHJ1bmNhdGVkIHZhbHVlIGJ5IGFkZGluZyAxLCBhbmQgd3JpdGVzIGJpdHMgWzE2OjFdIHRvIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUE1VTEhSU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSBjb250YWluaW5nIHRoZSByb3VuZGVkIGFuZCBzY2FsZWQKKy8vLyAgICBwcm9kdWN0cyBvZiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxocnNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgcGFja2VkIDE2LWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZXMsIHRydW5jYXRlcyB0aGUgMzItYml0CisvLy8gICAgcHJvZHVjdHMgdG8gdGhlIDE4IG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBieSByaWdodC1zaGlmdGluZywgcm91bmRzIHRoZQorLy8vICAgIHRydW5jYXRlZCB2YWx1ZSBieSBhZGRpbmcgMSwgYW5kIHdyaXRlcyBiaXRzIFsxNjoxXSB0byB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE1VTEhSU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSByb3VuZGVkIGFuZCBzY2FsZWQKKy8vLyAgICBwcm9kdWN0cyBvZiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsaHJzX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbXVsaHJzdygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvcGllcyB0aGUgOC1iaXQgaW50ZWdlcnMgZnJvbSBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24gb3IgY2xlYXJzIDgtYml0IHZhbHVlcyBpbiB0aGUgZGVzdGluYXRpb24sIGFzIHNwZWNpZmllZCBieQorLy8vICAgIHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTSFVGQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgY29udHJvbCBieXRlcyBjb3JyZXNwb25kaW5nIHRvCisvLy8gICAgcG9zaXRpb25zIGluIHRoZSBkZXN0aW5hdGlvbjoKKy8vLyAgICBCaXQgNzoKKy8vLyAgICAxOiBDbGVhciB0aGUgY29ycmVzcG9uZGluZyBieXRlIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICAwOiBDb3B5IHRoZSBzZWxlY3RlZCBzb3VyY2UgYnl0ZSB0byB0aGUgY29ycmVzcG9uZGluZyBieXRlIGluIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdHMgWzY6NF0gUmVzZXJ2ZWQuCisvLy8gICAgQml0cyBbMzowXSBzZWxlY3QgdGhlIHNvdXJjZSBieXRlIHRvIGJlIGNvcGllZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29waWVkIG9yIGNsZWFyZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaHVmZmxlX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2h1ZmIxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvcGllcyB0aGUgOC1iaXQgaW50ZWdlcnMgZnJvbSBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbiBvciBjbGVhcnMgOC1iaXQgdmFsdWVzIGluIHRoZSBkZXN0aW5hdGlvbiwgYXMgc3BlY2lmaWVkIGJ5CisvLy8gICAgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU0hVRkIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBjb250cm9sIGJ5dGVzIGNvcnJlc3BvbmRpbmcgdG8KKy8vLyAgICBwb3NpdGlvbnMgaW4gdGhlIGRlc3RpbmF0aW9uOgorLy8vICAgIEJpdCA3OgorLy8vICAgIDE6IENsZWFyIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGUgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIDA6IENvcHkgdGhlIHNlbGVjdGVkIHNvdXJjZSBieXRlIHRvIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGUgaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbMzowXSBzZWxlY3QgdGhlIHNvdXJjZSBieXRlIHRvIGJlIGNvcGllZC4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb3BpZWQgb3IgY2xlYXJlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaHVmZmxlX3BpOChfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzaHVmYigoX192OHFpKV9fYSwgKF9fdjhxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEZvciBlYWNoIDgtYml0IGludGVnZXIgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLCBwZXJmb3JtIG9uZSBvZgorLy8vICAgIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBhcyBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZDogSWYgdGhlCisvLy8gICAgYnl0ZSBpbiB0aGUgc2Vjb25kIHNvdXJjZSBpcyBuZWdhdGl2ZSwgY2FsY3VsYXRlIHRoZSB0d28ncyBjb21wbGVtZW50IG9mCisvLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZSBpbiB0aGUgZmlyc3Qgc291cmNlLCBhbmQgd3JpdGUgdGhhdCB2YWx1ZSB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4gSWYgdGhlIGJ5dGUgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgcG9zaXRpdmUsIGNvcHkgdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBieXRlIGZyb20gdGhlIGZpcnN0IHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24uIElmIHRoZSBieXRlCisvLy8gICAgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgemVybywgY2xlYXIgdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZSBpbiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNJR05CIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgY29waWVkLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBjb250cm9sIGJ5dGVzIGNvcnJlc3BvbmRpbmcgdG8KKy8vLyAgICBwb3NpdGlvbnMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByZXN1bHRhbnQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaWduX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2lnbmIxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEZvciBlYWNoIDE2LWJpdCBpbnRlZ2VyIGluIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZCwgcGVyZm9ybSBvbmUgb2YKKy8vLyAgICB0aGUgZm9sbG93aW5nIGFjdGlvbnMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQ6IElmIHRoZQorLy8vICAgIHdvcmQgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgbmVnYXRpdmUsIGNhbGN1bGF0ZSB0aGUgdHdvJ3MgY29tcGxlbWVudCBvZgorLy8vICAgIHRoZSBjb3JyZXNwb25kaW5nIHdvcmQgaW4gdGhlIGZpcnN0IHNvdXJjZSwgYW5kIHdyaXRlIHRoYXQgdmFsdWUgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24uIElmIHRoZSB3b3JkIGluIHRoZSBzZWNvbmQgc291cmNlIGlzIHBvc2l0aXZlLCBjb3B5IHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgd29yZCBmcm9tIHRoZSBmaXJzdCBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uLiBJZiB0aGUgd29yZAorLy8vICAgIGluIHRoZSBzZWNvbmQgc291cmNlIGlzIHplcm8sIGNsZWFyIHRoZSBjb3JyZXNwb25kaW5nIHdvcmQgaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTSUdOVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgY29udHJvbCB3b3JkcyBjb3JyZXNwb25kaW5nIHRvCisvLy8gICAgcG9zaXRpb25zIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmVzdWx0YW50IHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2lnbl9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzaWdudzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEZvciBlYWNoIDMyLWJpdCBpbnRlZ2VyIGluIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZCwgcGVyZm9ybSBvbmUgb2YKKy8vLyAgICB0aGUgZm9sbG93aW5nIGFjdGlvbnMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQ6IElmIHRoZQorLy8vICAgIGRvdWJsZXdvcmQgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgbmVnYXRpdmUsIGNhbGN1bGF0ZSB0aGUgdHdvJ3MKKy8vLyAgICBjb21wbGVtZW50IG9mIHRoZSBjb3JyZXNwb25kaW5nIHdvcmQgaW4gdGhlIGZpcnN0IHNvdXJjZSwgYW5kIHdyaXRlIHRoYXQKKy8vLyAgICB2YWx1ZSB0byB0aGUgZGVzdGluYXRpb24uIElmIHRoZSBkb3VibGV3b3JkIGluIHRoZSBzZWNvbmQgc291cmNlIGlzCisvLy8gICAgcG9zaXRpdmUsIGNvcHkgdGhlIGNvcnJlc3BvbmRpbmcgd29yZCBmcm9tIHRoZSBmaXJzdCBzb3VyY2UgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24uIElmIHRoZSBkb3VibGV3b3JkIGluIHRoZSBzZWNvbmQgc291cmNlIGlzIHplcm8sIGNsZWFyIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgd29yZCBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTSUdORCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgY29udHJvbCBkb3VibGV3b3JkcyBjb3JyZXNwb25kaW5nIHRvCisvLy8gICAgcG9zaXRpb25zIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmVzdWx0YW50IHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2lnbl9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzaWduZDEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEZvciBlYWNoIDgtYml0IGludGVnZXIgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLCBwZXJmb3JtIG9uZSBvZgorLy8vICAgIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBhcyBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZDogSWYgdGhlCisvLy8gICAgYnl0ZSBpbiB0aGUgc2Vjb25kIHNvdXJjZSBpcyBuZWdhdGl2ZSwgY2FsY3VsYXRlIHRoZSB0d28ncyBjb21wbGVtZW50IG9mCisvLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZSBpbiB0aGUgZmlyc3Qgc291cmNlLCBhbmQgd3JpdGUgdGhhdCB2YWx1ZSB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4gSWYgdGhlIGJ5dGUgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgcG9zaXRpdmUsIGNvcHkgdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBieXRlIGZyb20gdGhlIGZpcnN0IHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24uIElmIHRoZSBieXRlCisvLy8gICAgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgemVybywgY2xlYXIgdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZSBpbiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU0lHTkIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBjb250cm9sIGJ5dGVzIGNvcnJlc3BvbmRpbmcgdG8KKy8vLyAgICBwb3NpdGlvbnMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJlc3VsdGFudCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaWduX3BpOChfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzaWduYigoX192OHFpKV9fYSwgKF9fdjhxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEZvciBlYWNoIDE2LWJpdCBpbnRlZ2VyIGluIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZCwgcGVyZm9ybSBvbmUgb2YKKy8vLyAgICB0aGUgZm9sbG93aW5nIGFjdGlvbnMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQ6IElmIHRoZQorLy8vICAgIHdvcmQgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgbmVnYXRpdmUsIGNhbGN1bGF0ZSB0aGUgdHdvJ3MgY29tcGxlbWVudCBvZgorLy8vICAgIHRoZSBjb3JyZXNwb25kaW5nIHdvcmQgaW4gdGhlIGZpcnN0IHNvdXJjZSwgYW5kIHdyaXRlIHRoYXQgdmFsdWUgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24uIElmIHRoZSB3b3JkIGluIHRoZSBzZWNvbmQgc291cmNlIGlzIHBvc2l0aXZlLCBjb3B5IHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgd29yZCBmcm9tIHRoZSBmaXJzdCBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uLiBJZiB0aGUgd29yZAorLy8vICAgIGluIHRoZSBzZWNvbmQgc291cmNlIGlzIHplcm8sIGNsZWFyIHRoZSBjb3JyZXNwb25kaW5nIHdvcmQgaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNJR05XIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byBiZSBjb3BpZWQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgY29udHJvbCB3b3JkcyBjb3JyZXNwb25kaW5nIHRvCisvLy8gICAgcG9zaXRpb25zIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByZXN1bHRhbnQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2lnbl9waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNpZ253KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgRm9yIGVhY2ggMzItYml0IGludGVnZXIgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLCBwZXJmb3JtIG9uZSBvZgorLy8vICAgIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBhcyBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZDogSWYgdGhlCisvLy8gICAgZG91Ymxld29yZCBpbiB0aGUgc2Vjb25kIHNvdXJjZSBpcyBuZWdhdGl2ZSwgY2FsY3VsYXRlIHRoZSB0d28ncworLy8vICAgIGNvbXBsZW1lbnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZG91Ymxld29yZCBpbiB0aGUgZmlyc3Qgc291cmNlLCBhbmQKKy8vLyAgICB3cml0ZSB0aGF0IHZhbHVlIHRvIHRoZSBkZXN0aW5hdGlvbi4gSWYgdGhlIGRvdWJsZXdvcmQgaW4gdGhlIHNlY29uZAorLy8vICAgIHNvdXJjZSBpcyBwb3NpdGl2ZSwgY29weSB0aGUgY29ycmVzcG9uZGluZyBkb3VibGV3b3JkIGZyb20gdGhlIGZpcnN0CisvLy8gICAgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbi4gSWYgdGhlIGRvdWJsZXdvcmQgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMKKy8vLyAgICB6ZXJvLCBjbGVhciB0aGUgY29ycmVzcG9uZGluZyBkb3VibGV3b3JkIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU0lHTkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0d28gY29udHJvbCBkb3VibGV3b3JkcyBjb3JyZXNwb25kaW5nCisvLy8gICAgdG8gcG9zaXRpb25zIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByZXN1bHRhbnQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2lnbl9waTMyKF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNpZ25kKChfX3Yyc2kpX19hLCAoX192MnNpKV9fYik7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fVE1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdW53aW5kLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Vud2luZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNzRhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Vud2luZC5oCkBAIC0wLDAgKzEsMjk5IEBACisvKj09PS0tLS0gdW53aW5kLmggLSBTdGFjayB1bndpbmRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworLyogU2VlICJEYXRhIERlZmluaXRpb25zIGZvciBsaWJnY2NfcyIgaW4gdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UuKi8KKworI2lmbmRlZiBfX0NMQU5HX1VOV0lORF9ICisjZGVmaW5lIF9fQ0xBTkdfVU5XSU5EX0gKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBfX2hhc19pbmNsdWRlX25leHQoPHVud2luZC5oPikKKy8qIERhcndpbiAoZnJvbSAxMS54IG9uKSBwcm92aWRlIGFuIHVud2luZC5oLiBJZiB0aGF0J3MgYXZhaWxhYmxlLAorICogdXNlIGl0LiBsaWJ1bndpbmQgd3JhcHMgc29tZSBvZiBpdHMgZGVmaW5pdGlvbnMgaW4gI2lmZGVmIF9HTlVfU09VUkNFLAorICogc28gZGVmaW5lIHRoYXQgYXJvdW5kIHRoZSBpbmNsdWRlLiovCisjIGlmbmRlZiBfR05VX1NPVVJDRQorIyAgZGVmaW5lIF9TSE9VTERfVU5ERUZJTkVfR05VX1NPVVJDRQorIyAgZGVmaW5lIF9HTlVfU09VUkNFCisjIGVuZGlmCisvLyBsaWJ1bndpbmQncyB1bndpbmQuaCByZWZsZWN0cyB0aGUgY3VycmVudCB2aXNpYmlsaXR5LiAgSG93ZXZlciwgTW96aWxsYQorLy8gYnVpbGRzIHdpdGggLWZ2aXNpYmlsaXR5PWhpZGRlbiBhbmQgcmVsaWVzIG9uIGdjYydzIHVud2luZC5oIHRvIHJlc2V0IHRoZQorLy8gdmlzaWJpbGl0eSB0byBkZWZhdWx0IGFuZCBleHBvcnQgaXRzIGNvbnRlbnRzLiAgZ2NjIGFsc28gYWxsb3dzIHVzZXJzIHRvCisvLyBvdmVycmlkZSBpdHMgb3ZlcnJpZGUgYnkgI2RlZmluaW5nIEhJREVfRVhQT1JUUyAoYnV0IG5vdGUsIHRoaXMgb25seSBvYmV5cworLy8gdGhlIHVzZXIncyAtZnZpc2liaWxpdHkgc2V0dGluZzsgaXQgZG9lc24ndCBoaWRlIGFueSBleHBvcnRzIG9uIGl0cyBvd24pLiAgV2UKKy8vIGltaXRhdGUgZ2NjJ3MgaGVhZGVyIGhlcmU6CisjIGlmZGVmIEhJREVfRVhQT1JUUworIyAgaW5jbHVkZV9uZXh0IDx1bndpbmQuaD4KKyMgZWxzZQorIyAgcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKKyMgIGluY2x1ZGVfbmV4dCA8dW53aW5kLmg+CisjICBwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisjIGVuZGlmCisjIGlmZGVmIF9TSE9VTERfVU5ERUZJTkVfR05VX1NPVVJDRQorIyAgdW5kZWYgX0dOVV9TT1VSQ0UKKyMgIHVuZGVmIF9TSE9VTERfVU5ERUZJTkVfR05VX1NPVVJDRQorIyBlbmRpZgorI2Vsc2UKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEl0IGlzIGEgYml0IHN0cmFuZ2UgZm9yIGEgaGVhZGVyIHRvIHBsYXkgd2l0aCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUKKyAgIHN5bWJvbHMgaXQgZGVjbGFyZXMsIGJ1dCB0aGlzIG1hdGNoZXMgZ2NjJ3MgYmVoYXZpb3IgYW5kIHNvbWUgcHJvZ3JhbXMKKyAgIGRlcGVuZCBvbiBpdCAqLworI2lmbmRlZiBISURFX0VYUE9SVFMKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQorI2VuZGlmCisKK3R5cGVkZWYgdWludHB0cl90IF9VbndpbmRfV29yZDsKK3R5cGVkZWYgaW50cHRyX3QgX1Vud2luZF9Td29yZDsKK3R5cGVkZWYgdWludHB0cl90IF9VbndpbmRfUHRyOwordHlwZWRlZiB1aW50cHRyX3QgX1Vud2luZF9JbnRlcm5hbF9QdHI7Cit0eXBlZGVmIHVpbnQ2NF90IF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzOworCit0eXBlZGVmIGludHB0cl90IF9zbGViMTI4X3Q7Cit0eXBlZGVmIHVpbnRwdHJfdCBfdWxlYjEyOF90OworCitzdHJ1Y3QgX1Vud2luZF9Db250ZXh0Oworc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uOwordHlwZWRlZiBlbnVtIHsKKyAgX1VSQ19OT19SRUFTT04gPSAwLAorI2lmIGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19VU0lOR19TSkxKX0VYQ0VQVElPTlNfXykgJiYgXAorICAgICFkZWZpbmVkKF9fQVJNX0RXQVJGX0VIX18pCisgIF9VUkNfT0sgPSAwLCAvKiB1c2VkIGJ5IEFSTSBFSEFCSSAqLworI2VuZGlmCisgIF9VUkNfRk9SRUlHTl9FWENFUFRJT05fQ0FVR0hUID0gMSwKKworICBfVVJDX0ZBVEFMX1BIQVNFMl9FUlJPUiA9IDIsCisgIF9VUkNfRkFUQUxfUEhBU0UxX0VSUk9SID0gMywKKyAgX1VSQ19OT1JNQUxfU1RPUCA9IDQsCisKKyAgX1VSQ19FTkRfT0ZfU1RBQ0sgPSA1LAorICBfVVJDX0hBTkRMRVJfRk9VTkQgPSA2LAorICBfVVJDX0lOU1RBTExfQ09OVEVYVCA9IDcsCisgIF9VUkNfQ09OVElOVUVfVU5XSU5EID0gOCwKKyNpZiBkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fVVNJTkdfU0pMSl9FWENFUFRJT05TX18pICYmIFwKKyAgICAhZGVmaW5lZChfX0FSTV9EV0FSRl9FSF9fKQorICBfVVJDX0ZBSUxVUkUgPSA5IC8qIHVzZWQgYnkgQVJNIEVIQUJJICovCisjZW5kaWYKK30gX1Vud2luZF9SZWFzb25fQ29kZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgX1VBX1NFQVJDSF9QSEFTRSA9IDEsCisgIF9VQV9DTEVBTlVQX1BIQVNFID0gMiwKKworICBfVUFfSEFORExFUl9GUkFNRSA9IDQsCisgIF9VQV9GT1JDRV9VTldJTkQgPSA4LAorICBfVUFfRU5EX09GX1NUQUNLID0gMTYgLyogZ2NjIGV4dGVuc2lvbiB0byBDKysgQUJJICovCit9IF9VbndpbmRfQWN0aW9uOworCit0eXBlZGVmIHZvaWQgKCpfVW53aW5kX0V4Y2VwdGlvbl9DbGVhbnVwX0ZuKShfVW53aW5kX1JlYXNvbl9Db2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOworCitzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24geworICBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcyBleGNlcHRpb25fY2xhc3M7CisgIF9VbndpbmRfRXhjZXB0aW9uX0NsZWFudXBfRm4gZXhjZXB0aW9uX2NsZWFudXA7CisgIF9VbndpbmRfV29yZCBwcml2YXRlXzE7CisgIF9VbndpbmRfV29yZCBwcml2YXRlXzI7CisgIC8qIFRoZSBJdGFuaXVtIEFCSSByZXF1aXJlcyB0aGF0IF9VbndpbmRfRXhjZXB0aW9uIG9iamVjdHMgYXJlICJkb3VibGUtd29yZAorICAgKiBhbGlnbmVkIi4gIEdDQyBoYXMgaW50ZXJwcmV0ZWQgdGhpcyB0byBtZWFuICJ1c2UgdGhlIG1heGltdW0gdXNlZnVsCisgICAqIGFsaWdubWVudCBmb3IgdGhlIHRhcmdldCI7IHNvIGRvIHdlLiAqLworfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXykpOworCit0eXBlZGVmIF9VbndpbmRfUmVhc29uX0NvZGUgKCpfVW53aW5kX1N0b3BfRm4pKGludCwgX1Vud2luZF9BY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopOworCit0eXBlZGVmIF9VbndpbmRfUmVhc29uX0NvZGUgKCpfVW53aW5kX1BlcnNvbmFsaXR5X0ZuKSgKKyAgICBpbnQsIF9VbndpbmRfQWN0aW9uLCBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcywgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICosCisgICAgc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKK3R5cGVkZWYgX1Vud2luZF9QZXJzb25hbGl0eV9GbiBfX3BlcnNvbmFsaXR5X3JvdXRpbmU7CisKK3R5cGVkZWYgX1Vud2luZF9SZWFzb25fQ29kZSAoKl9VbndpbmRfVHJhY2VfRm4pKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7CisKKyNpZiBkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fQVBQTEVfXykKKwordHlwZWRlZiBlbnVtIHsKKyAgX1VWUlNDX0NPUkUgPSAwLCAgICAgICAgLyogaW50ZWdlciByZWdpc3RlciAqLworICBfVVZSU0NfVkZQID0gMSwgICAgICAgICAvKiB2ZnAgKi8KKyAgX1VWUlNDX1dNTVhEID0gMywgICAgICAgLyogSW50ZWwgV01NWCBkYXRhIHJlZ2lzdGVyICovCisgIF9VVlJTQ19XTU1YQyA9IDQgICAgICAgIC8qIEludGVsIFdNTVggY29udHJvbCByZWdpc3RlciAqLworfSBfVW53aW5kX1ZSU19SZWdDbGFzczsKKwordHlwZWRlZiBlbnVtIHsKKyAgX1VWUlNEX1VJTlQzMiA9IDAsCisgIF9VVlJTRF9WRlBYID0gMSwKKyAgX1VWUlNEX1VJTlQ2NCA9IDMsCisgIF9VVlJTRF9GTE9BVCA9IDQsCisgIF9VVlJTRF9ET1VCTEUgPSA1Cit9IF9VbndpbmRfVlJTX0RhdGFSZXByZXNlbnRhdGlvbjsKKwordHlwZWRlZiBlbnVtIHsKKyAgX1VWUlNSX09LID0gMCwKKyAgX1VWUlNSX05PVF9JTVBMRU1FTlRFRCA9IDEsCisgIF9VVlJTUl9GQUlMRUQgPSAyCit9IF9VbndpbmRfVlJTX1Jlc3VsdDsKKworI2lmICFkZWZpbmVkKF9fVVNJTkdfU0pMSl9FWENFUFRJT05TX18pICYmICFkZWZpbmVkKF9fQVJNX0RXQVJGX0VIX18pCit0eXBlZGVmIHVpbnQzMl90IF9VbndpbmRfU3RhdGU7CisjZGVmaW5lIF9VU19WSVJUVUFMX1VOV0lORF9GUkFNRSAgKChfVW53aW5kX1N0YXRlKTApCisjZGVmaW5lIF9VU19VTldJTkRfRlJBTUVfU1RBUlRJTkcgKChfVW53aW5kX1N0YXRlKTEpCisjZGVmaW5lIF9VU19VTldJTkRfRlJBTUVfUkVTVU1FICAgKChfVW53aW5kX1N0YXRlKTIpCisjZGVmaW5lIF9VU19BQ1RJT05fTUFTSyAgICAgICAgICAgKChfVW53aW5kX1N0YXRlKTMpCisjZGVmaW5lIF9VU19GT1JDRV9VTldJTkQgICAgICAgICAgKChfVW53aW5kX1N0YXRlKTgpCisjZW5kaWYKKworX1Vud2luZF9WUlNfUmVzdWx0IF9VbndpbmRfVlJTX0dldChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpfX2NvbnRleHQsCisgIF9VbndpbmRfVlJTX1JlZ0NsYXNzIF9fcmVnY2xhc3MsCisgIHVpbnQzMl90IF9fcmVnbm8sCisgIF9VbndpbmRfVlJTX0RhdGFSZXByZXNlbnRhdGlvbiBfX3JlcHJlc2VudGF0aW9uLAorICB2b2lkICpfX3ZhbHVlcCk7CisKK19VbndpbmRfVlJTX1Jlc3VsdCBfVW53aW5kX1ZSU19TZXQoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqX19jb250ZXh0LAorICBfVW53aW5kX1ZSU19SZWdDbGFzcyBfX3JlZ2NsYXNzLAorICB1aW50MzJfdCBfX3JlZ25vLAorICBfVW53aW5kX1ZSU19EYXRhUmVwcmVzZW50YXRpb24gX19yZXByZXNlbnRhdGlvbiwKKyAgdm9pZCAqX192YWx1ZXApOworCitzdGF0aWMgX19pbmxpbmVfXworX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0R1Ioc3RydWN0IF9VbndpbmRfQ29udGV4dCAqX19jb250ZXh0LCBpbnQgX19pbmRleCkgeworICBfVW53aW5kX1dvcmQgX192YWx1ZTsKKyAgX1Vud2luZF9WUlNfR2V0KF9fY29udGV4dCwgX1VWUlNDX0NPUkUsIF9faW5kZXgsIF9VVlJTRF9VSU5UMzIsICZfX3ZhbHVlKTsKKyAgcmV0dXJuIF9fdmFsdWU7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9VbndpbmRfU2V0R1Ioc3RydWN0IF9VbndpbmRfQ29udGV4dCAqX19jb250ZXh0LCBpbnQgX19pbmRleCwKKyAgICAgICAgICAgICAgICAgICBfVW53aW5kX1dvcmQgX192YWx1ZSkgeworICBfVW53aW5kX1ZSU19TZXQoX19jb250ZXh0LCBfVVZSU0NfQ09SRSwgX19pbmRleCwgX1VWUlNEX1VJTlQzMiwgJl9fdmFsdWUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXworX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0SVAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqX19jb250ZXh0KSB7CisgIF9VbndpbmRfV29yZCBfX2lwID0gX1Vud2luZF9HZXRHUihfX2NvbnRleHQsIDE1KTsKKyAgcmV0dXJuIF9faXAgJiB+KF9VbndpbmRfV29yZCkoMHgxKTsgLyogUmVtb3ZlIHRodW1iIG1vZGUgYml0LiAqLworfQorCitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfVW53aW5kX1NldElQKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKl9fY29udGV4dCwgX1Vud2luZF9Xb3JkIF9fdmFsdWUpIHsKKyAgX1Vud2luZF9Xb3JkIF9fdGh1bWJfbW9kZV9iaXQgPSBfVW53aW5kX0dldEdSKF9fY29udGV4dCwgMTUpICYgMHgxOworICBfVW53aW5kX1NldEdSKF9fY29udGV4dCwgMTUsIF9fdmFsdWUgfCBfX3RodW1iX21vZGVfYml0KTsKK30KKyNlbHNlCitfVW53aW5kX1dvcmQgX1Vud2luZF9HZXRHUihzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosIGludCk7Cit2b2lkIF9VbndpbmRfU2V0R1Ioc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLCBpbnQsIF9VbndpbmRfV29yZCk7CisKK19VbndpbmRfV29yZCBfVW53aW5kX0dldElQKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7Cit2b2lkIF9VbndpbmRfU2V0SVAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLCBfVW53aW5kX1dvcmQpOworI2VuZGlmCisKKworX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0SVBJbmZvKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgaW50ICopOworCitfVW53aW5kX1dvcmQgX1Vud2luZF9HZXRDRkEoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKKworX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0QlNQKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CisKK3ZvaWQgKl9VbndpbmRfR2V0TGFuZ3VhZ2VTcGVjaWZpY0RhdGEoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKKworX1Vud2luZF9QdHIgX1Vud2luZF9HZXRSZWdpb25TdGFydChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOworCisvKiBEV0FSRiBFSCBmdW5jdGlvbnM7IGN1cnJlbnRseSBub3QgYXZhaWxhYmxlIG9uIERhcndpbi9BUk0gKi8KKyNpZiAhZGVmaW5lZChfX0FQUExFX18pIHx8ICFkZWZpbmVkKF9fYXJtX18pCisKK19VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9SYWlzZUV4Y2VwdGlvbihzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CitfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfRm9yY2VkVW53aW5kKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVW53aW5kX1N0b3BfRm4sIHZvaWQgKik7Cit2b2lkIF9VbndpbmRfRGVsZXRlRXhjZXB0aW9uKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKK3ZvaWQgX1Vud2luZF9SZXN1bWUoc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOworX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX1Jlc3VtZV9vcl9SZXRocm93KHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKKworI2VuZGlmCisKK19VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9CYWNrdHJhY2UoX1Vud2luZF9UcmFjZV9Gbiwgdm9pZCAqKTsKKworLyogc2V0am1wKDMpL2xvbmdqbXAoMykgc3R1ZmYgKi8KK3R5cGVkZWYgc3RydWN0IFNqTGpfRnVuY3Rpb25fQ29udGV4dCAqX1Vud2luZF9GdW5jdGlvbkNvbnRleHRfdDsKKwordm9pZCBfVW53aW5kX1NqTGpfUmVnaXN0ZXIoX1Vud2luZF9GdW5jdGlvbkNvbnRleHRfdCk7Cit2b2lkIF9VbndpbmRfU2pMal9VbnJlZ2lzdGVyKF9VbndpbmRfRnVuY3Rpb25Db250ZXh0X3QpOworX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX1NqTGpfUmFpc2VFeGNlcHRpb24oc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOworX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX1NqTGpfRm9yY2VkVW53aW5kKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9VbndpbmRfU3RvcF9Gbiwgdm9pZCAqKTsKK3ZvaWQgX1Vud2luZF9TakxqX1Jlc3VtZShzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CitfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfU2pMal9SZXN1bWVfb3JfUmV0aHJvdyhzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CisKK3ZvaWQgKl9VbndpbmRfRmluZEVuY2xvc2luZ0Z1bmN0aW9uKHZvaWQgKik7CisKKyNpZmRlZiBfX0FQUExFX18KKworX1Vud2luZF9QdHIgX1Vud2luZF9HZXREYXRhUmVsQmFzZShzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopCisgICAgX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fKSk7CitfVW53aW5kX1B0ciBfVW53aW5kX0dldFRleHRSZWxCYXNlKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKikKKyAgICBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKKworLyogRGFyd2luLXNwZWNpZmljIGZ1bmN0aW9ucyAqLwordm9pZCBfX3JlZ2lzdGVyX2ZyYW1lKGNvbnN0IHZvaWQgKik7Cit2b2lkIF9fZGVyZWdpc3Rlcl9mcmFtZShjb25zdCB2b2lkICopOworCitzdHJ1Y3QgZHdhcmZfZWhfYmFzZXMgeworICB1aW50cHRyX3QgdGJhc2U7CisgIHVpbnRwdHJfdCBkYmFzZTsKKyAgdWludHB0cl90IGZ1bmM7Cit9Owordm9pZCAqX1Vud2luZF9GaW5kX0ZERShjb25zdCB2b2lkICosIHN0cnVjdCBkd2FyZl9laF9iYXNlcyAqKTsKKwordm9pZCBfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMoY29uc3Qgdm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAqKQorICBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKK3ZvaWQgX19yZWdpc3Rlcl9mcmFtZV9pbmZvKGNvbnN0IHZvaWQgKiwgdm9pZCAqKSBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKK3ZvaWQgX19yZWdpc3Rlcl9mcmFtZV9pbmZvX3RhYmxlX2Jhc2VzKGNvbnN0IHZvaWQgKiwgdm9pZCosIHZvaWQgKiwgdm9pZCAqKQorICBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKK3ZvaWQgX19yZWdpc3Rlcl9mcmFtZV9pbmZvX3RhYmxlKGNvbnN0IHZvaWQgKiwgdm9pZCAqKQorICBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKK3ZvaWQgX19yZWdpc3Rlcl9mcmFtZV90YWJsZShjb25zdCB2b2lkICopIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXykpOwordm9pZCBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbyhjb25zdCB2b2lkICopIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXykpOwordm9pZCBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcyhjb25zdCB2b2lkICopX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fKSk7CisKKyNlbHNlCisKK19VbndpbmRfUHRyIF9VbndpbmRfR2V0RGF0YVJlbEJhc2Uoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKK19VbndpbmRfUHRyIF9VbndpbmRfR2V0VGV4dFJlbEJhc2Uoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKKworI2VuZGlmCisKKworI2lmbmRlZiBISURFX0VYUE9SVFMKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NMQU5HX1VOV0lORF9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3ZhZGVmcy5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS92YWRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmU5YTc0Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS92YWRlZnMuaApAQCAtMCwwICsxLDY1IEBACisvKiA9PT0tLS0tLS0tLSB2YWRlZnMuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKy8qIE9ubHkgaW5jbHVkZSB0aGlzIGlmIHdlIGFyZSBhaW1pbmcgZm9yIE1TVkMgY29tcGF0aWJpbGl0eS4gKi8KKyNpZm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlX25leHQgPHZhZGVmcy5oPgorI2Vsc2UKKworI2lmbmRlZiBfX2NsYW5nX3ZhZGVmc19oCisjZGVmaW5lIF9fY2xhbmdfdmFkZWZzX2gKKworI2luY2x1ZGVfbmV4dCA8dmFkZWZzLmg+CisKKy8qIE92ZXJyaWRlIG1hY3JvcyBmcm9tIHZhZGVmcy5oIHdpdGggZGVmaW5pdGlvbnMgdGhhdCB3b3JrIHdpdGggQ2xhbmcuICovCisjaWZkZWYgX2NydF92YV9zdGFydAorI3VuZGVmIF9jcnRfdmFfc3RhcnQKKyNkZWZpbmUgX2NydF92YV9zdGFydChhcCwgcGFyYW0pIF9fYnVpbHRpbl92YV9zdGFydChhcCwgcGFyYW0pCisjZW5kaWYKKyNpZmRlZiBfY3J0X3ZhX2VuZAorI3VuZGVmIF9jcnRfdmFfZW5kCisjZGVmaW5lIF9jcnRfdmFfZW5kKGFwKSAgICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFwKQorI2VuZGlmCisjaWZkZWYgX2NydF92YV9hcmcKKyN1bmRlZiBfY3J0X3ZhX2FyZworI2RlZmluZSBfY3J0X3ZhX2FyZyhhcCwgdHlwZSkgICAgX19idWlsdGluX3ZhX2FyZyhhcCwgdHlwZSkKKyNlbmRpZgorCisvKiBWUyAyMDE1IHN3aXRjaGVkIHRvIGRvdWJsZSB1bmRlcnNjb3JlIG5hbWVzLCB3aGljaCBpcyBhbiBpbXByb3ZlbWVudCwgYnV0IG5vdworICogd2UgaGF2ZSB0byBpbnRlcmNlcHQgdGhvc2UgbmFtZXMgdG9vLgorICovCisjaWZkZWYgX19jcnRfdmFfc3RhcnQKKyN1bmRlZiBfX2NydF92YV9zdGFydAorI2RlZmluZSBfX2NydF92YV9zdGFydChhcCwgcGFyYW0pIF9fYnVpbHRpbl92YV9zdGFydChhcCwgcGFyYW0pCisjZW5kaWYKKyNpZmRlZiBfX2NydF92YV9lbmQKKyN1bmRlZiBfX2NydF92YV9lbmQKKyNkZWZpbmUgX19jcnRfdmFfZW5kKGFwKSAgICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFwKQorI2VuZGlmCisjaWZkZWYgX19jcnRfdmFfYXJnCisjdW5kZWYgX19jcnRfdmFfYXJnCisjZGVmaW5lIF9fY3J0X3ZhX2FyZyhhcCwgdHlwZSkgICAgX19idWlsdGluX3ZhX2FyZyhhcCwgdHlwZSkKKyNlbmRpZgorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS92YXJhcmdzLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3ZhcmFyZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQ3N2QwCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS92YXJhcmdzLmgKQEAgLTAsMCArMSwyNiBAQAorLyo9PT0tLS0tIHZhcmFyZ3MuaCAtIFZhcmlhYmxlIGFyZ3VtZW50IGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyoKKyogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqCisqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKgorKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorKiBUSEUgU09GVFdBUkUuCisqCisqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyovCisjaWZuZGVmIF9fVkFSQVJHU19ICisjZGVmaW5lIF9fVkFSQVJHU19ICisgICNlcnJvciAiUGxlYXNlIHVzZSA8c3RkYXJnLmg+IGluc3RlYWQgb2YgPHZhcmFyZ3MuaD4iCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdmVjaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3ZlY2ludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhN2FjYjQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3ZlY2ludHJpbi5oCkBAIC0wLDAgKzEsODk0NiBAQAorLyo9PT0tLS0tIHZlY2ludHJpbi5oIC0gVmVjdG9yIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmIGRlZmluZWQoX19zMzkweF9fKSAmJiBkZWZpbmVkKF9fVkVDX18pCisKKyNkZWZpbmUgX19BVFRSU19haSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisjZGVmaW5lIF9fQVRUUlNfbyBfX2F0dHJpYnV0ZV9fKChfX292ZXJsb2FkYWJsZV9fKSkKKyNkZWZpbmUgX19BVFRSU19vX2FpIF9fYXR0cmlidXRlX18oKF9fb3ZlcmxvYWRhYmxlX18sIF9fYWx3YXlzX2lubGluZV9fKSkKKworI2RlZmluZSBfX2NvbnN0YW50KFBBUk0pIFwKKyAgX19hdHRyaWJ1dGVfXygoX19lbmFibGVfaWZfXyAoKFBBUk0pID09IChQQVJNKSwgXAorICAgICAiYXJndW1lbnQgbXVzdCBiZSBhIGNvbnN0YW50IGludGVnZXIiKSkpCisjZGVmaW5lIF9fY29uc3RhbnRfcmFuZ2UoUEFSTSwgTE9XLCBISUdIKSBcCisgIF9fYXR0cmlidXRlX18oKF9fZW5hYmxlX2lmX18gKChQQVJNKSA+PSAoTE9XKSAmJiAoUEFSTSkgPD0gKEhJR0gpLCBcCisgICAgICJhcmd1bWVudCBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBmcm9tICIgI0xPVyAiIHRvICIgI0hJR0gpKSkKKyNkZWZpbmUgX19jb25zdGFudF9wb3cyX3JhbmdlKFBBUk0sIExPVywgSElHSCkgXAorICBfX2F0dHJpYnV0ZV9fKChfX2VuYWJsZV9pZl9fICgoUEFSTSkgPj0gKExPVykgJiYgKFBBUk0pIDw9IChISUdIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEFSTSkgJiAoKFBBUk0pIC0gMSkpID09IDAsIFwKKyAgICAgImFyZ3VtZW50IG11c3QgYmUgYSBjb25zdGFudCBwb3dlciBvZiAyIGZyb20gIiAjTE9XICIgdG8gIiAjSElHSCkpKQorCisvKi0tIF9fbGNiYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2V4dGVybiBfX0FUVFJTX28gdW5zaWduZWQgaW50CitfX2xjYmIoY29uc3Qgdm9pZCAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQorICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKKworI2RlZmluZSBfX2xjYmIoWCwgWSkgKChfX3R5cGVvZl9fKChfX2xjYmIpKChYKSwgKFkpKSkpIFwKKyAgX19idWlsdGluX3MzOTBfbGNiYigoWCksIF9fYnVpbHRpbl9jb25zdGFudF9wKChZKSk/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoWSkgPT0gNjQgPyAwIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAxMjggPyAxIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAyNTYgPyAyIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSA1MTIgPyAzIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAxMDI0ID8gNCA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gMjA0OCA/IDUgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDQwOTYgPyA2IDogMCkgOiAwKSkKKworLyotLSB2ZWNfZXh0cmFjdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBzaWduZWQgY2hhcgordmVjX2V4dHJhY3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDE1XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdW5zaWduZWQgY2hhcgordmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAxNV07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHVuc2lnbmVkIGNoYXIKK3ZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDE1XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgc2lnbmVkIHNob3J0Cit2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDddOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB1bnNpZ25lZCBzaG9ydAordmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgN107Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHVuc2lnbmVkIHNob3J0Cit2ZWNfZXh0cmFjdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgN107Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHNpZ25lZCBpbnQKK3ZlY19leHRyYWN0KHZlY3RvciBzaWduZWQgaW50IF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDNdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB1bnNpZ25lZCBpbnQKK3ZlY19leHRyYWN0KHZlY3RvciBib29sIGludCBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAzXTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdW5zaWduZWQgaW50Cit2ZWNfZXh0cmFjdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDNdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBzaWduZWQgbG9uZyBsb25nCit2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAxXTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfZXh0cmFjdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2V4dHJhY3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAxXTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgZG91YmxlCit2ZWNfZXh0cmFjdCh2ZWN0b3IgZG91YmxlIF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDFdOworfQorCisvKi0tIHZlY19pbnNlcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2luc2VydChzaWduZWQgY2hhciBfX3NjYWxhciwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkgeworICBfX3ZlY1tfX2luZGV4ICYgMTVdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19pbnNlcnQodW5zaWduZWQgY2hhciBfX3NjYWxhciwgdmVjdG9yIGJvb2wgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19uZXd2ZWMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX192ZWM7CisgIF9fbmV3dmVjW19faW5kZXggJiAxNV0gPSAodW5zaWduZWQgY2hhcilfX3NjYWxhcjsKKyAgcmV0dXJuIF9fbmV3dmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2luc2VydCh1bnNpZ25lZCBjaGFyIF9fc2NhbGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgX192ZWNbX19pbmRleCAmIDE1XSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19pbnNlcnQoc2lnbmVkIHNob3J0IF9fc2NhbGFyLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkgeworICBfX3ZlY1tfX2luZGV4ICYgN10gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19pbnNlcnQodW5zaWduZWQgc2hvcnQgX19zY2FsYXIsIHZlY3RvciBib29sIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkgeworICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19uZXd2ZWMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fdmVjOworICBfX25ld3ZlY1tfX2luZGV4ICYgN10gPSAodW5zaWduZWQgc2hvcnQpX19zY2FsYXI7CisgIHJldHVybiBfX25ld3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfaW5zZXJ0KHVuc2lnbmVkIHNob3J0IF9fc2NhbGFyLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIF9fdmVjW19faW5kZXggJiA3XSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfaW5zZXJ0KHNpZ25lZCBpbnQgX19zY2FsYXIsIHZlY3RvciBzaWduZWQgaW50IF9fdmVjLCBpbnQgX19pbmRleCkgeworICBfX3ZlY1tfX2luZGV4ICYgM10gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfaW5zZXJ0KHVuc2lnbmVkIGludCBfX3NjYWxhciwgdmVjdG9yIGJvb2wgaW50IF9fdmVjLCBpbnQgX19pbmRleCkgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fbmV3dmVjID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX192ZWM7CisgIF9fbmV3dmVjW19faW5kZXggJiAzXSA9IF9fc2NhbGFyOworICByZXR1cm4gX19uZXd2ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19pbnNlcnQodW5zaWduZWQgaW50IF9fc2NhbGFyLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjLCBpbnQgX19pbmRleCkgeworICBfX3ZlY1tfX2luZGV4ICYgM10gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2luc2VydChzaWduZWQgbG9uZyBsb25nIF9fc2NhbGFyLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgaW50IF9faW5kZXgpIHsKKyAgX192ZWNbX19pbmRleCAmIDFdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2luc2VydCh1bnNpZ25lZCBsb25nIGxvbmcgX19zY2FsYXIsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgaW50IF9faW5kZXgpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX25ld3ZlYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fdmVjOworICBfX25ld3ZlY1tfX2luZGV4ICYgMV0gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fbmV3dmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfaW5zZXJ0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX3NjYWxhciwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgaW50IF9faW5kZXgpIHsKKyAgX192ZWNbX19pbmRleCAmIDFdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX2luc2VydChkb3VibGUgX19zY2FsYXIsIHZlY3RvciBkb3VibGUgX192ZWMsIGludCBfX2luZGV4KSB7CisgIF9fdmVjW19faW5kZXggJiAxXSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKKy8qLS0gdmVjX3Byb21vdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfcHJvbW90ZShzaWduZWQgY2hhciBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKKyAgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyIF9femVybyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpMDsKKyAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sCisgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpOworICBfX3ZlY1tfX2luZGV4ICYgMTVdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wcm9tb3RlKHVuc2lnbmVkIGNoYXIgX19zY2FsYXIsIGludCBfX2luZGV4KSB7CisgIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyIF9femVybyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikwOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLAorICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKTsKKyAgX192ZWNbX19pbmRleCAmIDE1XSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19wcm9tb3RlKHNpZ25lZCBzaG9ydCBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKKyAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX3plcm8gPSAodmVjdG9yIHNpZ25lZCBzaG9ydCkwOworICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSk7CisgIF9fdmVjW19faW5kZXggJiA3XSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3Byb21vdGUodW5zaWduZWQgc2hvcnQgX19zY2FsYXIsIGludCBfX2luZGV4KSB7CisgIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3plcm8gPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KTA7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSk7CisgIF9fdmVjW19faW5kZXggJiA3XSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfcHJvbW90ZShzaWduZWQgaW50IF9fc2NhbGFyLCBpbnQgX19pbmRleCkgeworICBjb25zdCB2ZWN0b3Igc2lnbmVkIGludCBfX3plcm8gPSAodmVjdG9yIHNpZ25lZCBpbnQpMDsKKyAgdmVjdG9yIHNpZ25lZCBpbnQgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSk7CisgIF9fdmVjW19faW5kZXggJiAzXSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19wcm9tb3RlKHVuc2lnbmVkIGludCBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKKyAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCBfX3plcm8gPSAodmVjdG9yIHVuc2lnbmVkIGludCkwOworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSk7CisgIF9fdmVjW19faW5kZXggJiAzXSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfcHJvbW90ZShzaWduZWQgbG9uZyBsb25nIF9fc2NhbGFyLCBpbnQgX19pbmRleCkgeworICBjb25zdCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3plcm8gPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpMDsKKyAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEpOworICBfX3ZlY1tfX2luZGV4ICYgMV0gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfcHJvbW90ZSh1bnNpZ25lZCBsb25nIGxvbmcgX19zY2FsYXIsIGludCBfX2luZGV4KSB7CisgIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX196ZXJvID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpMDsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xKTsKKyAgX192ZWNbX19pbmRleCAmIDFdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3Byb21vdGUoZG91YmxlIF9fc2NhbGFyLCBpbnQgX19pbmRleCkgeworICBjb25zdCB2ZWN0b3IgZG91YmxlIF9femVybyA9ICh2ZWN0b3IgZG91YmxlKTA7CisgIHZlY3RvciBkb3VibGUgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywgLTEsIC0xKTsKKyAgX192ZWNbX19pbmRleCAmIDFdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworLyotLSB2ZWNfaW5zZXJ0X2FuZF96ZXJvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19pbnNlcnRfYW5kX3plcm8oY29uc3Qgc2lnbmVkIGNoYXIgKl9fcHRyKSB7CisgIHZlY3RvciBzaWduZWQgY2hhciBfX3ZlYyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpMDsKKyAgX192ZWNbN10gPSAqX19wdHI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19pbnNlcnRfYW5kX3plcm8oY29uc3QgdW5zaWduZWQgY2hhciAqX19wdHIpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX192ZWMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpMDsKKyAgX192ZWNbN10gPSAqX19wdHI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2luc2VydF9hbmRfemVybyhjb25zdCBzaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgIHZlY3RvciBzaWduZWQgc2hvcnQgX192ZWMgPSAodmVjdG9yIHNpZ25lZCBzaG9ydCkwOworICBfX3ZlY1szXSA9ICpfX3B0cjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19pbnNlcnRfYW5kX3plcm8oY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3ZlYyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpMDsKKyAgX192ZWNbM10gPSAqX19wdHI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19pbnNlcnRfYW5kX3plcm8oY29uc3Qgc2lnbmVkIGludCAqX19wdHIpIHsKKyAgdmVjdG9yIHNpZ25lZCBpbnQgX192ZWMgPSAodmVjdG9yIHNpZ25lZCBpbnQpMDsKKyAgX192ZWNbMV0gPSAqX19wdHI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2luc2VydF9hbmRfemVybyhjb25zdCB1bnNpZ25lZCBpbnQgKl9fcHRyKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMgPSAodmVjdG9yIHVuc2lnbmVkIGludCkwOworICBfX3ZlY1sxXSA9ICpfX3B0cjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2luc2VydF9hbmRfemVybyhjb25zdCBzaWduZWQgbG9uZyBsb25nICpfX3B0cikgeworICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYyA9ICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykwOworICBfX3ZlY1swXSA9ICpfX3B0cjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfaW5zZXJ0X2FuZF96ZXJvKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKTA7CisgIF9fdmVjWzBdID0gKl9fcHRyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19pbnNlcnRfYW5kX3plcm8oY29uc3QgZG91YmxlICpfX3B0cikgeworICB2ZWN0b3IgZG91YmxlIF9fdmVjID0gKHZlY3RvciBkb3VibGUpMDsKKyAgX192ZWNbMF0gPSAqX19wdHI7CisgIHJldHVybiBfX3ZlYzsKK30KKworLyotLSB2ZWNfcGVybSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19wZXJtKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnBlcm0oCisgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnBlcm0oCisgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3Blcm0odmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92cGVybSgKKyAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92cGVybSgKKyAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3Blcm0odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92cGVybSgKKyAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92cGVybSgKKyAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfcGVybSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCisvKi0tIHZlY19wZXJtaSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19wZXJtaSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYiwgaW50IF9fYykKKyAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19wZXJtaSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19wZXJtaSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIGRvdWJsZQordmVjX3Blcm1pKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgaW50IF9fYykKKyAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOworCisjZGVmaW5lIHZlY19wZXJtaShYLCBZLCBaKSAoKF9fdHlwZW9mX18oKHZlY19wZXJtaSkoKFgpLCAoWSksIChaKSkpKSBcCisgIF9fYnVpbHRpbl9zMzkwX3ZwZGkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKFkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoWikgJiAyKSA8PCAxKSB8ICgoWikgJiAxKSkpCisKKy8qLS0gdmVjX3NlbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2VsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19jICYgX19iKSB8ICh+KHZlY3RvciBzaWduZWQgY2hhcilfX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zZWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgdmVjdG9yIGJvb2wgY2hhciBfX2MpIHsKKyAgcmV0dXJuICgodmVjdG9yIHNpZ25lZCBjaGFyKV9fYyAmIF9fYikgfCAofih2ZWN0b3Igc2lnbmVkIGNoYXIpX19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NlbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKCh2ZWN0b3IgYm9vbCBjaGFyKV9fYyAmIF9fYikgfCAofih2ZWN0b3IgYm9vbCBjaGFyKV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYyAmIF9fYikgfCAofl9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2MpIHsKKyAgcmV0dXJuICgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jICYgX19iKSB8ICh+KHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zZWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAoKHZlY3RvciBzaWduZWQgc2hvcnQpX19jICYgX19iKSB8ICh+KHZlY3RvciBzaWduZWQgc2hvcnQpX19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NlbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYykgeworICByZXR1cm4gKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYyAmIF9fYikgfCAofih2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc2VsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAoKHZlY3RvciBib29sIHNob3J0KV9fYyAmIF9fYikgfCAofih2ZWN0b3IgYm9vbCBzaG9ydClfX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3NlbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19jICYgX19iKSB8ICh+X19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19jICYgX19iKSB8CisgICAgICAgICAgKH4odmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYyAmIF9fYSkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NlbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuICgodmVjdG9yIHNpZ25lZCBpbnQpX19jICYgX19iKSB8ICh+KHZlY3RvciBzaWduZWQgaW50KV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc2VsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHJldHVybiAoKHZlY3RvciBzaWduZWQgaW50KV9fYyAmIF9fYikgfCAofih2ZWN0b3Igc2lnbmVkIGludClfX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zZWwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuICgodmVjdG9yIGJvb2wgaW50KV9fYyAmIF9fYikgfCAofih2ZWN0b3IgYm9vbCBpbnQpX19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc2VsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIHZlY3RvciBib29sIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgdmVjdG9yIGJvb2wgaW50IF9fYykgeworICByZXR1cm4gKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYyAmIF9fYikgfCAofih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc2VsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gKCgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19jICYgX19iKSB8CisgICAgICAgICAgKH4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19jICYgX19hKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc2VsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiAoKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2MgJiBfX2IpIHwKKyAgICAgICAgICAofih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2MgJiBfX2EpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiAoKCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19jICYgX19iKSB8CisgICAgICAgICAgKH4odmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYyAmIF9fYSkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zZWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gKF9fYyAmIF9fYikgfCAofl9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gKF9fYyAmIF9fYikgfCAofl9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiAoKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYyAmIF9fYikgfAorICAgICAgICAgICh+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19jICYgX19hKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zZWwodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKChfX2MgJiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAofl9fYyAmICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfc2VsKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYykgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2E7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2NjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19jOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKChfX2NjICYgX19iYykgfCAofl9fY2MgJiBfX2FjKSk7Cit9CisKKy8qLS0gdmVjX2dhdGhlcl9lbGVtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19nYXRoZXJfZWxlbWVudCh2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYywgdmVjdG9yIHVuc2lnbmVkIGludCBfX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgaW50ICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgeworICBfX3ZlY1tfX2luZGV4XSA9ICooY29uc3Qgc2lnbmVkIGludCAqKSgKKyAgICAoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgKF9fSU5UUFRSX1RZUEVfXylfX29mZnNldFtfX2luZGV4XSk7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZ2F0aGVyX2VsZW1lbnQodmVjdG9yIGJvb2wgaW50IF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKKyAgX192ZWNbX19pbmRleF0gPSAqKGNvbnN0IHVuc2lnbmVkIGludCAqKSgKKyAgICAoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgKF9fSU5UUFRSX1RZUEVfXylfX29mZnNldFtfX2luZGV4XSk7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2dhdGhlcl9lbGVtZW50KHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgeworICBfX3ZlY1tfX2luZGV4XSA9ICooY29uc3QgdW5zaWduZWQgaW50ICopKAorICAgIChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyAoX19JTlRQVFJfVFlQRV9fKV9fb2Zmc2V0W19faW5kZXhdKTsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2dhdGhlcl9lbGVtZW50KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fdmVjLAorICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgX192ZWNbX19pbmRleF0gPSAqKGNvbnN0IHNpZ25lZCBsb25nIGxvbmcgKikoCisgICAgKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIChfX0lOVFBUUl9UWVBFX18pX19vZmZzZXRbX19pbmRleF0pOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2dhdGhlcl9lbGVtZW50KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgX192ZWNbX19pbmRleF0gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgKKyAgICAoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgKF9fSU5UUFRSX1RZUEVfXylfX29mZnNldFtfX2luZGV4XSk7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2dhdGhlcl9lbGVtZW50KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX192ZWMsCisgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgIF9fdmVjW19faW5kZXhdID0gKihjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKikoCisgICAgKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIChfX0lOVFBUUl9UWVBFX18pX19vZmZzZXRbX19pbmRleF0pOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19nYXRoZXJfZWxlbWVudCh2ZWN0b3IgZG91YmxlIF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgX192ZWNbX19pbmRleF0gPSAqKGNvbnN0IGRvdWJsZSAqKSgKKyAgICAoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgKF9fSU5UUFRSX1RZUEVfXylfX29mZnNldFtfX2luZGV4XSk7CisgIHJldHVybiBfX3ZlYzsKK30KKworLyotLSB2ZWNfc2NhdHRlcl9lbGVtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc2NhdHRlcl9lbGVtZW50KHZlY3RvciBzaWduZWQgaW50IF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBzaWduZWQgaW50ICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgeworICAqKHNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0W19faW5kZXhdKSA9CisgICAgX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zY2F0dGVyX2VsZW1lbnQodmVjdG9yIGJvb2wgaW50IF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAzKSB7CisgICoodW5zaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldFtfX2luZGV4XSkgPQorICAgIF9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc2NhdHRlcl9lbGVtZW50KHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKKyAgKih1bnNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0W19faW5kZXhdKSA9CisgICAgX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zY2F0dGVyX2VsZW1lbnQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMsCisgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgICooc2lnbmVkIGxvbmcgbG9uZyAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXRbX19pbmRleF0pID0KKyAgICBfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3NjYXR0ZXJfZWxlbWVudCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX192ZWMsCisgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgKih1bnNpZ25lZCBsb25nIGxvbmcgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0W19faW5kZXhdKSA9CisgICAgX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zY2F0dGVyX2VsZW1lbnQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgeworICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXRbX19pbmRleF0pID0KKyAgICBfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3NjYXR0ZXJfZWxlbWVudCh2ZWN0b3IgZG91YmxlIF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgICooZG91YmxlICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldFtfX2luZGV4XSkgPQorICAgIF9fdmVjW19faW5kZXhdOworfQorCisvKi0tIHZlY194bGQyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3QgdW5zaWduZWQgY2hhciAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3Qgc2lnbmVkIHNob3J0ICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3Qgc2lnbmVkIGludCAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3QgdW5zaWduZWQgaW50ICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfeGxkMihsb25nIF9fb2Zmc2V0LCBjb25zdCBzaWduZWQgbG9uZyBsb25nICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfeGxkMihsb25nIF9fb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3QgZG91YmxlICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3IgZG91YmxlICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKKy8qLS0gdmVjX3hsdzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCBzaWduZWQgY2hhciAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCBzaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCBzaWduZWQgaW50ICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3Igc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworLyotLSB2ZWNfeHN0ZDIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjLCBsb25nIF9fb2Zmc2V0LCBzaWduZWQgY2hhciAqX19wdHIpIHsKKyAgKih2ZWN0b3Igc2lnbmVkIGNoYXIgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX192ZWMsIGxvbmcgX19vZmZzZXQsIHVuc2lnbmVkIGNoYXIgKl9fcHRyKSB7CisgICoodmVjdG9yIHVuc2lnbmVkIGNoYXIgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHNpZ25lZCBzaG9ydCBfX3ZlYywgbG9uZyBfX29mZnNldCwgc2lnbmVkIHNob3J0ICpfX3B0cikgeworICAqKHZlY3RvciBzaWduZWQgc2hvcnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fdmVjLCBsb25nIF9fb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCAqX19wdHIpIHsKKyAgKih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHNpZ25lZCBpbnQgX192ZWMsIGxvbmcgX19vZmZzZXQsIHNpZ25lZCBpbnQgKl9fcHRyKSB7CisgICoodmVjdG9yIHNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYywgbG9uZyBfX29mZnNldCwgdW5zaWduZWQgaW50ICpfX3B0cikgeworICAqKHZlY3RvciB1bnNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMsIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIpIHsKKyAgKih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3RkMih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fdmVjLCBsb25nIF9fb2Zmc2V0LAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIpIHsKKyAgKih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPQorICAgIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIGRvdWJsZSBfX3ZlYywgbG9uZyBfX29mZnNldCwgZG91YmxlICpfX3B0cikgeworICAqKHZlY3RvciBkb3VibGUgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCisvKi0tIHZlY194c3R3NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3Igc2lnbmVkIGNoYXIgX192ZWMsIGxvbmcgX19vZmZzZXQsIHNpZ25lZCBjaGFyICpfX3B0cikgeworICAqKHZlY3RvciBzaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ZlYywgbG9uZyBfX29mZnNldCwgdW5zaWduZWQgY2hhciAqX19wdHIpIHsKKyAgKih2ZWN0b3IgdW5zaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjLCBsb25nIF9fb2Zmc2V0LCBzaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgICoodmVjdG9yIHNpZ25lZCBzaG9ydCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMsIGxvbmcgX19vZmZzZXQsIHVuc2lnbmVkIHNob3J0ICpfX3B0cikgeworICAqKHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYywgbG9uZyBfX29mZnNldCwgc2lnbmVkIGludCAqX19wdHIpIHsKKyAgKih2ZWN0b3Igc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjLCBsb25nIF9fb2Zmc2V0LCB1bnNpZ25lZCBpbnQgKl9fcHRyKSB7CisgICoodmVjdG9yIHVuc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKKy8qLS0gdmVjX2xvYWRfYm5kcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19sb2FkX2JuZHJ5KGNvbnN0IHNpZ25lZCBjaGFyICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbG9hZF9ibmRyeShjb25zdCB1bnNpZ25lZCBjaGFyICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19sb2FkX2JuZHJ5KGNvbnN0IHNpZ25lZCBzaG9ydCAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQorICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19sb2FkX2JuZHJ5KGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbG9hZF9ibmRyeShjb25zdCBzaWduZWQgaW50ICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19sb2FkX2JuZHJ5KGNvbnN0IHVuc2lnbmVkIGludCAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQorICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2xvYWRfYm5kcnkoY29uc3Qgc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQorICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbG9hZF9ibmRyeShjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCB1bnNpZ25lZCBzaG9ydCBfX2xlbikKKyAgX19jb25zdGFudF9wb3cyX3JhbmdlKF9fbGVuLCA2NCwgNDA5Nik7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIGRvdWJsZQordmVjX2xvYWRfYm5kcnkoY29uc3QgZG91YmxlICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCisjZGVmaW5lIHZlY19sb2FkX2JuZHJ5KFgsIFkpICgoX190eXBlb2ZfXygodmVjX2xvYWRfYm5kcnkpKChYKSwgKFkpKSkpIFwKKyAgX19idWlsdGluX3MzOTBfdmxiYigoWCksICgoWSkgPT0gNjQgPyAwIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAxMjggPyAxIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAyNTYgPyAyIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSA1MTIgPyAzIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAxMDI0ID8gNCA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gMjA0OCA/IDUgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDQwOTYgPyA2IDogLTEpKSkKKworLyotLSB2ZWNfbG9hZF9sZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19sb2FkX2xlbihjb25zdCBzaWduZWQgY2hhciAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19sb2FkX2xlbihjb25zdCB1bnNpZ25lZCBjaGFyICpfX3B0ciwgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19sb2FkX2xlbihjb25zdCBzaWduZWQgc2hvcnQgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19sb2FkX2xlbihjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19sb2FkX2xlbihjb25zdCBzaWduZWQgaW50ICpfX3B0ciwgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19sb2FkX2xlbihjb25zdCB1bnNpZ25lZCBpbnQgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2xvYWRfbGVuKGNvbnN0IHNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2xvYWRfbGVuKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19sb2FkX2xlbihjb25zdCBkb3VibGUgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOworfQorCisvKi0tIHZlY19zdG9yZV9sZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjLCBzaWduZWQgY2hhciAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHVuc2lnbmVkIGNoYXIgX192ZWMsIHVuc2lnbmVkIGNoYXIgKl9fcHRyLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc3RvcmVfbGVuKHZlY3RvciBzaWduZWQgc2hvcnQgX192ZWMsIHNpZ25lZCBzaG9ydCAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fdmVjLCB1bnNpZ25lZCBzaG9ydCAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHNpZ25lZCBpbnQgX192ZWMsIHNpZ25lZCBpbnQgKl9fcHRyLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc3RvcmVfbGVuKHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMsIHVuc2lnbmVkIGludCAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMsIHNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc3RvcmVfbGVuKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX192ZWMsIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIGRvdWJsZSBfX3ZlYywgZG91YmxlICpfX3B0ciwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIF9fYnVpbHRpbl9zMzkwX3ZzdGwoKHZlY3RvciBzaWduZWQgY2hhcilfX3ZlYywgX19sZW4sIF9fcHRyKTsKK30KKworLyotLSB2ZWNfbG9hZF9wYWlyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2xvYWRfcGFpcihzaWduZWQgbG9uZyBsb25nIF9fYSwgc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbG9hZF9wYWlyKHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2dlbm1hc2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19nZW5tYXNrKHVuc2lnbmVkIHNob3J0IF9fbWFzaykKKyAgX19jb25zdGFudChfX21hc2spIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoCisgICAgX19tYXNrICYgMHg4MDAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHg0MDAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgyMDAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgxMDAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwODAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwNDAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMjAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMTAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDgwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDQwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDIwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDEwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDA4ID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDA0ID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDAyID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDAxID8gMHhmZiA6IDApOworfQorCisvKi0tIHZlY19nZW5tYXNrc18qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZ2VubWFza3NfOCh1bnNpZ25lZCBjaGFyIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIgX19sYXN0KQorICBfX2NvbnN0YW50KF9fZmlyc3QpIF9fY29uc3RhbnQoX19sYXN0KSB7CisgIHVuc2lnbmVkIGNoYXIgX19iaXQxID0gX19maXJzdCAmIDc7CisgIHVuc2lnbmVkIGNoYXIgX19iaXQyID0gX19sYXN0ICYgNzsKKyAgdW5zaWduZWQgY2hhciBfX21hc2sxID0gKHVuc2lnbmVkIGNoYXIpKDFVIDw8ICg3IC0gX19iaXQxKSA8PCAxKSAtIDE7CisgIHVuc2lnbmVkIGNoYXIgX19tYXNrMiA9ICh1bnNpZ25lZCBjaGFyKSgxVSA8PCAoNyAtIF9fYml0MikpIC0gMTsKKyAgdW5zaWduZWQgY2hhciBfX3ZhbHVlID0gKF9fYml0MSA8PSBfX2JpdDIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXNrMSAmIH5fX21hc2syIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgfCB+X19tYXNrMik7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX192YWx1ZTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZ2VubWFza3NfMTYodW5zaWduZWQgY2hhciBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyIF9fbGFzdCkKKyAgX19jb25zdGFudChfX2ZpcnN0KSBfX2NvbnN0YW50KF9fbGFzdCkgeworICB1bnNpZ25lZCBjaGFyIF9fYml0MSA9IF9fZmlyc3QgJiAxNTsKKyAgdW5zaWduZWQgY2hhciBfX2JpdDIgPSBfX2xhc3QgJiAxNTsKKyAgdW5zaWduZWQgc2hvcnQgX19tYXNrMSA9ICh1bnNpZ25lZCBzaG9ydCkoMVUgPDwgKDE1IC0gX19iaXQxKSA8PCAxKSAtIDE7CisgIHVuc2lnbmVkIHNob3J0IF9fbWFzazIgPSAodW5zaWduZWQgc2hvcnQpKDFVIDw8ICgxNSAtIF9fYml0MikpIC0gMTsKKyAgdW5zaWduZWQgc2hvcnQgX192YWx1ZSA9IChfX2JpdDEgPD0gX19iaXQyID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hc2sxICYgfl9fbWFzazIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgfCB+X19tYXNrMik7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19nZW5tYXNrc18zMih1bnNpZ25lZCBjaGFyIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIgX19sYXN0KQorICBfX2NvbnN0YW50KF9fZmlyc3QpIF9fY29uc3RhbnQoX19sYXN0KSB7CisgIHVuc2lnbmVkIGNoYXIgX19iaXQxID0gX19maXJzdCAmIDMxOworICB1bnNpZ25lZCBjaGFyIF9fYml0MiA9IF9fbGFzdCAmIDMxOworICB1bnNpZ25lZCBpbnQgX19tYXNrMSA9ICgxVSA8PCAoMzEgLSBfX2JpdDEpIDw8IDEpIC0gMTsKKyAgdW5zaWduZWQgaW50IF9fbWFzazIgPSAoMVUgPDwgKDMxIC0gX19iaXQyKSkgLSAxOworICB1bnNpZ25lZCBpbnQgX192YWx1ZSA9IChfX2JpdDEgPD0gX19iaXQyID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXNrMSAmIH5fX21hc2syIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXNrMSB8IH5fX21hc2syKTsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19nZW5tYXNrc182NCh1bnNpZ25lZCBjaGFyIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIgX19sYXN0KQorICBfX2NvbnN0YW50KF9fZmlyc3QpIF9fY29uc3RhbnQoX19sYXN0KSB7CisgIHVuc2lnbmVkIGNoYXIgX19iaXQxID0gX19maXJzdCAmIDYzOworICB1bnNpZ25lZCBjaGFyIF9fYml0MiA9IF9fbGFzdCAmIDYzOworICB1bnNpZ25lZCBsb25nIGxvbmcgX19tYXNrMSA9ICgxVUxMIDw8ICg2MyAtIF9fYml0MSkgPDwgMSkgLSAxOworICB1bnNpZ25lZCBsb25nIGxvbmcgX19tYXNrMiA9ICgxVUxMIDw8ICg2MyAtIF9fYml0MikpIC0gMTsKKyAgdW5zaWduZWQgbG9uZyBsb25nIF9fdmFsdWUgPSAoX19iaXQxIDw9IF9fYml0MiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgJiB+X19tYXNrMiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgfCB+X19tYXNrMik7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3ZhbHVlOworfQorCisvKi0tIHZlY19zcGxhdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NwbGF0KHZlY3RvciBzaWduZWQgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMTUpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zcGxhdCh2ZWN0b3IgYm9vbCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxNSkgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxNSkgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgNykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc3BsYXQodmVjdG9yIGJvb2wgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDcpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcGxhdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDcpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBpbnQgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc3BsYXQodmVjdG9yIGJvb2wgaW50IF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAzKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KSh2ZWN0b3IgdW5zaWduZWQgaW50KV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3BsYXQodmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc3BsYXQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3BsYXQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcGxhdCh2ZWN0b3IgZG91YmxlIF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3ZlY1tfX2luZGV4XTsKK30KKworLyotLSB2ZWNfc3BsYXRfcyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3BsYXRfczgoc2lnbmVkIGNoYXIgX19zY2FsYXIpCisgIF9fY29uc3RhbnQoX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3BsYXRfczE2KHNpZ25lZCBzaG9ydCBfX3NjYWxhcikKKyAgX19jb25zdGFudChfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NwbGF0X3MzMihzaWduZWQgc2hvcnQgX19zY2FsYXIpCisgIF9fY29uc3RhbnQoX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkoc2lnbmVkIGludClfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc3BsYXRfczY0KHNpZ25lZCBzaG9ydCBfX3NjYWxhcikKKyAgX19jb25zdGFudChfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShzaWduZWQgbG9uZylfX3NjYWxhcjsKK30KKworLyotLSB2ZWNfc3BsYXRfdSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zcGxhdF91OCh1bnNpZ25lZCBjaGFyIF9fc2NhbGFyKQorICBfX2NvbnN0YW50KF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcGxhdF91MTYodW5zaWduZWQgc2hvcnQgX19zY2FsYXIpCisgIF9fY29uc3RhbnQoX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3BsYXRfdTMyKHNpZ25lZCBzaG9ydCBfX3NjYWxhcikKKyAgX19jb25zdGFudChfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpKHNpZ25lZCBpbnQpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3BsYXRfdTY0KHNpZ25lZCBzaG9ydCBfX3NjYWxhcikKKyAgX19jb25zdGFudChfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKHNpZ25lZCBsb25nIGxvbmcpX19zY2FsYXI7Cit9CisKKy8qLS0gdmVjX3NwbGF0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3BsYXRzKHNpZ25lZCBjaGFyIF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fc2NhbGFyOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NwbGF0cyh1bnNpZ25lZCBjaGFyIF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcGxhdHMoc2lnbmVkIHNob3J0IF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3BsYXRzKHVuc2lnbmVkIHNob3J0IF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fc2NhbGFyOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NwbGF0cyhzaWduZWQgaW50IF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcGxhdHModW5zaWduZWQgaW50IF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcGxhdHMoc2lnbmVkIGxvbmcgbG9uZyBfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fc2NhbGFyOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3BsYXRzKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcGxhdHMoZG91YmxlIF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3NjYWxhcjsKK30KKworLyotLSB2ZWNfZXh0ZW5kX3M2NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2V4dGVuZF9zNjQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShfX2FbN10sIF9fYVsxNV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2V4dGVuZF9zNjQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykoX19hWzNdLCBfX2FbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2V4dGVuZF9zNjQodmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpKF9fYVsxXSwgX19hWzNdKTsKK30KKworLyotLSB2ZWNfbWVyZ2VoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tZXJnZWgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikoCisgICAgX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdLCBfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10sCisgICAgX19hWzRdLCBfX2JbNF0sIF9fYVs1XSwgX19iWzVdLCBfX2FbNl0sIF9fYls2XSwgX19hWzddLCBfX2JbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKAorICAgIF9fYVswXSwgX19iWzBdLCBfX2FbMV0sIF9fYlsxXSwgX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdLAorICAgIF9fYVs0XSwgX19iWzRdLCBfX2FbNV0sIF9fYls1XSwgX19hWzZdLCBfX2JbNl0sIF9fYVs3XSwgX19iWzddKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoCisgICAgX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdLCBfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10sCisgICAgX19hWzRdLCBfX2JbNF0sIF9fYVs1XSwgX19iWzVdLCBfX2FbNl0sIF9fYls2XSwgX19hWzddLCBfX2JbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWVyZ2VoKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpKAorICAgIF9fYVswXSwgX19iWzBdLCBfX2FbMV0sIF9fYlsxXSwgX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19tZXJnZWgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoCisgICAgX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdLCBfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoCisgICAgX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdLCBfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21lcmdlaCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KShfX2FbMF0sIF9fYlswXSwgX19hWzFdLCBfX2JbMV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19tZXJnZWgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21lcmdlaCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2FbMF0sIF9fYlswXSwgX19hWzFdLCBfX2JbMV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX21lcmdlaCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShfX2FbMF0sIF9fYlswXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2FbMF0sIF9fYlswXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoX19hWzBdLCBfX2JbMF0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbWVyZ2VoKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKF9fYVswXSwgX19iWzBdKTsKK30KKworLyotLSB2ZWNfbWVyZ2VsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tZXJnZWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikoCisgICAgX19hWzhdLCBfX2JbOF0sIF9fYVs5XSwgX19iWzldLCBfX2FbMTBdLCBfX2JbMTBdLCBfX2FbMTFdLCBfX2JbMTFdLAorICAgIF9fYVsxMl0sIF9fYlsxMl0sIF9fYVsxM10sIF9fYlsxM10sIF9fYVsxNF0sIF9fYlsxNF0sIF9fYVsxNV0sIF9fYlsxNV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKAorICAgIF9fYVs4XSwgX19iWzhdLCBfX2FbOV0sIF9fYls5XSwgX19hWzEwXSwgX19iWzEwXSwgX19hWzExXSwgX19iWzExXSwKKyAgICBfX2FbMTJdLCBfX2JbMTJdLCBfX2FbMTNdLCBfX2JbMTNdLCBfX2FbMTRdLCBfX2JbMTRdLCBfX2FbMTVdLCBfX2JbMTVdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19tZXJnZWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoCisgICAgX19hWzhdLCBfX2JbOF0sIF9fYVs5XSwgX19iWzldLCBfX2FbMTBdLCBfX2JbMTBdLCBfX2FbMTFdLCBfX2JbMTFdLAorICAgIF9fYVsxMl0sIF9fYlsxMl0sIF9fYVsxM10sIF9fYlsxM10sIF9fYVsxNF0sIF9fYlsxNF0sIF9fYVsxNV0sIF9fYlsxNV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWVyZ2VsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpKAorICAgIF9fYVs0XSwgX19iWzRdLCBfX2FbNV0sIF9fYls1XSwgX19hWzZdLCBfX2JbNl0sIF9fYVs3XSwgX19iWzddKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19tZXJnZWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoCisgICAgX19hWzRdLCBfX2JbNF0sIF9fYVs1XSwgX19iWzVdLCBfX2FbNl0sIF9fYls2XSwgX19hWzddLCBfX2JbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tZXJnZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoCisgICAgX19hWzRdLCBfX2JbNF0sIF9fYVs1XSwgX19iWzVdLCBfX2FbNl0sIF9fYls2XSwgX19hWzddLCBfX2JbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KShfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19tZXJnZWwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShfX2FbMV0sIF9fYlsxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX21lcmdlbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2FbMV0sIF9fYlsxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tZXJnZWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoX19hWzFdLCBfX2JbMV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbWVyZ2VsKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKF9fYVsxXSwgX19iWzFdKTsKK30KKworLyotLSB2ZWNfcGFjayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19wYWNrKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hOworICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikoCisgICAgX19hY1sxXSwgX19hY1szXSwgX19hY1s1XSwgX19hY1s3XSwgX19hY1s5XSwgX19hY1sxMV0sIF9fYWNbMTNdLCBfX2FjWzE1XSwKKyAgICBfX2JjWzFdLCBfX2JjWzNdLCBfX2JjWzVdLCBfX2JjWzddLCBfX2JjWzldLCBfX2JjWzExXSwgX19iY1sxM10sIF9fYmNbMTVdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3BhY2sodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIGJvb2wgY2hhciBfX2FjID0gKHZlY3RvciBib29sIGNoYXIpX19hOworICB2ZWN0b3IgYm9vbCBjaGFyIF9fYmMgPSAodmVjdG9yIGJvb2wgY2hhcilfX2I7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoCisgICAgX19hY1sxXSwgX19hY1szXSwgX19hY1s1XSwgX19hY1s3XSwgX19hY1s5XSwgX19hY1sxMV0sIF9fYWNbMTNdLCBfX2FjWzE1XSwKKyAgICBfX2JjWzFdLCBfX2JjWzNdLCBfX2JjWzVdLCBfX2JjWzddLCBfX2JjWzldLCBfX2JjWzExXSwgX19iY1sxM10sIF9fYmNbMTVdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wYWNrKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2E7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgKKyAgICBfX2FjWzFdLCBfX2FjWzNdLCBfX2FjWzVdLCBfX2FjWzddLCBfX2FjWzldLCBfX2FjWzExXSwgX19hY1sxM10sIF9fYWNbMTVdLAorICAgIF9fYmNbMV0sIF9fYmNbM10sIF9fYmNbNV0sIF9fYmNbN10sIF9fYmNbOV0sIF9fYmNbMTFdLCBfX2JjWzEzXSwgX19iY1sxNV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcGFjayh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYWMgPSAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2E7CisgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KSgKKyAgICBfX2FjWzFdLCBfX2FjWzNdLCBfX2FjWzVdLCBfX2FjWzddLAorICAgIF9fYmNbMV0sIF9fYmNbM10sIF9fYmNbNV0sIF9fYmNbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3BhY2sodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2FjID0gKHZlY3RvciBib29sIHNob3J0KV9fYTsKKyAgdmVjdG9yIGJvb2wgc2hvcnQgX19iYyA9ICh2ZWN0b3IgYm9vbCBzaG9ydClfX2I7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKAorICAgIF9fYWNbMV0sIF9fYWNbM10sIF9fYWNbNV0sIF9fYWNbN10sCisgICAgX19iY1sxXSwgX19iY1szXSwgX19iY1s1XSwgX19iY1s3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3BhY2sodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2E7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgKKyAgICBfX2FjWzFdLCBfX2FjWzNdLCBfX2FjWzVdLCBfX2FjWzddLAorICAgIF9fYmNbMV0sIF9fYmNbM10sIF9fYmNbNV0sIF9fYmNbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3BhY2sodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBpbnQgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIGludClfX2E7CisgIHZlY3RvciBzaWduZWQgaW50IF9fYmMgPSAodmVjdG9yIHNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KShfX2FjWzFdLCBfX2FjWzNdLCBfX2JjWzFdLCBfX2JjWzNdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfcGFjayh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciBib29sIGludCBfX2FjID0gKHZlY3RvciBib29sIGludClfX2E7CisgIHZlY3RvciBib29sIGludCBfX2JjID0gKHZlY3RvciBib29sIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2FjWzFdLCBfX2FjWzNdLCBfX2JjWzFdLCBfX2JjWzNdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BhY2sodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYTsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpKF9fYWNbMV0sIF9fYWNbM10sIF9fYmNbMV0sIF9fYmNbM10pOworfQorCisvKi0tIHZlY19wYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3BhY2tzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrc2goX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3BhY2tzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19wYWNrcyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrc2YoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19wYWNrcyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfcGFja3ModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa3NnKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BhY2tzKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNnKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfcGFja3NfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19wYWNrc19jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrc2hzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wYWNrc19jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzaHMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcGFja3NfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrc2ZzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcGFja3NfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZnMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3BhY2tzX2NjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrc2dzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BhY2tzX2NjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZ3MoX19hLCBfX2IsIF9fY2MpOworfQorCisvKi0tIHZlY19wYWNrc3UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfcGFja3N1KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9femVybyA9ICh2ZWN0b3Igc2lnbmVkIHNob3J0KTA7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2goCisgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoX19hID49IF9femVybykgJiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KShfX2IgPj0gX196ZXJvKSAmICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wYWNrc3UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcGFja3N1KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGNvbnN0IHZlY3RvciBzaWduZWQgaW50IF9femVybyA9ICh2ZWN0b3Igc2lnbmVkIGludCkwOworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNmKAorICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2EgPj0gX196ZXJvKSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAodmVjdG9yIHVuc2lnbmVkIGludCkoX19iID49IF9femVybykgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19wYWNrc3UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2YoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfcGFja3N1KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGNvbnN0IHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9femVybyA9ICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykwOworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNnKAorICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShfX2EgPj0gX196ZXJvKSAmCisgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShfX2IgPj0gX196ZXJvKSAmCisgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BhY2tzdSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZyhfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX3BhY2tzdV9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wYWNrc3VfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2hzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcGFja3N1X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2ZzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BhY2tzdV9jYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNncyhfX2EsIF9fYiwgX19jYyk7Cit9CisKKy8qLS0gdmVjX3VucGFja2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3VucGFja2godmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwaGIoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY191bnBhY2toKHZlY3RvciBib29sIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnVwaGIoKHZlY3RvciBzaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY191bnBhY2toKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGhiKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfdW5wYWNraCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwaGgoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfdW5wYWNraCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnVwaGgoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3VucGFja2godmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGhoKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfdW5wYWNraCh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGhmKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3VucGFja2godmVjdG9yIGJvb2wgaW50IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92dXBoZigodmVjdG9yIHNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3VucGFja2godmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxoZihfX2EpOworfQorCisvKi0tIHZlY191bnBhY2tsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY191bnBhY2tsKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxiKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfdW5wYWNrbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3Z1cGxiKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfdW5wYWNrbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxsYihfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3VucGFja2wodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxodyhfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY191bnBhY2tsKHZlY3RvciBib29sIHNob3J0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92dXBsaHcoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3VucGFja2wodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGxoKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfdW5wYWNrbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxmKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3VucGFja2wodmVjdG9yIGJvb2wgaW50IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92dXBsZigodmVjdG9yIHNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3VucGFja2wodmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxsZihfX2EpOworfQorCisvKi0tIHZlY19jbXBlcSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jbXBlcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGVxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wZXEodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA9PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGVxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA9PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jbXBlcSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGVxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA9PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBlcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGVxKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID09IF9fYik7Cit9CisKKy8qLS0gdmVjX2NtcGdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGdlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPj0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hID49IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wZ2UodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA+PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hID49IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGdlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPj0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPj0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA+PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBnZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA+PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBnZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA+PSBfX2IpOworfQorCisvKi0tIHZlY19jbXBndCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jbXBndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hID4gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGd0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hID4gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBndCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hID4gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA+IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGd0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPiBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA+IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGd0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPiBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA+IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGd0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID4gX19iKTsKK30KKworLyotLSB2ZWNfY21wbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA8PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPD0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBsZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hIDw9IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPD0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wbGUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA8PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jbXBsZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA8PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBsZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hIDw9IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGxlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hIDw9IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGxlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hIDw9IF9fYik7Cit9CisKKy8qLS0gdmVjX2NtcGx0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGx0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcGx0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcGx0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hIDwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wbHQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGx0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hIDwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGx0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hIDwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wbHQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPCBfX2IpOworfQorCisvKi0tIHZlY19hbGxfZXEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocyhfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKF9fYSwgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncyhfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNlZGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKKy8qLS0gdmVjX2FsbF9uZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2VkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworLyotLSB2ZWNfYWxsX2dlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19iLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2IsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcygodmVjdG9yIHNpZ25lZCBpbnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19iLCAodmVjdG9yIHNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2IsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hlZGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKKy8qLS0gdmVjX2FsbF9ndCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKKy8qLS0gdmVjX2FsbF9sZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZWRicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCisvKi0tIHZlY19hbGxfbHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYiwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2IsICh2ZWN0b3Igc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYiwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGRicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCisvKi0tIHZlY19hbGxfbmdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbGxfbmdlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGVkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworLyotLSB2ZWNfYWxsX25ndCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYWxsX25ndCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworLyotLSB2ZWNfYWxsX25sZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYWxsX25sZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hlZGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKKy8qLS0gdmVjX2FsbF9ubHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FsbF9ubHQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKKy8qLS0gdmVjX2FsbF9uYW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FsbF9uYW4odmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmdGNpZGIoX19hLCAxNSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCisvKi0tIHZlY19hbGxfbnVtZXJpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbGxfbnVtZXJpYyh2ZWN0b3IgZG91YmxlIF9fYSkgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZ0Y2lkYihfX2EsIDE1LCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKKy8qLS0gdmVjX2FueV9lcSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2VkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworLyotLSB2ZWNfYW55X25lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoX19hLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcyhfX2EsICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjZWRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCisvKi0tIHZlY19hbnlfZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYiwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2IsICh2ZWN0b3Igc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYiwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGVkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworLyotLSB2ZWNfYW55X2d0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworLyotLSB2ZWNfYW55X2xlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hlZGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKKy8qLS0gdmVjX2FueV9sdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYiwgKHZlY3RvciBzaWduZWQgY2hhcilfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19iLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19iLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYiwgKHZlY3RvciBzaWduZWQgaW50KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19iLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19iLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKKy8qLS0gdmVjX2FueV9uZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FueV9uZ2UodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZWRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCisvKi0tIHZlY19hbnlfbmd0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbnlfbmd0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCisvKi0tIHZlY19hbnlfbmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbnlfbmxlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGVkYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworLyotLSB2ZWNfYW55X25sdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYW55X25sdCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hkYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworLyotLSB2ZWNfYW55X25hbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYW55X25hbih2ZWN0b3IgZG91YmxlIF9fYSkgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZ0Y2lkYihfX2EsIDE1LCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDM7Cit9CisKKy8qLS0gdmVjX2FueV9udW1lcmljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FueV9udW1lcmljKHZlY3RvciBkb3VibGUgX19hKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZnRjaWRiKF9fYSwgMTUsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworLyotLSB2ZWNfYW5kYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2FuZGModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2FuZGModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2FuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2FuZGModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2FuZGModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19hbmRjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19hbmRjKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgfih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYKKyAgICAgICAgICAgICAgICAgICAgICAgICB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX2FuZGModmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJgorICAgICAgICAgICAgICAgICAgICAgICAgIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCisvKi0tIHZlY19ub3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19ub3IodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX25vcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX25vcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19ub3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19ub3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19ub3IodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX25vcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfbm9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19ub3IodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19ub3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbm9yKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbm9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19ub3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX25vcih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbm9yKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbm9yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX25vcih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX25vcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX25vcih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX25vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbm9yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbm9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX25vcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX25vcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX25vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19ub3IodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSl+KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19ub3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKX4oKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX25vcih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpfigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCisvKi0tIHZlY19jbnRseiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY250bHoodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNsemIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2x6YihfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbnRseih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNsemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbnRseih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2x6aChfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY250bHoodmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2x6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjbHpmKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19jbnRseih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjbHpnKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19jbnRseih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNsemcoX19hKTsKK30KKworLyotLSB2ZWNfY250dHogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NudHR6KHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjdHpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NudHR6KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmN0emIoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY250dHoodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjdHpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY250dHoodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmN0emgoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NudHR6KHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmN0emYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NudHR6KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y3R6ZihfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfY250dHoodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y3R6ZygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfY250dHoodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjdHpnKF9fYSk7Cit9CisKKy8qLS0gdmVjX3BvcGNudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wb3BjbnQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBvcGN0YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wb3BjbnQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cG9wY3RiKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3BvcGNudCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBvcGN0aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3BvcGNudCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cG9wY3RoKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19wb3BjbnQodmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cG9wY3RmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19wb3BjbnQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwb3BjdGYoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3BvcGNudCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwb3BjdGcoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3BvcGNudCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBvcGN0ZyhfX2EpOworfQorCisvKi0tIHZlY19ybCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3JsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92ZXJsbHZiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZlcmxsdmIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcmwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZlcmxsdmgoCisgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZlcmxsdmgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3JsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92ZXJsbHZmKAorICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3JsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGx2ZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfcmwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZlcmxsdmcoCisgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZXJsbHZnKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfcmxpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19ybGkodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdW5zaWduZWQgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdmVybGxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIChpbnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19ybGkodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGxiKF9fYSwgKGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcmxpKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdmVybGxoKAorICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAoaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3JsaSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGxoKF9fYSwgKGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3JsaSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHVuc2lnbmVkIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdmVybGxmKAorICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgKGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfcmxpKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGxmKF9fYSwgKGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3JsaSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHVuc2lnbmVkIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdmVybGxnKAorICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgKGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfcmxpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGxnKF9fYSwgKGludClfX2IpOworfQorCisvKi0tIHZlY19ybF9tYXNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfcmxfbWFzayh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfcmxfbWFzayh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3JsX21hc2sodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3JsX21hc2sodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19ybF9tYXNrKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19ybF9tYXNrKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19ybF9tYXNrKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19ybF9tYXNrKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKKyNkZWZpbmUgdmVjX3JsX21hc2soWCwgWSwgWikgKChfX3R5cGVvZl9fKCh2ZWNfcmxfbWFzaykoKFgpLCAoWSksIChaKSkpKSBcCisgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fcmVzOyBcCisgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX194ID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKShYKTsgXAorICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9feSA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoWSk7IFwKKyAgICBzd2l0Y2ggKHNpemVvZiAoKFgpWzBdKSkgeyBcCisgICAgY2FzZSAxOiBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikgX19idWlsdGluX3MzOTBfdmVyaW1iKCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9feCwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9feCwgXAorICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX3ksIChaKSk7IGJyZWFrOyBcCisgICAgY2FzZSAyOiBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikgX19idWlsdGluX3MzOTBfdmVyaW1oKCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX3gsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX194LCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX3ksIChaKSk7IGJyZWFrOyBcCisgICAgY2FzZSA0OiBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikgX19idWlsdGluX3MzOTBfdmVyaW1mKCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX194LCAodmVjdG9yIHVuc2lnbmVkIGludClfX3gsIFwKKyAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX3ksIChaKSk7IGJyZWFrOyBcCisgICAgZGVmYXVsdDogX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpIF9fYnVpbHRpbl9zMzkwX3ZlcmltZyggXAorICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9feCwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX194LCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX195LCAoWikpOyBicmVhazsgXAorICAgIH0gX19yZXM7IH0pKQorCisvKi0tIHZlY19zbGwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2xsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NsbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NsbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfc2xsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNsKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2woX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNsKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NsbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19zbGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19zbGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3NsbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc2xsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc2xsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc2xsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc2xsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zbGwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKKy8qLS0gdmVjX3NsYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2xiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2xiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNsYihfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NsYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNsYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zbGIodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc2xiKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zbGIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zbGIodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NsYih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NsYih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NsYih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NsYih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3NsYih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfc2xiKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyotLSB2ZWNfc2xkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NsZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc2xkKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zbGQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NsZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc2xkKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zbGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc2xkKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBkb3VibGUKK3ZlY19zbGQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCisjZGVmaW5lIHZlY19zbGQoWCwgWSwgWikgKChfX3R5cGVvZl9fKCh2ZWNfc2xkKSgoWCksIChZKSwgKFopKSkpIFwKKyAgX19idWlsdGluX3MzOTBfdnNsZGIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKFkpLCAoWikpKQorCisvKi0tIHZlY19zbGR3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2xkdyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zbGR3KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NsZHcodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc2xkdyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zbGR3KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NsZHcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGR3KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NsZHcodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIGRvdWJsZQordmVjX3NsZHcodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKKyNkZWZpbmUgdmVjX3NsZHcoWCwgWSwgWikgKChfX3R5cGVvZl9fKCh2ZWNfc2xkdykoKFgpLCAoWSksIChaKSkpKSBcCisgIF9fYnVpbHRpbl9zMzkwX3ZzbGRiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcikoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShZKSwgKFopICogNCkpCisKKy8qLS0gdmVjX3NyYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zcmFsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNyYShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmEoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmEoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3NyYWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3NyYWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zcmFsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX3NyYWwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zcmFsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyotLSB2ZWNfc3JhYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcmFiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NyYWIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JhYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmFiKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JhYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNyYWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JhYih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JhYih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NyYWIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NyYWIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zcmFiKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3JhYih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmFiKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3JhYih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFiKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFiKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcmFiKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfc3JhYih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKi0tIHZlY19zcmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NybCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zcmwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zcmwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNybChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNybChfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JsKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19zcmwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc3JsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc3JsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3JsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc3JsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX3NybCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX3NybCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKKy8qLS0gdmVjX3NyYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3JiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NyYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zcmIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JsYihfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NyYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNybGIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JiKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcmIodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcmIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NyYih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NyYih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NyYih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3JiKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3JiKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcmIodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcmIodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyotLSB2ZWNfYWJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19hYnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gdmVjX3NlbChfX2EsIC1fX2EsIHZlY19jbXBsdChfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpMCkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfYWJzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgLV9fYSwgdmVjX2NtcGx0KF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpMCkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2Ficyh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCAtX19hLCB2ZWNfY21wbHQoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpMCkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2Ficyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCAtX19hLCB2ZWNfY21wbHQoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpMCkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfYWJzKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmxwZGIoX19hKTsKK30KKworLyotLSB2ZWNfbmFicyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX25hYnModmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmbG5kYihfX2EpOworfQorCisvKi0tIHZlY19tYXggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21heCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHZlY3RvciBzaWduZWQgY2hhciBfX2JjID0gKHZlY3RvciBzaWduZWQgY2hhcilfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tYXgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYWMgPSAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2FjLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19iYywgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbWF4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hYywgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWF4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tYXgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYmMgPSAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWF4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2FjID0gKHZlY3RvciBzaWduZWQgc2hvcnQpX19hOworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYWMsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tYXgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hYywgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21heCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWF4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGludCBfX2JjID0gKHZlY3RvciBzaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19iYywgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWF4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGludCBfX2FjID0gKHZlY3RvciBzaWduZWQgaW50KV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2FjLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbWF4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2FjLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19tYXgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYmMgPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gdmVjX3NlbChfX2JjLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19tYXgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYWMgPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hOworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYWMsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19iYywgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tYXgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hOworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYWMsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX21heCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCisvKi0tIHZlY19taW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21pbih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfbWluKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHZlY3RvciBzaWduZWQgY2hhciBfX2JjID0gKHZlY3RvciBzaWduZWQgY2hhcilfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19taW4odmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYWMgPSAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19hYywgX19iLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2JjLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbWluKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYWMsIF9fYiwgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWluKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYiwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19taW4odmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYmMgPSAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWluKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2FjID0gKHZlY3RvciBzaWduZWQgc2hvcnQpX19hOworICByZXR1cm4gdmVjX3NlbChfX2FjLCBfX2IsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19taW4odmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYWMsIF9fYiwgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21pbih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYiwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWluKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGludCBfX2JjID0gKHZlY3RvciBzaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2JjLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWluKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGludCBfX2FjID0gKHZlY3RvciBzaWduZWQgaW50KV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19hYywgX19iLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbWluKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19hYywgX19iLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbWluKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19taW4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYmMgPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYmMsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19taW4odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYWMgPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hOworICByZXR1cm4gdmVjX3NlbChfX2FjLCBfX2IsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2JjLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19taW4odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hOworICByZXR1cm4gdmVjX3NlbChfX2FjLCBfX2IsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX21pbih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCisvKi0tIHZlY19hZGRfdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FkZF91MTI4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YXEoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19hZGRjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfYWRkYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmFjY2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19hZGRjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhY2NoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2FkZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YWNjZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19hZGRjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmFjY2coX19hLCBfX2IpOworfQorCisvKi0tIHZlY19hZGRjX3UxMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FkZGNfdTEyOCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmFjY3EoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19hZGRlX3UxMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FkZGVfdTEyOCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YWNxKF9fYSwgX19iLCBfX2MpOworfQorCisvKi0tIHZlY19hZGRlY191MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FkZGVjX3UxMjgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhY2NjcShfX2EsIF9fYiwgX19jKTsKK30KKworLyotLSB2ZWNfYXZnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19hdmcodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfYXZnKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2goX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2F2Zyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2YoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2F2Zyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2coX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2F2Zyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2xiKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhdmdsaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19hdmcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YXZnbGYoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2xnKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfY2hlY2tzdW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NoZWNrc3VtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNrc20oX19hLCBfX2IpOworfQorCisvKi0tIHZlY19nZm1zdW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2dmbXN1bSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmdmbWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZ2Ztc3VtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1oKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2dmbXN1bSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1mKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfZ2Ztc3VtXzEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2dmbXN1bV8xMjgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Z2ZtZyhfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2dmbXN1bV9hY2N1bSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZ2Ztc3VtX2FjY3VtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Z2ZtYWIoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19nZm1zdW1fYWNjdW0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1haChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2dmbXN1bV9hY2N1bSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Z2ZtYWYoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX2dmbXN1bV9hY2N1bV8xMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19nZm1zdW1fYWNjdW1fMTI4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1hZyhfX2EsIF9fYiwgX19jKTsKK30KKworLyotLSB2ZWNfbWxhZGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfbWxhZGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiBfX2EgKiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiArICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWxhZGQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWxhZGQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19hICogKHZlY3RvciBzaWduZWQgc2hvcnQpX19iICsgKHZlY3RvciBzaWduZWQgc2hvcnQpX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYSAqIF9fYiArIF9fYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2EgKiAodmVjdG9yIHNpZ25lZCBpbnQpX19iICsgKHZlY3RvciBzaWduZWQgaW50KV9fYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19hICogX19iICsgX19jOworfQorCisvKi0tIHZlY19taGFkZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21oYWRkKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1haGIoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbWhhZGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsaGIoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19taGFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWhoKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19taGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWxoaChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19taGFkZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWhmKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbWhhZGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsaGYoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX21lYWRkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX21lYWRkKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWViKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tZWFkZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsZWIoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWVhZGQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hZWgoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19tZWFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsZWgoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbWVhZGQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFlZihfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX21lYWRkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbGVmKF9fYSwgX19iLCBfX2MpOworfQorCisvKi0tIHZlY19tb2FkZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tb2FkZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFvYihfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbW9hZGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbG9iKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21vYWRkKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYW9oKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbW9hZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbG9oKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX21vYWRkKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hb2YoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tb2FkZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWxvZihfX2EsIF9fYiwgX19jKTsKK30KKworLyotLSB2ZWNfbXVsaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tdWxoKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtaGIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX211bGgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtbGhiKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX211bGgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWhoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbXVsaCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxoaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbXVsaCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1oZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19tdWxoKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1saGYoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19tdWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tdWxlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtZWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tdWxlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxlYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbXVsZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtZWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbXVsZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxlaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbXVsZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1lZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tdWxlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1sZWYoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19tdWxvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tdWxvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Ztb2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tdWxvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxvYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbXVsbyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Ztb2goX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbXVsbyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxvaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbXVsbyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1vZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tdWxvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1sb2YoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19zdWJfdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3N1Yl91MTI4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3EoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19zdWJjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3ViYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNjYmliKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3ViYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2NiaWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3ViYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzY2JpZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zdWJjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNjYmlnKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfc3ViY191MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zdWJjX3UxMjgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzY2JpcShfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX3N1YmVfdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3ViZV91MTI4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzYmlxKF9fYSwgX19iLCBfX2MpOworfQorCisvKi0tIHZlY19zdWJlY191MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3N1YmVjX3UxMjgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzYmNiaXEoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX3N1bTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3N1bTIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN1bWdoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3N1bTIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3VtZ2YoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19zdW1fdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3VtX3UxMjgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3VtcWYoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3N1bV91MTI4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN1bXFnKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfc3VtNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3VtNCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN1bWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3VtNCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3VtaChfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX3Rlc3RfbWFzayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfdGVzdF9tYXNrKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX3Rlc3RfbWFzayh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfdGVzdF9tYXNrKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dG0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfdGVzdF9tYXNrKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY190ZXN0X21hc2sodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX3Rlc3RfbWFzayh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY190ZXN0X21hc2sodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX3Rlc3RfbWFzayh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY190ZXN0X21hc2sodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dG0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyotLSB2ZWNfbWFkZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX21hZGQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgZG91YmxlIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZtYWRiKF9fYSwgX19iLCBfX2MpOworfQorCisvKi0tIHZlY19tc3ViIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbXN1Yih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIHZlY3RvciBkb3VibGUgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Zm1zZGIoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX3NxcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcXJ0KHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZnNxZGIoX19hKTsKK30KKworLyotLSB2ZWNfbGQyZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX2xkMmYoY29uc3QgZmxvYXQgKl9fcHRyKSB7CisgIHR5cGVkZWYgZmxvYXQgX192MmYzMiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCkpKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKCooY29uc3QgX192MmYzMiAqKV9fcHRyLCB2ZWN0b3IgZG91YmxlKTsKK30KKworLyotLSB2ZWNfc3QyZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdm9pZAordmVjX3N0MmYodmVjdG9yIGRvdWJsZSBfX2EsIGZsb2F0ICpfX3B0cikgeworICB0eXBlZGVmIGZsb2F0IF9fdjJmMzIgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7CisgICooX192MmYzMiAqKV9fcHRyID0gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCBfX3YyZjMyKTsKK30KKworLyotLSB2ZWNfY3RkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfY3RkKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgaW50IF9fYikKKyAgX19jb25zdGFudF9yYW5nZShfX2IsIDAsIDMxKSB7CisgIHZlY3RvciBkb3VibGUgX19jb252ID0gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3IgZG91YmxlKTsKKyAgX19jb252ICo9ICh2ZWN0b3IgZG91YmxlKSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKSgoMHgzZmZVTEwgLSBfX2IpIDw8IDUyKTsKKyAgcmV0dXJuIF9fY29udjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX2N0ZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgaW50IF9fYikKKyAgX19jb25zdGFudF9yYW5nZShfX2IsIDAsIDMxKSB7CisgIHZlY3RvciBkb3VibGUgX19jb252ID0gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3IgZG91YmxlKTsKKyAgX19jb252ICo9ICh2ZWN0b3IgZG91YmxlKSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKSgoMHgzZmZVTEwgLSBfX2IpIDw8IDUyKTsKKyAgcmV0dXJuIF9fY29udjsKK30KKworLyotLSB2ZWNfY3RzbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2N0c2wodmVjdG9yIGRvdWJsZSBfX2EsIGludCBfX2IpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19iLCAwLCAzMSkgeworICBfX2EgKj0gKHZlY3RvciBkb3VibGUpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCgweDNmZlVMTCArIF9fYikgPDwgNTIpOworICByZXR1cm4gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyk7Cit9CisKKy8qLS0gdmVjX2N0dWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2N0dWwodmVjdG9yIGRvdWJsZSBfX2EsIGludCBfX2IpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19iLCAwLCAzMSkgeworICBfX2EgKj0gKHZlY3RvciBkb3VibGUpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCgweDNmZlVMTCArIF9fYikgPDwgNTIpOworICByZXR1cm4gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKTsKK30KKworLyotLSB2ZWNfcm91bmRwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX3JvdW5kcCh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCA2KTsKK30KKworLyotLSB2ZWNfY2VpbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX2NlaWwodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgLy8gT24gdGhpcyBwbGF0Zm9ybSwgdmVjX2NlaWwgbmV2ZXIgdHJpZ2dlcnMgdGhlIElFRUUtaW5leGFjdCBleGNlcHRpb24uCisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmlkYihfX2EsIDQsIDYpOworfQorCisvKi0tIHZlY19yb3VuZG0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfcm91bmRtKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmlkYihfX2EsIDQsIDcpOworfQorCisvKi0tIHZlY19mbG9vciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfZmxvb3IodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgLy8gT24gdGhpcyBwbGF0Zm9ybSwgdmVjX2Zsb29yIG5ldmVyIHRyaWdnZXJzIHRoZSBJRUVFLWluZXhhY3QgZXhjZXB0aW9uLgorICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCA3KTsKK30KKworLyotLSB2ZWNfcm91bmR6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX3JvdW5keih2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCA1KTsKK30KKworLyotLSB2ZWNfdHJ1bmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX3RydW5jKHZlY3RvciBkb3VibGUgX19hKSB7CisgIC8vIE9uIHRoaXMgcGxhdGZvcm0sIHZlY190cnVuYyBuZXZlciB0cmlnZ2VycyB0aGUgSUVFRS1pbmV4YWN0IGV4Y2VwdGlvbi4KKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmaWRiKF9fYSwgNCwgNSk7Cit9CisKKy8qLS0gdmVjX3JvdW5kYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKK3ZlY19yb3VuZGModmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmaWRiKF9fYSwgNCwgMCk7Cit9CisKKy8qLS0gdmVjX3JvdW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKK3ZlY19yb3VuZCh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCA0KTsKK30KKworLyotLSB2ZWNfZnBfdGVzdF9kYXRhX2NsYXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIHZlY19mcF90ZXN0X2RhdGFfY2xhc3MoWCwgWSwgWikgXAorICAoKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92ZnRjaWRiKChYKSwgKFkpLCAoWikpKQorCisvKi0tIHZlY19jcF91bnRpbF96ZXJvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NwX3VudGlsX3plcm8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92aXN0cmIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jcF91bnRpbF96ZXJvKHZlY3RvciBib29sIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92aXN0cmIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zpc3RyYihfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdmlzdHJoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jcF91bnRpbF96ZXJvKHZlY3RvciBib29sIHNob3J0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3Zpc3RyaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NwX3VudGlsX3plcm8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmlzdHJoKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92aXN0cmYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3IgYm9vbCBpbnQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3Zpc3RyZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmlzdHJmKF9fYSk7Cit9CisKKy8qLS0gdmVjX2NwX3VudGlsX3plcm9fY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfY3BfdW50aWxfemVyb19jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmlzdHJicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmlzdHJicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92aXN0cmJzKF9fYSwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3Zpc3RyaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92aXN0cmhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY3BfdW50aWxfemVyb19jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zpc3RyaHMoX19hLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmlzdHJmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciBib29sIGludCBfX2EsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92aXN0cmZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmlzdHJmcyhfX2EsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXBlcV9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NtcGVxX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wZXFfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcGVxX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfY21wZXFfaWR4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2NtcGVxX2lkeCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wZXFfaWR4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBlcV9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlZihfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2NtcGVxX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfY21wZXFfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wZXFfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBlcV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWJzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlaHMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWZzKF9fYSwgX19iLCBfX2NjKTsKK30KKworLyotLSB2ZWNfY21wZXFfb3JfMF9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19jbXBlcV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBlcV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcGVxX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcGVxX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemYoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19jbXBlcV9vcl8wX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWV6YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpicyhfX2EsIF9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemhzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wZXFfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6ZnMoX19hLCBfX2IsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXBuZV9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NtcG5lX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9pZHgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVuZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wbmVfaWR4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19jbXBuZV9pZHgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVuZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfaWR4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcG5lX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lZihfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2NtcG5lX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfY21wbmVfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVuZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wbmVfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lYnMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfY21wbmVfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVuZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWhzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcG5lX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWZzKF9fYSwgX19iLCBfX2NjKTsKK30KKworLyotLSB2ZWNfY21wbmVfb3JfMF9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlbmV6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfb3JfMF9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemYoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19jbXBuZV9vcl8wX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemJzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpocyhfX2EsIF9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6ZnMoX19hLCBfX2IsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXByZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jbXByZyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzdHJjYihfX2EsIF9fYiwgX19jLCA0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXByZyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3RyY2goX19hLCBfX2IsIF9fYywgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcHJnKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3RyY2YoX19hLCBfX2IsIF9fYywgNCk7Cit9CisKKy8qLS0gdmVjX2NtcHJnX2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcHJnX2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3RyY2JzKF9fYSwgX19iLCBfX2MsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcHJnX2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnN0cmNocyhfX2EsIF9fYiwgX19jLCA0LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wcmdfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnN0cmNmcyhfX2EsIF9fYiwgX19jLCA0LCBfX2NjKTsKK30KKworLyotLSB2ZWNfY21wcmdfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcHJnX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2IoX19hLCBfX2IsIF9fYywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcHJnX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2goX19hLCBfX2IsIF9fYywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXByZ19pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNmKF9fYSwgX19iLCBfX2MsIDApOworfQorCisvKi0tIHZlY19jbXByZ19pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wcmdfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNicyhfX2EsIF9fYiwgX19jLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wcmdfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNocyhfX2EsIF9fYiwgX19jLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcHJnX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjZnMoX19hLCBfX2IsIF9fYywgMCwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2NtcHJnX29yXzBfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXByZ19vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemIoX19hLCBfX2IsIF9fYywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcHJnX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6aChfX2EsIF9fYiwgX19jLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcHJnX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6ZihfX2EsIF9fYiwgX19jLCAwKTsKK30KKworLyotLSB2ZWNfY21wcmdfb3JfMF9pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcHJnX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3picyhfX2EsIF9fYiwgX19jLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wcmdfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemhzKF9fYSwgX19iLCBfX2MsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wcmdfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemZzKF9fYSwgX19iLCBfX2MsIDAsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXBucmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jbXBucmcodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnN0cmNiKF9fYSwgX19iLCBfX2MsIDEyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBucmcodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzdHJjaChfX2EsIF9fYiwgX19jLCAxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcG5yZyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzdHJjZihfX2EsIF9fYiwgX19jLCAxMik7Cit9CisKKy8qLS0gdmVjX2NtcG5yZ19jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcG5yZ19jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzdHJjYnMoX19hLCBfX2IsIF9fYywgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcG5yZ19jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3RyY2hzKF9fYSwgX19iLCBfX2MsIDEyLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wbnJnX2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3RyY2ZzKF9fYSwgX19iLCBfX2MsIDEyLCBfX2NjKTsKK30KKworLyotLSB2ZWNfY21wbnJnX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5yZ19pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjYihfX2EsIF9fYiwgX19jLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wbnJnX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNoKF9fYSwgX19iLCBfX2MsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbnJnX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNmKF9fYSwgX19iLCBfX2MsIDgpOworfQorCisvKi0tIHZlY19jbXBucmdfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wbnJnX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2JzKF9fYSwgX19iLCBfX2MsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBucmdfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjaHMoX19hLCBfX2IsIF9fYywgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBucmdfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjZnMoX19hLCBfX2IsIF9fYywgOCwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2NtcG5yZ19vcl8wX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBucmdfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6YihfX2EsIF9fYiwgX19jLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wbnJnX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemgoX19hLCBfX2IsIF9fYywgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBucmdfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6ZihfX2EsIF9fYiwgX19jLCA4KTsKK30KKworLyotLSB2ZWNfY21wbnJnX29yXzBfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5yZ19vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemJzKF9fYSwgX19iLCBfX2MsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBucmdfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3pocyhfX2EsIF9fYiwgX19jLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcG5yZ19vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemZzKF9fYSwgX19iLCBfX2MsIDgsIF9fY2MpOworfQorCisvKi0tIHZlY19maW5kX2FueV9lcSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19maW5kX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZmYWViKF9fYSwgX19iLCA0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19maW5kX2FueV9lcSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZmYWVoKF9fYSwgX19iLCA0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X2VxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92ZmFlZihfX2EsIF9fYiwgNCk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X2VxX2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA0LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdmZhZWJzKF9fYSwgX19iLCA0LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgNCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdmZhZWhzKF9fYSwgX19iLCA0LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9lcV9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA0LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92ZmFlZnMoX19hLCBfX2IsIDQsIF9fY2MpOworfQorCisvKi0tIHZlY19maW5kX2FueV9lcV9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWIoX19hLCBfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWgoX19hLCBfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlZihfX2EsIF9fYiwgMCk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X2VxX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9lcV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWJzKF9fYSwgX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlaHMoX19hLCBfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWZzKF9fYSwgX19iLCAwLCBfX2NjKTsKK30KKworLyotLSB2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemIoX19hLCBfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aChfX2EsIF9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemYoX19hLCBfX2IsIDApOworfQorCisvKi0tIHZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemJzKF9fYSwgX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpocyhfX2EsIF9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpmcyhfX2EsIF9fYiwgMCwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X25lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2ZpbmRfYW55X25lKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDEyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2ZpbmRfYW55X25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92ZmFlYihfX2EsIF9fYiwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2ZpbmRfYW55X25lKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2ZpbmRfYW55X25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92ZmFlaChfX2EsIF9fYiwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdmZhZWYoX19hLCBfX2IsIDEyKTsKK30KKworLyotLSB2ZWNfZmluZF9hbnlfbmVfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAxMiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZmYWVicyhfX2EsIF9fYiwgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2ZpbmRfYW55X25lX2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAxMiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDEyLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZmYWVocyhfX2EsIF9fYiwgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAxMiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X25lX2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdmZhZWZzKF9fYSwgX19iLCAxMiwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X25lX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYihfX2EsIF9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlaChfX2EsIF9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKF9fYSwgX19iLCA4KTsKK30KKworLyotLSB2ZWNfZmluZF9hbnlfbmVfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9pZHhfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X25lX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYnMoX19hLCBfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X25lX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVocyhfX2EsIF9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlZnMoX19hLCBfX2IsIDgsIF9fY2MpOworfQorCisvKi0tIHZlY19maW5kX2FueV9uZV9vcl8wX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YihfX2EsIF9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpoKF9fYSwgX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZihfX2EsIF9fYiwgOCk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YnMoX19hLCBfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemhzKF9fYSwgX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlemZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemZzKF9fYSwgX19iLCA4LCBfX2NjKTsKK30KKworI3VuZGVmIF9fY29uc3RhbnRfcG93Ml9yYW5nZQorI3VuZGVmIF9fY29uc3RhbnRfcmFuZ2UKKyN1bmRlZiBfX2NvbnN0YW50CisjdW5kZWYgX19BVFRSU19vCisjdW5kZWYgX19BVFRSU19vX2FpCisjdW5kZWYgX19BVFRSU19haQorCisjZWxzZQorCisjZXJyb3IgIlVzZSAtZnp2ZWN0b3IgdG8gZW5hYmxlIHZlY3RvciBleHRlbnNpb25zIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvd21taW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3dtbWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDkzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3dtbWludHJpbi5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qPT09LS0tLSB3bW1pbnRyaW4uaCAtIEFFUyBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfV01NSU5UUklOX0gKKyNkZWZpbmUgX1dNTUlOVFJJTl9ICisKKyNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KKworI2luY2x1ZGUgPF9fd21taW50cmluX2Flcy5oPgorCisjaW5jbHVkZSA8X193bW1pbnRyaW5fcGNsbXVsLmg+CisKKyNlbmRpZiAvKiBfV01NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveDg2aW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3g4NmludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTQwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3g4NmludHJpbi5oCkBAIC0wLDAgKzEsODUgQEAKKy8qPT09LS0tLSB4ODZpbnRyaW4uaCAtIFg4NiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YODZJTlRSSU5fSAorI2RlZmluZSBfX1g4NklOVFJJTl9ICisKKyNpbmNsdWRlIDxpYTMyaW50cmluLmg+CisKKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX18zZE5PV19fKQorI2luY2x1ZGUgPG1tM2Rub3cuaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0JNSV9fKQorI2luY2x1ZGUgPGJtaWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQk1JMl9fKQorI2luY2x1ZGUgPGJtaTJpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0xaQ05UX18pCisjaW5jbHVkZSA8bHpjbnRpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1BPUENOVF9fKQorI2luY2x1ZGUgPHBvcGNudGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fUkRTRUVEX18pCisjaW5jbHVkZSA8cmRzZWVkaW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19QUkZDSFdfXykKKyNpbmNsdWRlIDxwcmZjaHdpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1NTRTRBX18pCisjaW5jbHVkZSA8YW1taW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19GTUE0X18pCisjaW5jbHVkZSA8Zm1hNGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fWE9QX18pCisjaW5jbHVkZSA8eG9waW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19UQk1fXykKKyNpbmNsdWRlIDx0Ym1pbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0YxNkNfXykKKyNpbmNsdWRlIDxmMTZjaW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19NV0FJVFhfXykKKyNpbmNsdWRlIDxtd2FpdHhpbnRyaW4uaD4KKyNlbmRpZgorCisvKiBGSVhNRTogTFdQICovCisKKyNlbmRpZiAvKiBfX1g4NklOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3htbWludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94bW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTEwZThiCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94bW1pbnRyaW4uaApAQCAtMCwwICsxLDI4OTMgQEAKKy8qPT09LS0tLSB4bW1pbnRyaW4uaCAtIFNTRSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YTU1JTlRSSU5fSAorI2RlZmluZSBfX1hNTUlOVFJJTl9ICisKKyNpbmNsdWRlIDxtbWludHJpbi5oPgorCit0eXBlZGVmIGludCBfX3Y0c2kgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwordHlwZWRlZiBmbG9hdCBfX3Y0c2YgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwordHlwZWRlZiBmbG9hdCBfX20xMjggX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworCisvKiBVbnNpZ25lZCB0eXBlcyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX192NHN1IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNikpKTsKKworLyogVGhpcyBoZWFkZXIgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgaW4gYSBob3N0ZWQgZW52aXJvbm1lbnQgYXMgaXQgZGVwZW5kcyBvbgorICogYSBzdGFuZGFyZCBsaWJyYXJ5IHRvIHByb3ZpZGUgYWxsb2NhdGlvbiByb3V0aW5lcy4gKi8KKyNpZiBfX1NURENfSE9TVEVEX18KKyNpbmNsdWRlIDxtbV9tYWxsb2MuaD4KKyNlbmRpZgorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInNzZSIpKSkKKworLy8vIFxicmllZiBBZGRzIHRoZSAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiB0aGUgb3BlcmFuZHMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFERFNTIC8gQUREU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjYWxjdWxhdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHdob3NlIGxvd2VyIDMyIGJpdHMgY29udGFpbiB0aGUgc3VtCisvLy8gICAgb2YgdGhlIGxvd2VyIDMyIGJpdHMgb2YgYm90aCBvcGVyYW5kcy4gVGhlIHVwcGVyIDk2IGJpdHMgYXJlIGNvcGllZCBmcm9tCisvLy8gICAgdGhlIHVwcGVyIDk2IGJpdHMgb2YgdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICBfX2FbMF0gKz0gX19iWzBdOworICByZXR1cm4gX19hOworfQorCisvLy8gXGJyaWVmIEFkZHMgdHdvIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMgb2YKKy8vLyAgICB0aGUgYWRkaXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFERFBTIC8gQUREUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3VtcyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KSgoX192NHNmKV9fYSArIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgdGhlIDMyLWJpdCBmbG9hdCB2YWx1ZSBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlIHNlY29uZAorLy8vICAgIG9wZXJhbmQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU1VCU1MgLyBTVUJTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBtaW51ZW5kLiBUaGUgbG93ZXIgMzIgYml0cworLy8vICAgIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY2FsY3VsYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZC4gVGhlIGxvd2VyIDMyCisvLy8gICAgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gd2hvc2UgbG93ZXIgMzIgYml0cyBjb250YWluIHRoZQorLy8vICAgIGRpZmZlcmVuY2Ugb2YgdGhlIGxvd2VyIDMyIGJpdHMgb2YgYm90aCBvcGVyYW5kcy4gVGhlIHVwcGVyIDk2IGJpdHMgYXJlCisvLy8gICAgY29waWVkIGZyb20gdGhlIHVwcGVyIDk2IGJpdHMgb2YgdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICBfX2FbMF0gLT0gX19iWzBdOworICByZXR1cm4gX19hOworfQorCisvLy8gXGJyaWVmIFN1YnRyYWN0cyBlYWNoIG9mIHRoZSB2YWx1ZXMgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGZpcnN0CisvLy8gICAgb3BlcmFuZCwgYm90aCBvZiB3aGljaCBhcmUgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIGFuZCByZXR1cm5zCisvLy8gICAgdGhlIHJlc3VsdHMgb2YgdGhlIHN1YnRyYWN0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZTVUJQUyAvIFNVQlBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4KKy8vLyAgICBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOCkoKF9fdjRzZilfX2EgLSAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlCisvLy8gICAgb3BlcmFuZHMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1VTFNTIC8gTVVMU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjYWxjdWxhdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHByb2R1Y3Qgb2YgdGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiBib3RoIG9wZXJhbmRzLiBUaGUgdXBwZXIgOTYgYml0cyBhcmUgY29waWVkIGZyb20gdGhlIHVwcGVyIDk2CisvLy8gICAgYml0cyBvZiB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIF9fYVswXSAqPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIGFuZCByZXR1cm5zIHRoZQorLy8vICAgIHJlc3VsdHMgb2YgdGhlIG11bHRpcGxpY2F0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNVUxQUyAvIE1VTFBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHByb2R1Y3RzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpKChfX3Y0c2YpX19hICogKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIERpdmlkZXMgdGhlIHZhbHVlIGluIHRoZSBsb3ctb3JkZXIgMzIgYml0cyBvZiB0aGUgZmlyc3Qgb3BlcmFuZCBieQorLy8vICAgIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWRElWU1MgLyBESVZTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBkaXZpZGVuZC4gVGhlIGxvd2VyIDMyCisvLy8gICAgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGRpdmlzb3IuIFRoZSBsb3dlciAzMiBiaXRzCisvLy8gICAgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjYWxjdWxhdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHF1b3RpZW50cyBvZiB0aGUKKy8vLyAgICBsb3dlciAzMiBiaXRzIG9mIGJvdGggb3BlcmFuZHMuIFRoZSB1cHBlciA5NiBiaXRzIGFyZSBjb3BpZWQgZnJvbSB0aGUKKy8vLyAgICB1cHBlciA5NiBiaXRzIG9mIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9kaXZfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgX19hWzBdIC89IF9fYlswXTsKKyAgcmV0dXJuIF9fYTsKK30KKworLy8vIFxicmllZiBEaXZpZGVzIHR3byAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkRJVlBTIC8gRElWUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgZGl2aWRlbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgZGl2aXNvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHF1b3RpZW50cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZGl2X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KSgoX192NHNmKV9fYSAvIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDYWxjdWxhdGVzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBsb3ctb3JkZXIgYml0cworLy8vICAgIG9mIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlNRUlRTUyAvIFNRUlRTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlCisvLy8gICAgdmFsdWUgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NxcnRfc3MoX19tMTI4IF9fYSkKK3sKKyAgX19tMTI4IF9fYyA9IF9fYnVpbHRpbl9pYTMyX3NxcnRzcygoX192NHNmKV9fYSk7CisgIHJldHVybiAoX19tMTI4KSB7IF9fY1swXSwgX19hWzFdLCBfX2FbMl0sIF9fYVszXSB9OworfQorCisvLy8gXGJyaWVmIENhbGN1bGF0ZXMgdGhlIHNxdWFyZSByb290cyBvZiB0aGUgdmFsdWVzIHN0b3JlZCBpbiBhIDEyOC1iaXQgdmVjdG9yCisvLy8gICAgb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlNRUlRQUyAvIFNRUlRQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHNxdWFyZSByb290cyBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3FydF9wcyhfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfc3FydHBzKChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDYWxjdWxhdGVzIHRoZSBhcHByb3hpbWF0ZSByZWNpcHJvY2FsIG9mIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlCisvLy8gICAgbG93LW9yZGVyIGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUkNQU1MgLyBSQ1BTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgYXBwcm94aW1hdGUKKy8vLyAgICByZWNpcHJvY2FsIG9mIHRoZSB2YWx1ZSBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcmNwX3NzKF9fbTEyOCBfX2EpCit7CisgIF9fbTEyOCBfX2MgPSBfX2J1aWx0aW5faWEzMl9yY3BzcygoX192NHNmKV9fYSk7CisgIHJldHVybiAoX19tMTI4KSB7IF9fY1swXSwgX19hWzFdLCBfX2FbMl0sIF9fYVszXSB9OworfQorCisvLy8gXGJyaWVmIENhbGN1bGF0ZXMgdGhlIGFwcHJveGltYXRlIHJlY2lwcm9jYWxzIG9mIHRoZSB2YWx1ZXMgc3RvcmVkIGluIGEKKy8vLyAgICAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUkNQUFMgLyBSQ1BQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGFwcHJveGltYXRlCisvLy8gICAgcmVjaXByb2NhbHMgb2YgdGhlIHZhbHVlcyBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yY3BfcHMoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JjcHBzKChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDYWxjdWxhdGVzIHRoZSBhcHByb3hpbWF0ZSByZWNpcHJvY2FsIG9mIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgdmFsdWUKKy8vLyAgICBzdG9yZWQgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlJTUVJUU1MgLyBSU1FSVFNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgY2FsY3VsYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBhcHByb3hpbWF0ZQorLy8vICAgIHJlY2lwcm9jYWwgb2YgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YWx1ZSBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlCisvLy8gICAgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yc3FydF9zcyhfX20xMjggX19hKQoreworICBfX20xMjggX19jID0gX19idWlsdGluX2lhMzJfcnNxcnRzcygoX192NHNmKV9fYSk7CisgIHJldHVybiAoX19tMTI4KSB7IF9fY1swXSwgX19hWzFdLCBfX2FbMl0sIF9fYVszXSB9OworfQorCisvLy8gXGJyaWVmIENhbGN1bGF0ZXMgdGhlIGFwcHJveGltYXRlIHJlY2lwcm9jYWxzIG9mIHRoZSBzcXVhcmUgcm9vdHMgb2YgdGhlCisvLy8gICAgdmFsdWVzIHN0b3JlZCBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZSU1FSVFBTIC8gUlNRUlRQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGFwcHJveGltYXRlCisvLy8gICAgcmVjaXByb2NhbHMgb2YgdGhlIHNxdWFyZSByb290cyBvZiB0aGUgdmFsdWVzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JzcXJ0X3BzKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yc3FydHBzKChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzIGFuZCByZXR1cm5zIHRoZSBsZXNzZXIgdmFsdWUgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIHRoZQorLy8vICAgIHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTUlOU1MgLyBNSU5TUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB3aG9zZSBsb3dlciAzMiBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgbWluaW11bSB2YWx1ZSBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuIFRoZSB1cHBlciA5NiBiaXRzIGFyZSBjb3BpZWQgZnJvbQorLy8vICAgIHRoZSB1cHBlciA5NiBiaXRzIG9mIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21pbnNzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSBhbmQgcmV0dXJucyB0aGUKKy8vLyAgICBsZXNzZXIgb2YgZWFjaCBwYWlyIG9mIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTUlOUFMgLyBNSU5QUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbWluaW11bSB2YWx1ZXMKKy8vLyAgICBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9taW5wcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMgYW5kIHJldHVybnMgdGhlIGdyZWF0ZXIgdmFsdWUgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mCisvLy8gICAgYSB2ZWN0b3IgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1BWFNTIC8gTUFYU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gd2hvc2UgbG93ZXIgMzIgYml0cyBjb250YWluIHRoZQorLy8vICAgIG1heGltdW0gdmFsdWUgYmV0d2VlbiBib3RoIG9wZXJhbmRzLiBUaGUgdXBwZXIgOTYgYml0cyBhcmUgY29waWVkIGZyb20KKy8vLyAgICB0aGUgdXBwZXIgOTYgYml0cyBvZiB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9tYXhzcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0gYW5kIHJldHVybnMgdGhlIGdyZWF0ZXIKKy8vLyAgICBvZiBlYWNoIHBhaXIgb2YgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNQVhQUyAvIE1BWFBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBtYXhpbXVtIHZhbHVlcworLy8vICAgIGJldHdlZW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXhfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21heHBzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBTkRQUyAvIEFORFBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZQorLy8vICAgIHZhbHVlcyBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYW5kX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KSgoX192NHN1KV9fYSAmIChfX3Y0c3UpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIHR3byAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0sIHVzaW5nCisvLy8gICAgdGhlIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGZpcnN0IHNvdXJjZQorLy8vICAgIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFORE5QUyAvIEFORE5QUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZC4gVGhlCisvLy8gICAgb25lJ3MgY29tcGxlbWVudCBvZiB0aGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIGJpdHdpc2UgQU5ELgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZQorLy8vICAgIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIGZpcnN0IG9wZXJhbmQgYW5kIHRoZSB2YWx1ZXMgaW4gdGhlIHNlY29uZAorLy8vICAgIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYW5kbm90X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KSh+KF9fdjRzdSlfX2EgJiAoX192NHN1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIE9SIG9mIHR3byAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk9SUFMgLyBPUlBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgT1Igb2YgdGhlCisvLy8gICAgdmFsdWVzIGJldHdlZW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9vcl9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOCkoKF9fdjRzdSlfX2EgfCAoX192NHN1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIGV4Y2x1c2l2ZSBPUiBvZiB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mCisvLy8gICAgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlhPUlBTIC8gWE9SUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgYml0d2lzZSBleGNsdXNpdmUgT1IKKy8vLyAgICBvZiB0aGUgdmFsdWVzIGJldHdlZW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV94b3JfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpKChfX3Y0c3UpX19hIF4gKF9fdjRzdSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMgZm9yIGVxdWFsaXR5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaW4gdGhlCisvLy8gICAgbG93LW9yZGVyIGJpdHMgb2YgYSB2ZWN0b3IgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUEVRU1MgLyBDTVBFUVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBlcXNzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSBmb3IgZXF1YWxpdHkuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUEVRUFMgLyBDTVBFUVBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcGVxcHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IG9wZXJhbmQgaXMgbGVzcyB0aGFuIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlCisvLy8gICAgY29tcGFyaXNvbiBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYSB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUExUU1MgLyBDTVBMVFNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsdHNzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSBsZXNzIHRoYW4gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBMVFBTIC8gQ01QTFRQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsdHBzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBvcGVyYW5kIGlzIGxlc3MgdGhhbiBvcgorLy8vICAgIGVxdWFsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUKKy8vLyAgICByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGEgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUExFU1MgLyBDTVBMRVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsZXNzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBMRVBTIC8gQ01QTEVQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsZXBzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBvcGVyYW5kIGlzIGdyZWF0ZXIgdGhhbgorLy8vICAgIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mCisvLy8gICAgdGhlIGNvbXBhcmlzb24gaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGEgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBMVFNTIC8gQ01QTFRTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMKKy8vLyAgICBpbiB0aGUgbG93LW9yZGVyIGJpdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3Rfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19idWlsdGluX2lhMzJfY21wbHRzcygoX192NHNmKV9fYiwgKF9fdjRzZilfX2EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAxLCAyLCAzKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBmbG9hdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQgYXJlIGdyZWF0ZXIgdGhhbiB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUExUUFMgLyBDTVBMVFBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcGx0cHMoKF9fdjRzZilfX2IsIChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IG9wZXJhbmQgaXMgZ3JlYXRlciB0aGFuCisvLy8gICAgb3IgZXF1YWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zCisvLy8gICAgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYSB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QTEVTUyAvIENNUExFU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzCisvLy8gICAgaW4gdGhlIGxvdy1vcmRlciBiaXRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fYnVpbHRpbl9pYTMyX2NtcGxlc3MoKF9fdjRzZilfX2IsIChfX3Y0c2YpX19hKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgMSwgMiwgMyk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBMRVBTIC8gQ01QTEVQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsZXBzKChfX3Y0c2YpX19iLCAoX192NHNmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyBmb3IgaW5lcXVhbGl0eSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGluIHRoZQorLy8vICAgIGxvdy1vcmRlciBiaXRzIG9mIGEgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBORVFTUyAvIENNUE5FUVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbmVxc3MoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBmbG9hdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIGZvciBpbmVxdWFsaXR5LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBORVFQUyAvIENNUE5FUVBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBuZXFwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBub3QgbGVzcyB0aGFuCisvLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YKKy8vLyAgICB0aGUgY29tcGFyaXNvbiBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYSB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5MVFNTIC8gQ01QTkxUU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzCisvLy8gICAgaW4gdGhlIGxvdy1vcmRlciBiaXRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5sdF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBubHRzcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgMzItYml0IGZsb2F0IHZhbHVlcyBvZiB0aGUKKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0gdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZXMgaW4gdGhlIGZpcnN0CisvLy8gICAgb3BlcmFuZCBhcmUgbm90IGxlc3MgdGhhbiB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5MVFBTIC8gQ01QTkxUUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmx0X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcG5sdHBzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBvcGVyYW5kIGlzIG5vdCBsZXNzIHRoYW4KKy8vLyAgICBvciBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHJldHVybnMKKy8vLyAgICB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBhIHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBOTEVTUyAvIENNUE5MRVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBubGVfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbmxlc3MoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBmbG9hdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQgYXJlIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBOTEVQUyAvIENNUE5MRVBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5sZV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBubGVwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBub3QgZ3JlYXRlcgorLy8vICAgIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZQorLy8vICAgIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYSB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QTkxUU1MgLyBDTVBOTFRTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMKKy8vLyAgICBpbiB0aGUgbG93LW9yZGVyIGJpdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmd0X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fYnVpbHRpbl9pYTMyX2NtcG5sdHNzKChfX3Y0c2YpX19iLCAoX192NHNmKV9fYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEsIDIsIDMpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgMzItYml0IGZsb2F0IHZhbHVlcyBvZiB0aGUKKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0gdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZXMgaW4gdGhlIGZpcnN0CisvLy8gICAgb3BlcmFuZCBhcmUgbm90IGdyZWF0ZXIgdGhhbiB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5MVFBTIC8gQ01QTkxUUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmd0X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcG5sdHBzKChfX3Y0c2YpX19iLCAoX192NHNmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBvcGVyYW5kIGlzIG5vdCBncmVhdGVyCisvLy8gICAgdGhhbiBvciBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kCisvLy8gICAgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBhIHZlY3RvcgorLy8vICAgIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBOTEVTUyAvIENNUE5MRVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZ2Vfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19idWlsdGluX2lhMzJfY21wbmxlc3MoKF9fdjRzZilfX2IsIChfX3Y0c2YpX19hKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgMSwgMiwgMyk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QTkxFUFMgLyBDTVBOTEVQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZ2VfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbmxlcHMoKF9fdjRzZilfX2IsIChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IG9wZXJhbmQgaXMgb3JkZXJlZCB3aXRoCisvLy8gICAgcmVzcGVjdCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlCisvLy8gICAgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBhIHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBPUkRTUyAvIENNUE9SRFNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBvcmRfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wb3Jkc3MoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBmbG9hdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQgYXJlIG9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QT1JEUFMgLyBDTVBPUkRQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBvcmRfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wb3JkcHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IG9wZXJhbmQgaXMgdW5vcmRlcmVkCisvLy8gICAgd2l0aCByZXNwZWN0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBhbmQKKy8vLyAgICByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGEgdmVjdG9yCisvLy8gICAgb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUFVOT1JEU1MgLyBDTVBVTk9SRFNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXB1bm9yZF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXB1bm9yZHNzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSB1bm9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QVU5PUkRQUyAvIENNUFVOT1JEUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wdW5vcmRfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wdW5vcmRwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMgZm9yIGVxdWFsaXR5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWllcV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWVxKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZpcnN0IG9wZXJhbmQgaXMgbGVzcyB0aGFuIHRoZSBzZWNvbmQKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlsdF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWx0KChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZpcnN0IG9wZXJhbmQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorLy8vICAgIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlsZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWxlKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZpcnN0IG9wZXJhbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBzZWNvbmQKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlndF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWd0KChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZpcnN0IG9wZXJhbmQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvCisvLy8gICAgdGhlIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlnZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWdlKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZpcnN0IG9wZXJhbmQgaXMgbm90IGVxdWFsIHRvIHRoZSBzZWNvbmQKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWluZXFfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWluZXEoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhbiB1bm9yZGVyZWQgY29tcGFyaXNvbiBvZiB0d28gMzItYml0IGZsb2F0IHZhbHVlcyB1c2luZworLy8vICAgIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoIG9wZXJhbmRzIHRvIGRldGVybWluZSBlcXVhbGl0eSBhbmQgcmV0dXJucworLy8vICAgIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlVDT01JU1MgLyBVQ09NSVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHJldHVybnMgQW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdWNvbWllcV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWllcSgoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGFuIHVub3JkZXJlZCBjb21wYXJpc29uIG9mIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIHVzaW5nCisvLy8gICAgdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGggb3BlcmFuZHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaXJzdCBvcGVyYW5kIGlzCisvLy8gICAgbGVzcyB0aGFuIHRoZSBzZWNvbmQgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVQ09NSVNTIC8gVUNPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pbHRfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pbHQoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhbiB1bm9yZGVyZWQgY29tcGFyaXNvbiBvZiB0d28gMzItYml0IGZsb2F0IHZhbHVlcyB1c2luZworLy8vICAgIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgZmlyc3Qgb3BlcmFuZAorLy8vICAgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZgorLy8vICAgIHRoZSBjb21wYXJpc29uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVQ09NSVNTIC8gVUNPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pbGVfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pbGUoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhbiB1bm9yZGVyZWQgY29tcGFyaXNvbiBvZiB0d28gMzItYml0IGZsb2F0IHZhbHVlcyB1c2luZworLy8vICAgIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgZmlyc3Qgb3BlcmFuZAorLy8vICAgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUKKy8vLyAgICBjb21wYXJpc29uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVQ09NSVNTIC8gVUNPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pZ3Rfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pZ3QoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhbiB1bm9yZGVyZWQgY29tcGFyaXNvbiBvZiB0d28gMzItYml0IGZsb2F0IHZhbHVlcyB1c2luZworLy8vICAgIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgZmlyc3Qgb3BlcmFuZCBpcworLy8vICAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZgorLy8vICAgIHRoZSBjb21wYXJpc29uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVQ09NSVNTIC8gVUNPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pZ2Vfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pZ2UoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhbiB1bm9yZGVyZWQgY29tcGFyaXNvbiBvZiB0d28gMzItYml0IGZsb2F0IHZhbHVlcyB1c2luZworLy8vICAgIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoIG9wZXJhbmRzIHRvIGRldGVybWluZSBpbmVxdWFsaXR5IGFuZCByZXR1cm5zCisvLy8gICAgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWVUNPTUlTUyAvIFVDT01JU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taW5lcV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWluZXEoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyBhIGZsb2F0IHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgbG93ZXIgMzIgYml0cyBvZiBhIHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdIGludG8gYSAzMi1iaXQgaW50ZWdlci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUU1MyU0kgLyBDVlRTUzJTSSBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbnZlcnNpb24uCisvLy8gXHJldHVybnMgQSAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c3Nfc2kzMihfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0c3Myc2koKF9fdjRzZilfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgZmxvYXQgdmFsdWUgY29udGFpbmVkIGluIHRoZSBsb3dlciAzMiBiaXRzIG9mIGEgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBmbG9hdF0gaW50byBhIDMyLWJpdCBpbnRlZ2VyLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRTUzJTSSAvIENWVFNTMlNJIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgY29udmVyc2lvbi4KKy8vLyBccmV0dXJucyBBIDMyLWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRfc3Myc2koX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9tbV9jdnRzc19zaTMyKF9fYSk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSBmbG9hdCB2YWx1ZSBjb250YWluZWQgaW4gdGhlIGxvd2VyIDMyIGJpdHMgb2YgYSB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XSBpbnRvIGEgNjQtYml0IGludGVnZXIuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFNTMlNJIC8gQ1ZUU1MyU0kgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb252ZXJzaW9uLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNzX3NpNjQoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHNzMnNpNjQoKF9fdjRzZilfX2EpOworfQorCisjZW5kaWYKKworLy8vIFxicmllZiBDb252ZXJ0cyB0d28gbG93LW9yZGVyIGZsb2F0IHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBmbG9hdF0gaW50byBhIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIENWVFBTMlBJIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBzX3BpMzIoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9jdnRwczJwaSgoX192NHNmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgdHdvIGxvdy1vcmRlciBmbG9hdCB2YWx1ZXMgaW4gYSAxMjgtYml0IHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdIGludG8gYSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBDVlRQUzJQSSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRfcHMycGkoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9tbV9jdnRwc19waTMyKF9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSBmbG9hdCB2YWx1ZSBjb250YWluZWQgaW4gdGhlIGxvd2VyIDMyIGJpdHMgb2YgYSB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XSBpbnRvIGEgMzItYml0IGludGVnZXIsIHRydW5jYXRpbmcgdGhlIHJlc3VsdCB3aGVuIGl0IGlzCisvLy8gICAgaW5leGFjdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUVFNTMlNJIC8gQ1ZUVFNTMlNJIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgY29udmVyc2lvbi4KKy8vLyBccmV0dXJucyBBIDMyLWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0c3Nfc2kzMihfX20xMjggX19hKQoreworICByZXR1cm4gX19hWzBdOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgZmxvYXQgdmFsdWUgY29udGFpbmVkIGluIHRoZSBsb3dlciAzMiBiaXRzIG9mIGEgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBmbG9hdF0gaW50byBhIDMyLWJpdCBpbnRlZ2VyLCB0cnVuY2F0aW5nIHRoZSByZXN1bHQgd2hlbiBpdCBpcworLy8vICAgIGluZXhhY3QuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFRTUzJTSSAvIENWVFRTUzJTSSBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbnZlcnNpb24uCisvLy8gXHJldHVybnMgQSAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dF9zczJzaShfX20xMjggX19hKQoreworICByZXR1cm4gX21tX2N2dHRzc19zaTMyKF9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSBmbG9hdCB2YWx1ZSBjb250YWluZWQgaW4gdGhlIGxvd2VyIDMyIGJpdHMgb2YgYSB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XSBpbnRvIGEgNjQtYml0IGludGVnZXIsIHRydW5jYXRpbmcgdGhlIHJlc3VsdCB3aGVuIGl0IGlzCisvLy8gICAgaW5leGFjdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUVFNTMlNJIC8gQ1ZUVFNTMlNJIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgY29udmVyc2lvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0c3Nfc2k2NChfX20xMjggX19hKQoreworICByZXR1cm4gX19hWzBdOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIHR3byBsb3ctb3JkZXIgZmxvYXQgdmFsdWVzIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XSBpbnRvIGEgNjQtYml0IHZlY3RvciBvZiBbMiB4IGkzMl0sIHRydW5jYXRpbmcgdGhlIHJlc3VsdAorLy8vICAgIHdoZW4gaXQgaXMgaW5leGFjdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBDVlRUUFMyUEkgLyBWVFRQUzJQSSBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBzX3BpMzIoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9jdnR0cHMycGkoKF9fdjRzZilfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIHR3byBsb3ctb3JkZXIgZmxvYXQgdmFsdWVzIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeAorLy8vICAgIGZsb2F0XSBpbnRvIGEgNjQtYml0IHZlY3RvciBvZiBbMiB4IGkzMl0sIHRydW5jYXRpbmcgdGhlIHJlc3VsdCB3aGVuIGl0CisvLy8gICAgaXMgaW5leGFjdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBDVlRUUFMyUEkgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dF9wczJwaShfX20xMjggX19hKQoreworICByZXR1cm4gX21tX2N2dHRwc19waTMyKF9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgdmFsdWUgaW50byBhIGZsb2F0aW5nIHBvaW50IHZhbHVlCisvLy8gICAgYW5kIHdyaXRlcyBpdCB0byB0aGUgbG93ZXIgMzIgYml0cyBvZiB0aGUgZGVzdGluYXRpb24uIFRoZSByZW1haW5pbmcKKy8vLyAgICBoaWdoZXIgb3JkZXIgZWxlbWVudHMgb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3RvciBhcmUgY29waWVkIGZyb20gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUU0kyU1MgLyBDVlRTSTJTUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDMyLWJpdCBzaWduZWQgaW50ZWdlciBvcGVyYW5kIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHdob3NlIGxvd2VyIDMyIGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBjb252ZXJ0ZWQgdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kLiBUaGUgdXBwZXIgOTYgYml0cyBhcmUgY29waWVkIGZyb20KKy8vLyAgICB0aGUgdXBwZXIgOTYgYml0cyBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzaTMyX3NzKF9fbTEyOCBfX2EsIGludCBfX2IpCit7CisgIF9fYVswXSA9IF9fYjsKKyAgcmV0dXJuIF9fYTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZSBpbnRvIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUKKy8vLyAgICBhbmQgd3JpdGVzIGl0IHRvIHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbi4gVGhlIHJlbWFpbmluZworLy8vICAgIGhpZ2hlciBvcmRlciBlbGVtZW50cyBvZiB0aGUgZGVzdGluYXRpb24gYXJlIGNvcGllZCBmcm9tIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIGZpcnN0IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFNJMlNTIC8gQ1ZUU0kyU1MgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAzMi1iaXQgc2lnbmVkIGludGVnZXIgb3BlcmFuZCBjb250YWluaW5nIHRoZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB3aG9zZSBsb3dlciAzMiBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgY29udmVydGVkIHZhbHVlIG9mIHRoZSBzZWNvbmQgb3BlcmFuZC4gVGhlIHVwcGVyIDk2IGJpdHMgYXJlIGNvcGllZCBmcm9tCisvLy8gICAgdGhlIHVwcGVyIDk2IGJpdHMgb2YgdGhlIGZpcnN0IG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0X3NpMnNzKF9fbTEyOCBfX2EsIGludCBfX2IpCit7CisgIHJldHVybiBfbW1fY3Z0c2kzMl9zcyhfX2EsIF9fYik7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSA2NC1iaXQgc2lnbmVkIGludGVnZXIgdmFsdWUgaW50byBhIGZsb2F0aW5nIHBvaW50IHZhbHVlCisvLy8gICAgYW5kIHdyaXRlcyBpdCB0byB0aGUgbG93ZXIgMzIgYml0cyBvZiB0aGUgZGVzdGluYXRpb24uIFRoZSByZW1haW5pbmcKKy8vLyAgICBoaWdoZXIgb3JkZXIgZWxlbWVudHMgb2YgdGhlIGRlc3RpbmF0aW9uIGFyZSBjb3BpZWQgZnJvbSB0aGUKKy8vLyAgICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBmaXJzdCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRTSTJTUyAvIENWVFNJMlNTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyIG9wZXJhbmQgY29udGFpbmluZyB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gd2hvc2UgbG93ZXIgMzIgYml0cyBjb250YWluIHRoZQorLy8vICAgIGNvbnZlcnRlZCB2YWx1ZSBvZiB0aGUgc2Vjb25kIG9wZXJhbmQuIFRoZSB1cHBlciA5NiBiaXRzIGFyZSBjb3BpZWQgZnJvbQorLy8vICAgIHRoZSB1cHBlciA5NiBiaXRzIG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNpNjRfc3MoX19tMTI4IF9fYSwgbG9uZyBsb25nIF9fYikKK3sKKyAgX19hWzBdID0gX19iOworICByZXR1cm4gX19hOworfQorCisjZW5kaWYKKworLy8vIFxicmllZiBDb252ZXJ0cyB0d28gZWxlbWVudHMgb2YgYSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXSBpbnRvIHR3bworLy8vICAgIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBhbmQgd3JpdGVzIHRoZW0gdG8gdGhlIGxvd2VyIDY0LWJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uIFRoZSByZW1haW5pbmcgaGlnaGVyIG9yZGVyIGVsZW1lbnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmUKKy8vLyAgICBjb3BpZWQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBDVlRQSTJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdLiBUaGUgZWxlbWVudHMgaW4gdGhpcyB2ZWN0b3IgYXJlIGNvbnZlcnRlZAorLy8vICAgIGFuZCB3cml0dGVuIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxvdy1vcmRlciBlbGVtZW50cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB3aG9zZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgY29udmVydGVkIHZhbHVlIG9mIHRoZSBzZWNvbmQgb3BlcmFuZC4gVGhlIHVwcGVyIDY0IGJpdHMgYXJlIGNvcGllZCBmcm9tCisvLy8gICAgdGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIGZpcnN0IG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cGkzMl9wcyhfX20xMjggX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRwaTJwcygoX192NHNmKV9fYSwgKF9fdjJzaSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIHR3byBlbGVtZW50cyBvZiBhIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdIGludG8gdHdvCisvLy8gICAgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGFuZCB3cml0ZXMgdGhlbSB0byB0aGUgbG93ZXIgNjQtYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4gVGhlIHJlbWFpbmluZyBoaWdoZXIgb3JkZXIgZWxlbWVudHMgb2YgdGhlIGRlc3RpbmF0aW9uIGFyZQorLy8vICAgIGNvcGllZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBmaXJzdCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIENWVFBJMlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbMiB4IGkzMl0uIFRoZSBlbGVtZW50cyBpbiB0aGlzIHZlY3RvciBhcmUgY29udmVydGVkCisvLy8gICAgYW5kIHdyaXR0ZW4gdG8gdGhlIGNvcnJlc3BvbmRpbmcgbG93LW9yZGVyIGVsZW1lbnRzIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHdob3NlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBjb252ZXJ0ZWQgdmFsdWUgZnJvbSB0aGUgc2Vjb25kIG9wZXJhbmQuIFRoZSB1cHBlciA2NCBiaXRzIGFyZSBjb3BpZWQKKy8vLyAgICBmcm9tIHRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dF9waTJwcyhfX20xMjggX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiBfbW1fY3Z0cGkzMl9wcyhfX2EsIF9fYik7Cit9CisKKy8vLyBcYnJpZWYgRXh0cmFjdHMgYSBmbG9hdCB2YWx1ZSBjb250YWluZWQgaW4gdGhlIGxvd2VyIDMyIGJpdHMgb2YgYSB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WU1MgLyBNT1ZTUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgZXh0cmFjdGlvbi4KKy8vLyBccmV0dXJucyBBIDMyLWJpdCBmbG9hdCBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBmbG9hdCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzc19mMzIoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYVswXTsKK30KKworLy8vIFxicmllZiBMb2FkcyB0d28gcGFja2VkIGZsb2F0IHZhbHVlcyBmcm9tIHRoZSBhZGRyZXNzIF9fcCBpbnRvIHRoZQorLy8vICAgICBoaWdoLW9yZGVyIGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvdy1vcmRlciBiaXRzCisvLy8gICAgIGFyZSBjb3BpZWQgZnJvbSB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlIGZpcnN0IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkhQRCAvIE1PVkhQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBCaXRzIFs2MzowXSBhcmUgd3JpdHRlbiB0byBiaXRzIFs2MzowXQorLy8vICAgIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIHR3byBwYWNrZWQgZmxvYXQgdmFsdWVzLiBCaXRzIFs2MzowXSBhcmUgd3JpdHRlbiB0byBiaXRzCisvLy8gICAgWzEyNzo2NF0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbW92ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRoX3BpKF9fbTEyOCBfX2EsIGNvbnN0IF9fbTY0ICpfX3ApCit7CisgIHR5cGVkZWYgZmxvYXQgX19tbV9sb2FkaF9waV92MmYzMiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCkpKTsKKyAgc3RydWN0IF9fbW1fbG9hZGhfcGlfc3RydWN0IHsKKyAgICBfX21tX2xvYWRoX3BpX3YyZjMyIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIF9fbW1fbG9hZGhfcGlfdjJmMzIgX19iID0gKChzdHJ1Y3QgX19tbV9sb2FkaF9waV9zdHJ1Y3QqKV9fcCktPl9fdTsKKyAgX19tMTI4IF9fYmIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2IsIF9fYiwgMCwgMSwgMCwgMSk7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYmIsIDAsIDEsIDQsIDUpOworfQorCisvLy8gXGJyaWVmIExvYWRzIHR3byBwYWNrZWQgZmxvYXQgdmFsdWVzIGZyb20gdGhlIGFkZHJlc3MgX19wIGludG8gdGhlIGxvdy1vcmRlcgorLy8vICAgIGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGhpZ2gtb3JkZXIgYml0cyBhcmUgY29waWVkCisvLy8gICAgZnJvbSB0aGUgaGlnaC1vcmRlciBiaXRzIG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZMUEQgLyBNT1ZMUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gQml0cyBbMTI3OjY0XSBhcmUgd3JpdHRlbiB0byBiaXRzCisvLy8gICAgWzEyNzo2NF0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gdHdvIHBhY2tlZCBmbG9hdCB2YWx1ZXMuIEJpdHMgWzYzOjBdIGFyZSB3cml0dGVuIHRvIGJpdHMKKy8vLyAgICBbNjM6MF0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbW92ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRsX3BpKF9fbTEyOCBfX2EsIGNvbnN0IF9fbTY0ICpfX3ApCit7CisgIHR5cGVkZWYgZmxvYXQgX19tbV9sb2FkbF9waV92MmYzMiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCkpKTsKKyAgc3RydWN0IF9fbW1fbG9hZGxfcGlfc3RydWN0IHsKKyAgICBfX21tX2xvYWRsX3BpX3YyZjMyIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIF9fbW1fbG9hZGxfcGlfdjJmMzIgX19iID0gKChzdHJ1Y3QgX19tbV9sb2FkbF9waV9zdHJ1Y3QqKV9fcCktPl9fdTsKKyAgX19tMTI4IF9fYmIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2IsIF9fYiwgMCwgMSwgMCwgMSk7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYmIsIDQsIDUsIDIsIDMpOworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGUgdmVjdG9yIGFyZSBpbml0aWFsaXplZCB3aXRoIHRoZSBzaW5nbGUtcHJlY2lzaW9uCisvLy8gICAgZmxvYXRpbmctcG9pbnQgdmFsdWUgbG9hZGVkIGZyb20gYSBzcGVjaWZpZWQgbWVtb3J5IGxvY2F0aW9uLiBUaGUgdXBwZXIKKy8vLyAgICA5NiBiaXRzIGFyZSBzZXQgdG8gemVyby4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WU1MgLyBNT1ZTUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSAzMi1iaXQgbWVtb3J5IGxvY2F0aW9uIGNvbnRhaW5pbmcgYSBzaW5nbGUtcHJlY2lzaW9uCisvLy8gICAgZmxvYXRpbmctcG9pbnQgdmFsdWUuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZQorLy8vICAgIGxvd2VyIDMyIGJpdHMgY29udGFpbiB0aGUgdmFsdWUgbG9hZGVkIGZyb20gdGhlIG1lbW9yeSBsb2NhdGlvbi4gVGhlCisvLy8gICAgdXBwZXIgOTYgYml0cyBhcmUgc2V0IHRvIHplcm8uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbG9hZF9zcyhjb25zdCBmbG9hdCAqX19wKQoreworICBzdHJ1Y3QgX19tbV9sb2FkX3NzX3N0cnVjdCB7CisgICAgZmxvYXQgX191OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgZmxvYXQgX191ID0gKChzdHJ1Y3QgX19tbV9sb2FkX3NzX3N0cnVjdCopX19wKS0+X191OworICByZXR1cm4gKF9fbTEyOCl7IF9fdSwgMCwgMCwgMCB9OworfQorCisvLy8gXGJyaWVmIExvYWRzIGEgMzItYml0IGZsb2F0IHZhbHVlIGFuZCBkdXBsaWNhdGVzIGl0IHRvIGFsbCBmb3VyIHZlY3RvcgorLy8vICAgIGVsZW1lbnRzIG9mIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlNTIC8gTU9WU1MgKyBcYyBzaHVmZmxpbmcKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSBmbG9hdCB2YWx1ZSB0byBiZSBsb2FkZWQgYW5kIGR1cGxpY2F0ZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBsb2FkZWQKKy8vLyAgICBhbmQgZHVwbGljYXRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbG9hZDFfcHMoY29uc3QgZmxvYXQgKl9fcCkKK3sKKyAgc3RydWN0IF9fbW1fbG9hZDFfcHNfc3RydWN0IHsKKyAgICBmbG9hdCBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICBmbG9hdCBfX3UgPSAoKHN0cnVjdCBfX21tX2xvYWQxX3BzX3N0cnVjdCopX19wKS0+X191OworICByZXR1cm4gKF9fbTEyOCl7IF9fdSwgX191LCBfX3UsIF9fdSB9OworfQorCisjZGVmaW5lICAgICAgICBfbW1fbG9hZF9wczEocCkgX21tX2xvYWQxX3BzKHApCisKKy8vLyBcYnJpZWYgTG9hZHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBmcm9tIGFuIGFsaWduZWQKKy8vLyAgICBtZW1vcnkgbG9jYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkFQUyAvIE1PVkFQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSAxMjgtYml0IG1lbW9yeSBsb2NhdGlvbi4gVGhlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeQorLy8vICAgIGxvY2F0aW9uIGhhcyB0byBiZSAxMjgtYml0IGFsaWduZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBsb2FkZWQgdmFsdXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbG9hZF9wcyhjb25zdCBmbG9hdCAqX19wKQoreworICByZXR1cm4gKihfX20xMjgqKV9fcDsKK30KKworLy8vIFxicmllZiBMb2FkcyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGZyb20gYW4KKy8vLyAgICB1bmFsaWduZWQgbWVtb3J5IGxvY2F0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZVUFMgLyBNT1ZVUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMTI4LWJpdCBtZW1vcnkgbG9jYXRpb24uIFRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKKy8vLyAgICBsb2NhdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIGFsaWduZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBsb2FkZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWR1X3BzKGNvbnN0IGZsb2F0ICpfX3ApCit7CisgIHN0cnVjdCBfX2xvYWR1X3BzIHsKKyAgICBfX20xMjggX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfcHMqKV9fcCktPl9fdjsKK30KKworLy8vIFxicmllZiBMb2FkcyBmb3VyIHBhY2tlZCBmbG9hdCB2YWx1ZXMsIGluIHJldmVyc2Ugb3JkZXIsIGZyb20gYW4gYWxpZ25lZAorLy8vICAgIG1lbW9yeSBsb2NhdGlvbiB0byAzMi1iaXQgZWxlbWVudHMgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WQVBTIC8gTU9WQVBTICsgXGMgc2h1ZmZsaW5nCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMTI4LWJpdCBtZW1vcnkgbG9jYXRpb24uIFRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKKy8vLyAgICBsb2NhdGlvbiBoYXMgdG8gYmUgMTI4LWJpdCBhbGlnbmVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbW92ZWQgdmFsdWVzLCBsb2FkZWQKKy8vLyAgICBpbiByZXZlcnNlIG9yZGVyLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRyX3BzKGNvbnN0IGZsb2F0ICpfX3ApCit7CisgIF9fbTEyOCBfX2EgPSBfbW1fbG9hZF9wcyhfX3ApOworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19hLCAzLCAyLCAxLCAwKTsKK30KKworLy8vIFxicmllZiBDcmVhdGUgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB3aXRoIHVuZGVmaW5lZCB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBoYXMgbm8gY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB1bmRlZmluZWQgdmFsdWVzLgorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5kZWZpbmVkX3BzKHZvaWQpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3VuZGVmMTI4KCk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoZSB2ZWN0b3IgYXJlIGluaXRpYWxpemVkIHdpdGggdGhlIHNwZWNpZmllZCBzaW5nbGUtcHJlY2lzaW9uCisvLy8gICAgZmxvYXRpbmctcG9pbnQgdmFsdWUuIFRoZSB1cHBlciA5NiBiaXRzIGFyZSBzZXQgdG8gemVyby4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WU1MgLyBNT1ZTUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3cKKy8vLyAgICBBIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBsb3dlciAzMgorLy8vICAgIGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlCisvLy8gICAgbG93ZXIgMzIgYml0cyBjb250YWluIHRoZSB2YWx1ZSBwcm92aWRlZCBpbiB0aGUgc291cmNlIG9wZXJhbmQuIFRoZQorLy8vICAgIHVwcGVyIDk2IGJpdHMgYXJlIHNldCB0byB6ZXJvLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9zcyhmbG9hdCBfX3cpCit7CisgIHJldHVybiAoX19tMTI4KXsgX193LCAwLCAwLCAwIH07Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLCB3aXRoIGVhY2gKKy8vLyAgICBvZiB0aGUgZm91ciBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZlY3RvciBlbGVtZW50cyBzZXQgdG8gdGhlCisvLy8gICAgc3BlY2lmaWVkIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFUk1JTFBTIC8gUEVSTUlMUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX193CisvLy8gICAgQSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBlYWNoIHZlY3RvcgorLy8vICAgIGVsZW1lbnQgb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXQxX3BzKGZsb2F0IF9fdykKK3sKKyAgcmV0dXJuIChfX20xMjgpeyBfX3csIF9fdywgX193LCBfX3cgfTsKK30KKworLyogTWljcm9zb2Z0IHNwZWNpZmljLiAqLworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0sIHdpdGggZWFjaAorLy8vICAgIG9mIHRoZSBmb3VyIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmVjdG9yIGVsZW1lbnRzIHNldCB0byB0aGUKKy8vLyAgICBzcGVjaWZpZWQgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEVSTUlMUFMgLyBQRVJNSUxQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3cKKy8vLyAgICBBIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGVhY2ggdmVjdG9yCisvLy8gICAgZWxlbWVudCBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9wczEoZmxvYXQgX193KQoreworICAgIHJldHVybiBfbW1fc2V0MV9wcyhfX3cpOworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XQorLy8vICAgIGluaXRpYWxpemVkIHdpdGggdGhlIHNwZWNpZmllZCBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX196CisvLy8gICAgQSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFsxMjc6OTZdCisvLy8gICAgb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX195CisvLy8gICAgQSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs5NTo2NF0KKy8vLyAgICBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX3gKKy8vLyAgICBBIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzYzOjMyXQorLy8vICAgIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fdworLy8vICAgIEEgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMzE6MF0KKy8vLyAgICBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9wcyhmbG9hdCBfX3osIGZsb2F0IF9feSwgZmxvYXQgX194LCBmbG9hdCBfX3cpCit7CisgIHJldHVybiAoX19tMTI4KXsgX193LCBfX3gsIF9feSwgX196IH07Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLAorLy8vICAgIGluaXRpYWxpemVkIGluIHJldmVyc2Ugb3JkZXIgd2l0aCB0aGUgc3BlY2lmaWVkIDMyLWJpdCBzaW5nbGUtcHJlY2lzaW9uCisvLy8gICAgZmxvYXQtcG9pbnQgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3oKKy8vLyAgICBBIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzMxOjBdCisvLy8gICAgb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX195CisvLy8gICAgQSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs2MzozMl0KKy8vLyAgICBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX3gKKy8vLyAgICBBIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzk1OjY0XQorLy8vICAgIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fdworLy8vICAgIEEgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMTI3Ojk2XQorLy8vICAgIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0cl9wcyhmbG9hdCBfX3osIGZsb2F0IF9feSwgZmxvYXQgX194LCBmbG9hdCBfX3cpCit7CisgIHJldHVybiAoX19tMTI4KXsgX196LCBfX3ksIF9feCwgX193IH07Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGluaXRpYWxpemVkCisvLy8gICAgdG8gemVyby4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWWE9SUFMgLyBYT1JQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHdpdGgKKy8vLyAgICBhbGwgZWxlbWVudHMgc2V0IHRvIHplcm8uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0emVyb19wcyh2b2lkKQoreworICByZXR1cm4gKF9fbTEyOCl7IDAsIDAsIDAsIDAgfTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgdGhlIHVwcGVyIDY0IGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB0byBhCisvLy8gICAgbWVtb3J5IGxvY2F0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQRVhUUlEgLyBNT1ZRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDY0LWJpdCBtZW1vcnkgbG9jYXRpb24uCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIHN0b3JlZC4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVoX3BpKF9fbTY0ICpfX3AsIF9fbTEyOCBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlaHBzKChfX3Yyc2kgKilfX3AsIChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgdGhlIGxvd2VyIDY0IGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB0byBhCisvLy8gICAgIG1lbW9yeSBsb2NhdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WTFBTIC8gTU9WTFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgZmxvYXQgdmFsdWVzLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byBiZSBzdG9yZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JlbF9waShfX202NCAqX19wLCBfX20xMjggX19hKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWxwcygoX192MnNpICopX19wLCAoX192NHNmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgU3RvcmVzIHRoZSBsb3dlciAzMiBiaXRzIG9mIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gdG8gYQorLy8vICAgICBtZW1vcnkgbG9jYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlNTIC8gTU9WU1MgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMzItYml0IG1lbW9yeSBsb2NhdGlvbi4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSB2YWx1ZSB0byBiZSBzdG9yZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JlX3NzKGZsb2F0ICpfX3AsIF9fbTEyOCBfX2EpCit7CisgIHN0cnVjdCBfX21tX3N0b3JlX3NzX3N0cnVjdCB7CisgICAgZmxvYXQgX191OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgKChzdHJ1Y3QgX19tbV9zdG9yZV9zc19zdHJ1Y3QqKV9fcCktPl9fdSA9IF9fYVswXTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgZmxvYXQgdmFsdWVzIGZyb20gYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB0byBhbgorLy8vICAgIHVuYWxpZ25lZCBtZW1vcnkgbG9jYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlVQUyAvIE1PVlVQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSAxMjgtYml0IG1lbW9yeSBsb2NhdGlvbi4gVGhlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeQorLy8vICAgIGxvY2F0aW9uIGRvZXMgbm90IGhhdmUgdG8gYmUgYWxpZ25lZC4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZXVfcHMoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKK3sKKyAgc3RydWN0IF9fc3RvcmV1X3BzIHsKKyAgICBfX20xMjggX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgKChzdHJ1Y3QgX19zdG9yZXVfcHMqKV9fcCktPl9fdiA9IF9fYTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgdGhlIGxvd2VyIDMyIGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBpbnRvCisvLy8gICAgZm91ciBjb250aWd1b3VzIGVsZW1lbnRzIGluIGFuIGFsaWduZWQgbWVtb3J5IGxvY2F0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gXGMgVk1PVkFQUyAvIE1PVkFQUyArIFxjIHNodWZmbGluZworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDEyOC1iaXQgbWVtb3J5IGxvY2F0aW9uLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHdob3NlIGxvd2VyIDMyIGJpdHMgYXJlIHN0b3JlZCB0byBlYWNoCisvLy8gICAgb2YgdGhlIGZvdXIgY29udGlndW91cyBlbGVtZW50cyBwb2ludGVkIGJ5IF9fcC4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVfcHMoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKK3sKKyAgKihfX20xMjgqKV9fcCA9IF9fYTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgdGhlIGxvd2VyIDMyIGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBpbnRvCisvLy8gICAgZm91ciBjb250aWd1b3VzIGVsZW1lbnRzIGluIGFuIGFsaWduZWQgbWVtb3J5IGxvY2F0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gXGMgVk1PVkFQUyAvIE1PVkFQUyArIFxjIHNodWZmbGluZworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDEyOC1iaXQgbWVtb3J5IGxvY2F0aW9uLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHdob3NlIGxvd2VyIDMyIGJpdHMgYXJlIHN0b3JlZCB0byBlYWNoCisvLy8gICAgb2YgdGhlIGZvdXIgY29udGlndW91cyBlbGVtZW50cyBwb2ludGVkIGJ5IF9fcC4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmUxX3BzKGZsb2F0ICpfX3AsIF9fbTEyOCBfX2EpCit7CisgIF9fYSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYSwgMCwgMCwgMCwgMCk7CisgIF9tbV9zdG9yZV9wcyhfX3AsIF9fYSk7Cit9CisKKy8vLyBcYnJpZWYgU3RvcmVzIGZsb2F0IHZhbHVlcyBmcm9tIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gdG8gYW4KKy8vLyAgICBhbGlnbmVkIG1lbW9yeSBsb2NhdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WQVBTIC8gTU9WQVBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDEyOC1iaXQgbWVtb3J5IGxvY2F0aW9uLiBUaGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CisvLy8gICAgbG9jYXRpb24gaGFzIHRvIGJlIDEyOC1iaXQgYWxpZ25lZC4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZV9wczEoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9tbV9zdG9yZTFfcHMoX19wLCBfX2EpOworfQorCisvLy8gXGJyaWVmIFN0b3JlcyBmbG9hdCB2YWx1ZXMgZnJvbSBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHRvIGFuCisvLy8gICAgYWxpZ25lZCBtZW1vcnkgbG9jYXRpb24gaW4gcmV2ZXJzZSBvcmRlci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WQVBTIC8gTU9WQVBTICsgXGMgc2h1ZmZsaW5nCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMTI4LWJpdCBtZW1vcnkgbG9jYXRpb24uIFRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKKy8vLyAgICBsb2NhdGlvbiBoYXMgdG8gYmUgMTI4LWJpdCBhbGlnbmVkLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byBiZSBzdG9yZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3Jlcl9wcyhmbG9hdCAqX19wLCBfX20xMjggX19hKQoreworICBfX2EgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKV9fYSwgKF9fdjRzZilfX2EsIDMsIDIsIDEsIDApOworICBfbW1fc3RvcmVfcHMoX19wLCBfX2EpOworfQorCisjZGVmaW5lIF9NTV9ISU5UX1QwIDMKKyNkZWZpbmUgX01NX0hJTlRfVDEgMgorI2RlZmluZSBfTU1fSElOVF9UMiAxCisjZGVmaW5lIF9NTV9ISU5UX05UQSAwCisKKyNpZm5kZWYgX01TQ19WRVIKKy8qIEZJWE1FOiBXZSBoYXZlIHRvICNkZWZpbmUgdGhpcyBiZWNhdXNlICJzZWwiIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyLCBhbmQKKyAgIFNlbWEgZG9lc24ndCBkbyBhbnkgZm9ybSBvZiBjb25zdGFudCBwcm9wYWdhdGlvbiB5ZXQuICovCisKKy8vLyBcYnJpZWYgTG9hZHMgb25lIGNhY2hlIGxpbmUgb2YgZGF0YSBmcm9tIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyB0byBhIGxvY2F0aW9uCisvLy8gICAgY2xvc2VyIHRvIHRoZSBwcm9jZXNzb3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIHZvaWQgX21tX3ByZWZldGNoKGNvbnN0IHZvaWQgKiBhLCBjb25zdCBpbnQgc2VsKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBSRUZFVENITlRBIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSBtZW1vcnkgbG9jYXRpb24gY29udGFpbmluZyBhIGNhY2hlIGxpbmUgb2YgZGF0YS4KKy8vLyBccGFyYW0gc2VsCisvLy8gICAgQSBwcmVkZWZpbmVkIGludGVnZXIgY29uc3RhbnQgc3BlY2lmeWluZyB0aGUgdHlwZSBvZiBwcmVmZXRjaCBvcGVyYXRpb246CisvLy8gICAgX01NX0hJTlRfTlRBOiBNb3ZlIGRhdGEgdXNpbmcgdGhlIG5vbi10ZW1wb3JhbCBhY2Nlc3MgKE5UQSkgaGludC4KKy8vLyAgICBUaGUgUFJFRkVUQ0hOVEEgaW5zdHJ1Y3Rpb24gd2lsbCBiZSBnZW5lcmF0ZWQuCisvLy8gICAgX01NX0hJTlRfVDA6IE1vdmUgZGF0YSB1c2luZyB0aGUgVDAgaGludC4gVGhlIFBSRUZFVENIVDAgaW5zdHJ1Y3Rpb24gd2lsbAorLy8vICAgIGJlIGdlbmVyYXRlZC4KKy8vLyAgICBfTU1fSElOVF9UMTogTW92ZSBkYXRhIHVzaW5nIHRoZSBUMSBoaW50LiBUaGUgUFJFRkVUQ0hUMSBpbnN0cnVjdGlvbiB3aWxsCisvLy8gICAgYmUgZ2VuZXJhdGVkLgorLy8vICAgIF9NTV9ISU5UX1QyOiBNb3ZlIGRhdGEgdXNpbmcgdGhlIFQyIGhpbnQuIFRoZSBQUkVGRVRDSFQyIGluc3RydWN0aW9uIHdpbGwKKy8vLyAgICBiZSBnZW5lcmF0ZWQuCisjZGVmaW5lIF9tbV9wcmVmZXRjaChhLCBzZWwpIChfX2J1aWx0aW5fcHJlZmV0Y2goKHZvaWQgKikoYSksIDAsIChzZWwpKSkKKyNlbmRpZgorCisvLy8gXGJyaWVmIFN0b3JlcyBhIDY0LWJpdCBpbnRlZ2VyIGluIHRoZSBzcGVjaWZpZWQgYWxpZ25lZCBtZW1vcnkgbG9jYXRpb24uIFRvCisvLy8gICAgbWluaW1pemUgY2FjaGluZywgdGhlIGRhdGEgaXMgZmxhZ2dlZCBhcyBub24tdGVtcG9yYWwgKHVubGlrZWx5IHRvIGJlCisvLy8gICAgdXNlZCBhZ2FpbiBzb29uKS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBNT1ZOVFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGFuIGFsaWduZWQgbWVtb3J5IGxvY2F0aW9uIHVzZWQgdG8gc3RvcmUgdGhlIHJlZ2lzdGVyIHZhbHVlLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHRvIGJlIHN0b3JlZC4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RyZWFtX3BpKF9fbTY0ICpfX3AsIF9fbTY0IF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfbW92bnRxKF9fcCwgX19hKTsKK30KKworLy8vIFxicmllZiBNb3ZlcyBwYWNrZWQgZmxvYXQgdmFsdWVzIGZyb20gYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB0byBhCisvLy8gICAgMTI4LWJpdCBhbGlnbmVkIG1lbW9yeSBsb2NhdGlvbi4gVG8gbWluaW1pemUgY2FjaGluZywgdGhlIGRhdGEgaXMgZmxhZ2dlZAorLy8vICAgIGFzIG5vbi10ZW1wb3JhbCAodW5saWtlbHkgdG8gYmUgdXNlZCBhZ2FpbiBzb29uKS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WTlRQUyAvIE1PVk5UUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMTI4LWJpdCBhbGlnbmVkIG1lbW9yeSBsb2NhdGlvbiB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUKKy8vLyAgICBpbnRlZ2VyIHZhbHVlcy4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgbW92ZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0cmVhbV9wcyhmbG9hdCAqX19wLCBfX20xMjggX19hKQoreworICBfX2J1aWx0aW5fbm9udGVtcG9yYWxfc3RvcmUoKF9fdjRzZilfX2EsIChfX3Y0c2YqKV9fcCk7Cit9CisKKy8vLyBcYnJpZWYgRm9yY2VzIHN0cm9uZyBtZW1vcnkgb3JkZXJpbmcgKHNlcmlhbGl6YXRpb24pIGJldHdlZW4gc3RvcmUKKy8vLyAgICBpbnN0cnVjdGlvbnMgcHJlY2VkaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gYW5kIHN0b3JlIGluc3RydWN0aW9ucyBmb2xsb3dpbmcKKy8vLyAgICB0aGlzIGluc3RydWN0aW9uLCBlbnN1cmluZyB0aGUgc3lzdGVtIGNvbXBsZXRlcyBhbGwgcHJldmlvdXMgc3RvcmVzCisvLy8gICAgYmVmb3JlIGV4ZWN1dGluZyBzdWJzZXF1ZW50IHN0b3Jlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBTRkVOQ0UgaW5zdHJ1Y3Rpb24uCisvLy8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2ZlbmNlKHZvaWQpCit7CisgIF9fYnVpbHRpbl9pYTMyX3NmZW5jZSgpOworfQorCisvLy8gXGJyaWVmIEV4dHJhY3RzIDE2LWJpdCBlbGVtZW50IGZyb20gYSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XSBhbmQKKy8vLyAgICByZXR1cm5zIGl0LCBhcyBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFWFRSVyAvIFBFWFRSVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxwYXJhbSBfX24KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBiaXRzIGFyZSBleHRyYWN0ZWQ6CisvLy8gICAgMDogQml0cyBbMTU6MF0gYXJlIGNvcGllZCB0byB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgMTogQml0cyBbMzE6MTZdIGFyZSBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIDI6IEJpdHMgWzQ3OjMyXSBhcmUgY29waWVkIHRvIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICAzOiBCaXRzIFs2Mzo0OF0gYXJlIGNvcGllZCB0byB0aGUgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxNi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgMTYgYml0cyBvZiBwYWNrZWQgZGF0YS4KKyNkZWZpbmUgX21tX2V4dHJhY3RfcGkxNihhLCBuKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGludClfX2J1aWx0aW5faWEzMl92ZWNfZXh0X3Y0aGkoKF9fbTY0KWEsIChpbnQpbik7IH0pCisKKy8vLyBcYnJpZWYgQ29waWVzIGRhdGEgZnJvbSB0aGUgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gdG8gdGhlIGRlc3RpbmF0aW9uLAorLy8vICAgIGFuZCBpbnNlcnRzIHRoZSBsb3dlciAxNi1iaXRzIG9mIGFuIGludGVnZXIgb3BlcmFuZCBhdCB0aGUgMTYtYml0IG9mZnNldAorLy8vICAgIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlIG9wZXJhbmQgX19uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQSU5TUlcgLyBQSU5TUlcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccGFyYW0gX19kCisvLy8gICAgQW4gaW50ZWdlci4gVGhlIGxvd2VyIDE2LWJpdCB2YWx1ZSBmcm9tIHRoaXMgb3BlcmFuZCBpcyB3cml0dGVuIHRvIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uIGF0IHRoZSBvZmZzZXQgc3BlY2lmaWVkIGJ5IG9wZXJhbmQgX19uLgorLy8vIFxwYXJhbSBfX24KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW50IHRoYXQgZGV0ZXJtaW5lcyB3aGljaCB0aGUgYml0cyB0byBiZSB1c2VkCisvLy8gICAgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIDA6IEJpdHMgWzE1OjBdIGFyZSBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIDE6IEJpdHMgWzMxOjE2XSBhcmUgY29waWVkIHRvIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICAyOiBCaXRzIFs0NzozMl0gYXJlIGNvcGllZCB0byB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgMzogQml0cyBbNjM6NDhdIGFyZSBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIFRoZSByZW1haW5pbmcgYml0cyBpbiB0aGUgZGVzdGluYXRpb24gYXJlIGNvcGllZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nCisvLy8gICAgYml0cyBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb3BpZWQgcGFja2VkIGRhdGEgZnJvbSB0aGUKKy8vLyAgICBvcGVyYW5kcy4KKyNkZWZpbmUgX21tX2luc2VydF9waTE2KGEsIGQsIG4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNjQpX19idWlsdGluX2lhMzJfdmVjX3NldF92NGhpKChfX202NClhLCAoaW50KWQsIChpbnQpbik7IH0pCisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBwYWNrZWQgMTYtYml0IGludGVnZXIgdmFsdWVzIG9mCisvLy8gICAgdGhlIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMsIGFuZCB3cml0ZXMgdGhlIGdyZWF0ZXIgdmFsdWUgdG8gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBiaXRzIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQTUFYU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXhfcGkxNihfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbWF4c3coKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIHBhY2tlZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyCisvLy8gICAgdmFsdWVzIG9mIHRoZSA2NC1iaXQgaW50ZWdlciB2ZWN0b3JzLCBhbmQgd3JpdGVzIHRoZSBncmVhdGVyIHZhbHVlIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE1BWFVCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X3B1OChfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbWF4dWIoKF9fdjhxaSlfX2EsIChfX3Y4cWkpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIHBhY2tlZCAxNi1iaXQgaW50ZWdlciB2YWx1ZXMgb2YKKy8vLyAgICB0aGUgNjQtYml0IGludGVnZXIgdmVjdG9ycywgYW5kIHdyaXRlcyB0aGUgbGVzc2VyIHZhbHVlIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE1JTlNXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG1pbnN3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBwYWNrZWQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcgorLy8vICAgIHZhbHVlcyBvZiB0aGUgNjQtYml0IGludGVnZXIgdmVjdG9ycywgYW5kIHdyaXRlcyB0aGUgbGVzc2VyIHZhbHVlIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE1JTlVCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX3B1OChfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbWludWIoKF9fdjhxaSlfX2EsIChfX3Y4cWkpX19iKTsKK30KKworLy8vIFxicmllZiBUYWtlcyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZnJvbSBlYWNoIDgtYml0IGVsZW1lbnQgaW4gYSA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciB0byBjcmVhdGUgYSAxNi1iaXQgbWFzayB2YWx1ZS4gWmVyby1leHRlbmRzIHRoZSB2YWx1ZSB0bworLy8vICAgIDMyLWJpdCBpbnRlZ2VyIGFuZCB3cml0ZXMgaXQgdG8gdGhlIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBNT1ZNU0tCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB3aXRoIGJpdHMgdG8gYmUgZXh0cmFjdGVkLgorLy8vIFxyZXR1cm5zIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBmcm9tIGVhY2ggOC1iaXQgZWxlbWVudCBpbiB0aGUgb3BlcmFuZCwKKy8vLyAgICB3cml0dGVuIHRvIGJpdHMgWzE1OjBdLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVtYXNrX3BpOChfX202NCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wbW92bXNrYigoX192OHFpKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyBwYWNrZWQgMTYtYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzIGFuZCB3cml0ZXMgdGhlCisvLy8gICAgaGlnaC1vcmRlciAxNiBiaXRzIG9mIGVhY2ggMzItYml0IHByb2R1Y3QgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQTVVMSFVXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcHJvZHVjdHMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bGhpX3B1MTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG11bGh1dygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIFNodWZmbGVzIHRoZSA0IDE2LWJpdCBpbnRlZ2VycyBmcm9tIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIHRvIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLCBhcyBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSB2YWx1ZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTSFVGVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tNjQgX21tX3NodWZmbGVfcGkxNihfX202NCBhLCBjb25zdCBpbnQgbik7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIHNodWZmbGVkLgorLy8vIFxwYXJhbSBuCisvLy8gICAgQW4gaW1tZWRpYXRlIHZhbHVlIGNvbnRhaW5pbmcgYW4gOC1iaXQgdmFsdWUgc3BlY2lmeWluZyB3aGljaCBlbGVtZW50cyB0bworLy8vICAgIGNvcHkgZnJvbSBhLiBUaGUgZGVzdGluYXRpb25zIHdpdGhpbiB0aGUgNjQtYml0IGRlc3RpbmF0aW9uIGFyZSBhc3NpZ25lZAorLy8vICAgIHZhbHVlcyBhcyBmb2xsb3dzOgorLy8vICAgIEJpdHMgWzE6MF0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFsxNTowXSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbMzoyXSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzMxOjE2XSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNTo0XSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzQ3OjMyXSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNzo2XSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzYzOjQ4XSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0IHZhbHVlIGFzc2lnbm1lbnRzOgorLy8vICAgIDAwOiBhc3NpZ25lZCBmcm9tIGJpdHMgWzE1OjBdIG9mIGEuCisvLy8gICAgMDE6IGFzc2lnbmVkIGZyb20gYml0cyBbMzE6MTZdIG9mIGEuCisvLy8gICAgMTA6IGFzc2lnbmVkIGZyb20gYml0cyBbNDc6MzJdIG9mIGEuCisvLy8gICAgMTE6IGFzc2lnbmVkIGZyb20gYml0cyBbNjM6NDhdIG9mIGEuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc2h1ZmZsZWQgdmFsdWVzLgorI2RlZmluZSBfbW1fc2h1ZmZsZV9waTE2KGEsIG4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNjQpX19idWlsdGluX2lhMzJfcHNodWZ3KChfX3Y0aGkpKF9fbTY0KShhKSwgKG4pKTsgfSkKKworLy8vIFxicmllZiBDb25kaXRpb25hbGx5IGNvcGllcyB0aGUgdmFsdWVzIGZyb20gZWFjaCA4LWJpdCBlbGVtZW50IGluIHRoZSBmaXJzdAorLy8vICAgIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIHRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5IGxvY2F0aW9uLCBhcworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiB0aGUKKy8vLyAgICBzZWNvbmQgNjQtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQuIFRvIG1pbmltaXplIGNhY2hpbmcsIHRoZSBkYXRhIGlzCisvLy8gICAgZmxhZ2dlZCBhcyBub24tdGVtcG9yYWwgKHVubGlrZWx5IHRvIGJlIHVzZWQgYWdhaW4gc29vbikuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgTUFTS01PVlEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19kCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHdpdGggZWxlbWVudHMgdG8gYmUgY29waWVkLgorLy8vIFxwYXJhbSBfX24KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kLiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZnJvbSBlYWNoIDgtYml0CisvLy8gICAgZWxlbWVudCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiBvcGVyYW5kIF9fZCBpcworLy8vICAgIGNvcGllZC4gSWYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGEgZ2l2ZW4gZWxlbWVudCBpcyAxLCB0aGUKKy8vLyAgICBjb3JyZXNwb25kaW5nIGVsZW1lbnQgaW4gb3BlcmFuZCBfX2QgaXMgY29waWVkLgorLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSA2NC1iaXQgbWVtb3J5IGxvY2F0aW9uIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBjb25kaXRpb25hbGx5CisvLy8gICAgY29waWVkIGludGVnZXIgdmFsdWVzLiBUaGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IGxvY2F0aW9uIGRvZXMgbm90IGhhdmUKKy8vLyAgICB0byBiZSBhbGlnbmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrbW92ZV9zaTY0KF9fbTY0IF9fZCwgX19tNjQgX19uLCBjaGFyICpfX3ApCit7CisgIF9fYnVpbHRpbl9pYTMyX21hc2ttb3ZxKChfX3Y4cWkpX19kLCAoX192OHFpKV9fbiwgX19wKTsKK30KKworLy8vIFxicmllZiBDb21wdXRlcyB0aGUgcm91bmRlZCBhdmVyYWdlcyBvZiB0aGUgcGFja2VkIHVuc2lnbmVkIDgtYml0IGludGVnZXIKKy8vLyAgICB2YWx1ZXMgYW5kIHdyaXRlcyB0aGUgYXZlcmFnZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQVZHQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGF2ZXJhZ2VzIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hdmdfcHU4KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhdmdiKChfX3Y4cWkpX19hLCAoX192OHFpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdGhlIHJvdW5kZWQgYXZlcmFnZXMgb2YgdGhlIHBhY2tlZCB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlcgorLy8vICAgIHZhbHVlcyBhbmQgd3JpdGVzIHRoZSBhdmVyYWdlcyB0byB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGluIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBBVkdXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgYXZlcmFnZXMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2F2Z19wdTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3Bhdmd3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHRoZSBjb3JyZXNwb25kaW5nIDgtYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzIG9mIHRoZSB0d28KKy8vLyAgICA2NC1iaXQgdmVjdG9yIG9wZXJhbmRzIGFuZCBjb21wdXRlcyB0aGUgYWJzb2x1dGUgdmFsdWUgZm9yIGVhY2ggb2YgdGhlCisvLy8gICAgZGlmZmVyZW5jZS4gVGhlbiBzdW0gb2YgdGhlIDggYWJzb2x1dGUgZGlmZmVyZW5jZXMgaXMgd3JpdHRlbiB0byB0aGUKKy8vLyAgICBiaXRzIFsxNTowXSBvZiB0aGUgZGVzdGluYXRpb247IHRoZSByZW1haW5pbmcgYml0cyBbNjM6MTZdIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTQURCVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIHdob3NlIGxvd2VyIDE2IGJpdHMgY29udGFpbiB0aGUgc3VtcyBvZiB0aGUKKy8vLyAgICBzZXRzIG9mIGFic29sdXRlIGRpZmZlcmVuY2VzIGJldHdlZW4gYm90aCBvcGVyYW5kcy4gVGhlIHVwcGVyIGJpdHMgYXJlCisvLy8gICAgY2xlYXJlZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NhZF9wdTgoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNhZGJ3KChfX3Y4cWkpX19hLCAoX192OHFpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIE1YQ1NSIHJlZ2lzdGVyIGFzIGEgMzItYml0IHVuc2lnbmVkCisvLy8gICAgaW50ZWdlciB2YWx1ZS4gVGhlcmUgYXJlIHNldmVyYWwgZ3JvdXBzIG9mIG1hY3JvcyBhc3NvY2lhdGVkIHdpdGggdGhpcworLy8vICAgIGludHJpbnNpYywgaW5jbHVkaW5nOgorLy8vICAgICogRm9yIGNoZWNraW5nIGV4Y2VwdGlvbiBzdGF0ZXM6IF9NTV9FWENFUFRfSU5WQUxJRCwgX01NX0VYQ0VQVF9ESVZfWkVSTywKKy8vLyAgICAgIF9NTV9FWENFUFRfREVOT1JNLCBfTU1fRVhDRVBUX09WRVJGTE9XLCBfTU1fRVhDRVBUX1VOREVSRkxPVywKKy8vLyAgICAgIF9NTV9FWENFUFRfSU5FWEFDVC4gVGhlcmUgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyCisvLy8gICAgICBfTU1fR0VUX0VYQ0VQVElPTl9TVEFURSgpLgorLy8vICAgICogRm9yIGNoZWNraW5nIGV4Y2VwdGlvbiBtYXNrczogX01NX01BU0tfVU5ERVJGTE9XLCBfTU1fTUFTS19PVkVSRkxPVywKKy8vLyAgICAgIF9NTV9NQVNLX0lOVkFMSUQsIF9NTV9NQVNLX0RFTk9STSwgX01NX01BU0tfRElWX1pFUk8sIF9NTV9NQVNLX0lORVhBQ1QuCisvLy8gICAgICBUaGVyZSBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgX01NX0dFVF9FWENFUFRJT05fTUFTSygpLgorLy8vICAgICogRm9yIGNoZWNraW5nIHJvdW5kaW5nIG1vZGVzOiBfTU1fUk9VTkRfTkVBUkVTVCwgX01NX1JPVU5EX0RPV04sCisvLy8gICAgICBfTU1fUk9VTkRfVVAsIF9NTV9ST1VORF9UT1dBUkRfWkVSTy4gVGhlcmUgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyCisvLy8gICAgICBfTU1fR0VUX1JPVU5ESU5HX01PREUoeCkgd2hlcmUgeCBpcyBvbmUgb2YgdGhlc2UgbWFjcm9zLgorLy8vICAgICogRm9yIGNoZWNraW5nIGZsdXNoLXRvLXplcm8gbW9kZTogX01NX0ZMVVNIX1pFUk9fT04sIF9NTV9GTFVTSF9aRVJPX09GRi4KKy8vLyAgICAgIFRoZXJlIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBfTU1fR0VUX0ZMVVNIX1pFUk9fTU9ERSgpLgorLy8vICAgICogRm9yIGNoZWNraW5nIGRlbm9ybWFscy1hcmUtemVybyBtb2RlOiBfTU1fREVOT1JNQUxTX1pFUk9fT04sCisvLy8gICAgICBfTU1fREVOT1JNQUxTX1pFUk9fT0ZGLiBUaGVyZSBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIKKy8vLyAgICAgIF9NTV9HRVRfREVOT1JNQUxTX1pFUk9fTU9ERSgpLgorLy8vCisvLy8gICAgRm9yIGV4YW1wbGUsIHRoZSBleHByZXNzaW9uIGJlbG93IGNoZWNrcyBpZiBhbiBvdmVyZmxvdyBleGNlcHRpb24gaGFzCisvLy8gICAgb2NjdXJyZWQ6CisvLy8gICAgICAoIF9tbV9nZXRjc3IoKSAmIF9NTV9FWENFUFRfT1ZFUkZMT1cgKQorLy8vCisvLy8gICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGdldHMgdGhlIGN1cnJlbnQgcm91bmRpbmcgbW9kZToKKy8vLyAgICAgIF9NTV9HRVRfUk9VTkRJTkdfTU9ERSgpCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlNUTVhDU1IgLyBTVE1YQ1NSIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHJldHVybnMgQSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgTVhDU1IKKy8vLyAgICByZWdpc3Rlci4KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9nZXRjc3Iodm9pZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3N0bXhjc3IoKTsKK30KKworLy8vIFxicmllZiBTZXRzIHRoZSBNWENTUiByZWdpc3RlciB3aXRoIHRoZSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZS4gVGhlcmUKKy8vLyAgICBhcmUgc2V2ZXJhbCBncm91cHMgb2YgbWFjcm9zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludHJpbnNpYywgaW5jbHVkaW5nOgorLy8vICAgICogRm9yIHNldHRpbmcgZXhjZXB0aW9uIHN0YXRlczogX01NX0VYQ0VQVF9JTlZBTElELCBfTU1fRVhDRVBUX0RJVl9aRVJPLAorLy8vICAgICAgX01NX0VYQ0VQVF9ERU5PUk0sIF9NTV9FWENFUFRfT1ZFUkZMT1csIF9NTV9FWENFUFRfVU5ERVJGTE9XLAorLy8vICAgICAgX01NX0VYQ0VQVF9JTkVYQUNULiBUaGVyZSBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIKKy8vLyAgICAgIF9NTV9TRVRfRVhDRVBUSU9OX1NUQVRFKHgpIHdoZXJlIHggaXMgb25lIG9mIHRoZXNlIG1hY3Jvcy4KKy8vLyAgICAqIEZvciBzZXR0aW5nIGV4Y2VwdGlvbiBtYXNrczogX01NX01BU0tfVU5ERVJGTE9XLCBfTU1fTUFTS19PVkVSRkxPVywKKy8vLyAgICAgIF9NTV9NQVNLX0lOVkFMSUQsIF9NTV9NQVNLX0RFTk9STSwgX01NX01BU0tfRElWX1pFUk8sIF9NTV9NQVNLX0lORVhBQ1QuCisvLy8gICAgICBUaGVyZSBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgX01NX1NFVF9FWENFUFRJT05fTUFTSyh4KSB3aGVyZSB4IGlzIG9uZQorLy8vICAgICAgb2YgdGhlc2UgbWFjcm9zLgorLy8vICAgICogRm9yIHNldHRpbmcgcm91bmRpbmcgbW9kZXM6IF9NTV9ST1VORF9ORUFSRVNULCBfTU1fUk9VTkRfRE9XTiwKKy8vLyAgICAgIF9NTV9ST1VORF9VUCwgX01NX1JPVU5EX1RPV0FSRF9aRVJPLiBUaGVyZSBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIKKy8vLyAgICAgIF9NTV9TRVRfUk9VTkRJTkdfTU9ERSh4KSB3aGVyZSB4IGlzIG9uZSBvZiB0aGVzZSBtYWNyb3MuCisvLy8gICAgKiBGb3Igc2V0dGluZyBmbHVzaC10by16ZXJvIG1vZGU6IF9NTV9GTFVTSF9aRVJPX09OLCBfTU1fRkxVU0hfWkVST19PRkYuCisvLy8gICAgICBUaGVyZSBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgX01NX1NFVF9GTFVTSF9aRVJPX01PREUoeCkgd2hlcmUgeCBpcworLy8vICAgICAgb25lIG9mIHRoZXNlIG1hY3Jvcy4KKy8vLyAgICAqIEZvciBzZXR0aW5nIGRlbm9ybWFscy1hcmUtemVybyBtb2RlOiBfTU1fREVOT1JNQUxTX1pFUk9fT04sCisvLy8gICAgICBfTU1fREVOT1JNQUxTX1pFUk9fT0ZGLiBUaGVyZSBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIKKy8vLyAgICAgIF9NTV9TRVRfREVOT1JNQUxTX1pFUk9fTU9ERSh4KSB3aGVyZSB4IGlzIG9uZSBvZiB0aGVzZSBtYWNyb3MuCisvLy8KKy8vLyAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBleHByZXNzaW9uIGNhdXNlcyBzdWJzZXF1ZW50IGZsb2F0aW5nLXBvaW50CisvLy8gICAgb3BlcmF0aW9ucyB0byByb3VuZCB1cDoKKy8vLyAgICAgIF9tbV9zZXRjc3IoX21tX2dldGNzcigpIHwgX01NX1JPVU5EX1VQKQorLy8vCisvLy8gICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNldHMgdGhlIERBWiBhbmQgRlRaIGZsYWdzOgorLy8vICAgICAgdm9pZCBzZXRGbGFncygpIHsKKy8vLyAgICAgICAgX01NX1NFVF9GTFVTSF9aRVJPX01PREUoX01NX0ZMVVNIX1pFUk9fT04pCisvLy8gICAgICAgIF9NTV9TRVRfREVOT1JNQUxTX1pFUk9fTU9ERShfTU1fREVOT1JNQUxTX1pFUk9fT04pCisvLy8gICAgICB9CisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkxETVhDU1IgLyBMRE1YQ1NSIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9faQorLy8vICAgIEEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgTVhDU1IgcmVnaXN0ZXIuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldGNzcih1bnNpZ25lZCBpbnQgX19pKQoreworICBfX2J1aWx0aW5faWEzMl9sZG14Y3NyKF9faSk7Cit9CisKKy8vLyBcYnJpZWYgU2VsZWN0cyA0IGZsb2F0IHZhbHVlcyBmcm9tIHRoZSAxMjgtYml0IG9wZXJhbmRzIG9mIFs0IHggZmxvYXRdLCBhcworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlIHZhbHVlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOCBfbW1fc2h1ZmZsZV9wcyhfX20xMjggYSwgX19tMTI4IGIsIGNvbnN0IGludCBtYXNrKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZTSFVGUFMgLyBTSFVGUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIGIKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBtYXNrCisvLy8gICAgQW4gaW1tZWRpYXRlIHZhbHVlIGNvbnRhaW5pbmcgYW4gOC1iaXQgdmFsdWUgc3BlY2lmeWluZyB3aGljaCBlbGVtZW50cyB0bworLy8vICAgIGNvcHkgZnJvbSBhIGFuZCBiLgorLy8vICAgIEJpdHMgWzM6MF0gc3BlY2lmeSB0aGUgdmFsdWVzIGNvcGllZCBmcm9tIG9wZXJhbmQgYS4KKy8vLyAgICBCaXRzIFs3OjRdIHNwZWNpZnkgdGhlIHZhbHVlcyBjb3BpZWQgZnJvbSBvcGVyYW5kIGIuIFRoZSBkZXN0aW5hdGlvbnMKKy8vLyAgICB3aXRoaW4gdGhlIDEyOC1iaXQgZGVzdGluYXRpb24gYXJlIGFzc2lnbmVkIHZhbHVlcyBhcyBmb2xsb3dzOgorLy8vICAgIEJpdHMgWzE6MF0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFszMTowXSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbMzoyXSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzYzOjMyXSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNTo0XSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzk1OjY0XSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNzo2XSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzEyNzo5Nl0gaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdCB2YWx1ZSBhc3NpZ25tZW50czoKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gY29waWVkIGZyb20gdGhlIHNwZWNpZmllZCBvcGVyYW5kLgorLy8vICAgIDAxOiBCaXRzIFs2MzozMl0gY29waWVkIGZyb20gdGhlIHNwZWNpZmllZCBvcGVyYW5kLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gY29waWVkIGZyb20gdGhlIHNwZWNpZmllZCBvcGVyYW5kLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIGNvcGllZCBmcm9tIHRoZSBzcGVjaWZpZWQgb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHNodWZmbGVkIHZhbHVlcy4KKyNkZWZpbmUgX21tX3NodWZmbGVfcHMoYSwgYiwgbWFzaykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZikoX19tMTI4KShhKSwgKF9fdjRzZikoX19tMTI4KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChtYXNrKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgobWFzaykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKG1hc2spID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChtYXNrKSA+PiA2KSAmIDB4MykpOyB9KQorCisvLy8gXGJyaWVmIFVucGFja3MgdGhlIGhpZ2gtb3JkZXIgKGluZGV4IDIsMykgdmFsdWVzIGZyb20gdHdvIDEyOC1iaXQgdmVjdG9ycyBvZgorLy8vICAgIFs0IHggZmxvYXRdIGFuZCBpbnRlcmxlYXZlcyB0aGVtIGludG8gYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4CisvLy8gICAgZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVTlBDS0hQUyAvIFVOUENLSFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gICAgQml0cyBbOTU6NjRdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzMxOjBdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFsxMjc6OTZdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gICAgQml0cyBbOTU6NjRdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbMTI3Ojk2XSBhcmUgd3JpdHRlbiB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGludGVybGVhdmVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2toaV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iLCAyLCA2LCAzLCA3KTsKK30KKworLy8vIFxicmllZiBVbnBhY2tzIHRoZSBsb3ctb3JkZXIgKGluZGV4IDAsMSkgdmFsdWVzIGZyb20gdHdvIDEyOC1iaXQgdmVjdG9ycyBvZgorLy8vICAgIFs0IHggZmxvYXRdIGFuZCBpbnRlcmxlYXZlcyB0aGVtIGludG8gYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4CisvLy8gICAgZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVTlBDS0xQUyAvIFVOUENLTFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gICAgQml0cyBbMzE6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMzE6MF0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdHMgWzYzOjMyXSBhcmUgd3JpdHRlbiB0byBiaXRzIFs5NTo2NF0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vICAgIEJpdHMgWzMxOjBdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNjM6MzJdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2xvX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKV9fYSwgKF9fdjRzZilfX2IsIDAsIDQsIDEsIDUpOworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBhcmUgc2V0IHRvIHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiBUaGUgdXBwZXIKKy8vLyAgICA5NiBiaXRzIGFyZSBzZXQgdG8gdGhlIHVwcGVyIDk2IGJpdHMgb2YgdGhlIGZpcnN0IHBhcmFtZXRlci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WU1MgLyBNT1ZTUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgdXBwZXIgOTYgYml0cyBhcmUKKy8vLyAgICB3cml0dGVuIHRvIHRoZSB1cHBlciA5NiBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIGFyZQorLy8vICAgIHdyaXR0ZW4gdG8gdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYiwgNCwgMSwgMiwgMyk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIKKy8vLyAgICA2NCBiaXRzIGFyZSBzZXQgdG8gdGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSB1cHBlcgorLy8vICAgIDY0IGJpdHMgYXJlIHNldCB0byB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVTlBDS0hQRCAvIFVOUENLSFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSB1cHBlciA2NCBiaXRzIGFyZQorLy8vICAgIHdyaXR0ZW4gdG8gdGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIHVwcGVyIDY0IGJpdHMgYXJlCisvLy8gICAgd3JpdHRlbiB0byB0aGUgbG93ZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZWhsX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKV9fYSwgKF9fdjRzZilfX2IsIDYsIDcsIDIsIDMpOworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyCisvLy8gICAgNjQgYml0cyBhcmUgc2V0IHRvIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIuIFRoZSB1cHBlcgorLy8vICAgIDY0IGJpdHMgYXJlIHNldCB0byB0aGUgbG93ZXIgNjQgYml0cyBvZiB0aGUgc2Vjb25kIHBhcmFtZXRlci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWVU5QQ0tMUEQgLyBVTlBDS0xQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgNjQgYml0cyBhcmUKKy8vLyAgICB3cml0dGVuIHRvIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciA2NCBiaXRzIGFyZQorLy8vICAgIHdyaXR0ZW4gdG8gdGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVsaF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iLCAwLCAxLCA0LCA1KTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyBhIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdIGludG8gYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4CisvLy8gICAgZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIENWVFBJMlBTICsgXGMgQ09NUE9TSVRFIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0uIFRoZSBlbGVtZW50cyBvZiB0aGUgZGVzdGluYXRpb24gYXJlIGNvcGllZAorLy8vICAgIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhpcyBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29waWVkIGFuZCBjb252ZXJ0ZWQKKy8vLyAgICB2YWx1ZXMgZnJvbSB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwaTE2X3BzKF9fbTY0IF9fYSkKK3sKKyAgX19tNjQgX19iLCBfX2M7CisgIF9fbTEyOCBfX3I7CisKKyAgX19iID0gX21tX3NldHplcm9fc2k2NCgpOworICBfX2IgPSBfbW1fY21wZ3RfcGkxNihfX2IsIF9fYSk7CisgIF9fYyA9IF9tbV91bnBhY2toaV9waTE2KF9fYSwgX19iKTsKKyAgX19yID0gX21tX3NldHplcm9fcHMoKTsKKyAgX19yID0gX21tX2N2dHBpMzJfcHMoX19yLCBfX2MpOworICBfX3IgPSBfbW1fbW92ZWxoX3BzKF9fciwgX19yKTsKKyAgX19jID0gX21tX3VucGFja2xvX3BpMTYoX19hLCBfX2IpOworICBfX3IgPSBfbW1fY3Z0cGkzMl9wcyhfX3IsIF9fYyk7CisKKyAgcmV0dXJuIF9fcjsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyBhIDY0LWJpdCB2ZWN0b3Igb2YgMTYtYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzIGludG8gYQorLy8vICAgIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIENWVFBJMlBTICsgXGMgQ09NUE9TSVRFIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuIFRoZSBlbGVtZW50cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbiBhcmUgY29waWVkIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhpcyBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29waWVkIGFuZCBjb252ZXJ0ZWQKKy8vLyAgICB2YWx1ZXMgZnJvbSB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwdTE2X3BzKF9fbTY0IF9fYSkKK3sKKyAgX19tNjQgX19iLCBfX2M7CisgIF9fbTEyOCBfX3I7CisKKyAgX19iID0gX21tX3NldHplcm9fc2k2NCgpOworICBfX2MgPSBfbW1fdW5wYWNraGlfcGkxNihfX2EsIF9fYik7CisgIF9fciA9IF9tbV9zZXR6ZXJvX3BzKCk7CisgIF9fciA9IF9tbV9jdnRwaTMyX3BzKF9fciwgX19jKTsKKyAgX19yID0gX21tX21vdmVsaF9wcyhfX3IsIF9fcik7CisgIF9fYyA9IF9tbV91bnBhY2tsb19waTE2KF9fYSwgX19iKTsKKyAgX19yID0gX21tX2N2dHBpMzJfcHMoX19yLCBfX2MpOworCisgIHJldHVybiBfX3I7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgdGhlIGxvd2VyIGZvdXIgOC1iaXQgdmFsdWVzIGZyb20gYSA2NC1iaXQgdmVjdG9yIG9mIFs4IHggaThdCisvLy8gICAgaW50byBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIENWVFBJMlBTICsgXGMgQ09NUE9TSVRFIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbOCB4IGk4XS4gVGhlIGVsZW1lbnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmUgY29waWVkCisvLy8gICAgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBsb3dlciA0IGVsZW1lbnRzIGluIHRoaXMgb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvcGllZCBhbmQgY29udmVydGVkCisvLy8gICAgdmFsdWVzIGZyb20gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cGk4X3BzKF9fbTY0IF9fYSkKK3sKKyAgX19tNjQgX19iOworCisgIF9fYiA9IF9tbV9zZXR6ZXJvX3NpNjQoKTsKKyAgX19iID0gX21tX2NtcGd0X3BpOChfX2IsIF9fYSk7CisgIF9fYiA9IF9tbV91bnBhY2tsb19waTgoX19hLCBfX2IpOworCisgIHJldHVybiBfbW1fY3Z0cGkxNl9wcyhfX2IpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIHRoZSBsb3dlciBmb3VyIHVuc2lnbmVkIDgtYml0IGludGVnZXIgdmFsdWVzIGZyb20gYSA2NC1iaXQKKy8vLyAgICB2ZWN0b3Igb2YgWzggeCB1OF0gaW50byBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIENWVFBJMlBTICsgXGMgQ09NUE9TSVRFIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyIHZhbHVlcy4gVGhlIGVsZW1lbnRzIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uIGFyZSBjb3BpZWQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBsb3dlciA0IGVsZW1lbnRzIGluIHRoaXMKKy8vLyAgICBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29waWVkIGFuZCBjb252ZXJ0ZWQKKy8vLyAgICB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cHU4X3BzKF9fbTY0IF9fYSkKK3sKKyAgX19tNjQgX19iOworCisgIF9fYiA9IF9tbV9zZXR6ZXJvX3NpNjQoKTsKKyAgX19iID0gX21tX3VucGFja2xvX3BpOChfX2EsIF9fYik7CisKKyAgcmV0dXJuIF9tbV9jdnRwaTE2X3BzKF9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgdGhlIHR3byAzMi1iaXQgc2lnbmVkIGludGVnZXIgdmFsdWVzIGZyb20gZWFjaCA2NC1iaXQgdmVjdG9yCisvLy8gICAgb3BlcmFuZCBvZiBbMiB4IGkzMl0gaW50byBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIENWVFBJMlBTICsgXGMgQ09NUE9TSVRFIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbMiB4IGkzMl0uIFRoZSBsb3dlciBlbGVtZW50cyBvZiB0aGUgZGVzdGluYXRpb24gYXJlCisvLy8gICAgY29waWVkIGZyb20gdGhlIGVsZW1lbnRzIGluIHRoaXMgb3BlcmFuZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXS4gVGhlIHVwcGVyIGVsZW1lbnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmUKKy8vLyAgICBjb3BpZWQgZnJvbSB0aGUgZWxlbWVudHMgaW4gdGhpcyBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gd2hvc2UgbG93ZXIgNjQgYml0cyBjb250YWluIHRoZQorLy8vICAgIGNvcGllZCBhbmQgY29udmVydGVkIHZhbHVlcyBmcm9tIHRoZSBmaXJzdCBvcGVyYW5kLiBUaGUgdXBwZXIgNjQgYml0cworLy8vICAgIGNvbnRhaW4gdGhlIGNvcGllZCBhbmQgY29udmVydGVkIHZhbHVlcyBmcm9tIHRoZSBzZWNvbmQgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwaTMyeDJfcHMoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIF9fbTEyOCBfX2M7CisKKyAgX19jID0gX21tX3NldHplcm9fcHMoKTsKKyAgX19jID0gX21tX2N2dHBpMzJfcHMoX19jLCBfX2IpOworICBfX2MgPSBfbW1fbW92ZWxoX3BzKF9fYywgX19jKTsKKworICByZXR1cm4gX21tX2N2dHBpMzJfcHMoX19jLCBfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGVhY2ggc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBlbGVtZW50IG9mIGEgMTI4LWJpdAorLy8vICAgIGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBpbnRvIGEgMTYtYml0IHNpZ25lZCBpbnRlZ2VyLCBhbmQKKy8vLyAgICBwYWNrcyB0aGUgcmVzdWx0cyBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4gSWYgdGhlCisvLy8gICAgZmxvYXRpbmctcG9pbnQgZWxlbWVudCBpcyBOYU4gb3IgaW5maW5pdHksIG9yIGlmIHRoZSBmbG9hdGluZy1wb2ludAorLy8vICAgIGVsZW1lbnQgaXMgZ3JlYXRlciB0aGFuIDB4N0ZGRkZGRkYgb3IgbGVzcyB0aGFuIC0weDgwMDAsIGl0IGlzIGNvbnZlcnRlZAorLy8vICAgIHRvIDB4ODAwMC4gT3RoZXJ3aXNlIGlmIHRoZSBmbG9hdGluZy1wb2ludCBlbGVtZW50IGlzIGdyZWF0ZXIKKy8vLyAgICB0aGFuIDB4N0ZGRiwgaXQgaXMgY29udmVydGVkIHRvIDB4N0ZGRi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBDVlRQUzJQSSArIFxjIENPTVBPU0lURSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwc19waTE2KF9fbTEyOCBfX2EpCit7CisgIF9fbTY0IF9fYiwgX19jOworCisgIF9fYiA9IF9tbV9jdnRwc19waTMyKF9fYSk7CisgIF9fYSA9IF9tbV9tb3ZlaGxfcHMoX19hLCBfX2EpOworICBfX2MgPSBfbW1fY3Z0cHNfcGkzMihfX2EpOworCisgIHJldHVybiBfbW1fcGFja3NfcGkzMihfX2IsIF9fYyk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgZWFjaCBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGVsZW1lbnQgb2YgYSAxMjgtYml0CisvLy8gICAgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGludG8gYW4gOC1iaXQgc2lnbmVkIGludGVnZXIsIGFuZAorLy8vICAgIHBhY2tzIHRoZSByZXN1bHRzIGludG8gdGhlIGxvd2VyIDMyIGJpdHMgb2YgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YKKy8vLyAgICBbOCB4IGk4XS4gVGhlIHVwcGVyIDMyIGJpdHMgb2YgdGhlIHZlY3RvciBhcmUgc2V0IHRvIDAuIElmIHRoZQorLy8vICAgIGZsb2F0aW5nLXBvaW50IGVsZW1lbnQgaXMgTmFOIG9yIGluZmluaXR5LCBvciBpZiB0aGUgZmxvYXRpbmctcG9pbnQKKy8vLyAgICBlbGVtZW50IGlzIGdyZWF0ZXIgdGhhbiAweDdGRkZGRkZGIG9yIGxlc3MgdGhhbiAtMHg4MCwgaXQgaXMgY29udmVydGVkCisvLy8gICAgdG8gMHg4MC4gT3RoZXJ3aXNlIGlmIHRoZSBmbG9hdGluZy1wb2ludCBlbGVtZW50IGlzIGdyZWF0ZXIKKy8vLyAgICB0aGFuIDB4N0YsIGl0IGlzIGNvbnZlcnRlZCB0byAweDdGLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIENWVFBTMlBJICsgXGMgQ09NUE9TSVRFIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLiBUaGUgbG93ZXIgMzIgYml0cyBjb250YWluIHRoZQorLy8vICAgIGNvbnZlcnRlZCB2YWx1ZXMgYW5kIHRoZSB1cHBwZXIgMzIgYml0cyBhcmUgc2V0IHRvIHplcm8uCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwc19waTgoX19tMTI4IF9fYSkKK3sKKyAgX19tNjQgX19iLCBfX2M7CisKKyAgX19iID0gX21tX2N2dHBzX3BpMTYoX19hKTsKKyAgX19jID0gX21tX3NldHplcm9fc2k2NCgpOworCisgIHJldHVybiBfbW1fcGFja3NfcGkxNihfX2IsIF9fYyk7Cit9CisKKy8vLyBcYnJpZWYgRXh0cmFjdHMgdGhlIHNpZ24gYml0cyBmcm9tIGVhY2ggc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludAorLy8vICAgIGVsZW1lbnQgb2YgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBhbmQgcmV0dXJucyB0aGUKKy8vLyAgICBzaWduIGJpdHMgaW4gYml0cyBbMDozXSBvZiB0aGUgcmVzdWx0LiBCaXRzIFszMTo0XSBvZiB0aGUgcmVzdWx0IGFyZSBzZXQKKy8vLyAgICB0byB6ZXJvLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZNU0tQUyAvIE1PVk1TS1BTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZS4gQml0cyBbMzowXSBjb250YWluIHRoZSBzaWduIGJpdHMgZnJvbSBlYWNoCisvLy8gICAgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBlbGVtZW50IG9mIHRoZSBwYXJhbWV0ZXIuIEJpdHMgWzMxOjRdIGFyZQorLy8vICAgIHNldCB0byB6ZXJvLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVtYXNrX3BzKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9tb3Ztc2twcygoX192NHNmKV9fYSk7Cit9CisKKworI2RlZmluZSBfTU1fQUxJR04xNiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpCisKKyNkZWZpbmUgX01NX1NIVUZGTEUoeiwgeSwgeCwgdykgKCgoeikgPDwgNikgfCAoKHkpIDw8IDQpIHwgKCh4KSA8PCAyKSB8ICh3KSkKKworI2RlZmluZSBfTU1fRVhDRVBUX0lOVkFMSUQgICAgKDB4MDAwMSkKKyNkZWZpbmUgX01NX0VYQ0VQVF9ERU5PUk0gICAgICgweDAwMDIpCisjZGVmaW5lIF9NTV9FWENFUFRfRElWX1pFUk8gICAoMHgwMDA0KQorI2RlZmluZSBfTU1fRVhDRVBUX09WRVJGTE9XICAgKDB4MDAwOCkKKyNkZWZpbmUgX01NX0VYQ0VQVF9VTkRFUkZMT1cgICgweDAwMTApCisjZGVmaW5lIF9NTV9FWENFUFRfSU5FWEFDVCAgICAoMHgwMDIwKQorI2RlZmluZSBfTU1fRVhDRVBUX01BU0sgICAgICAgKDB4MDAzZikKKworI2RlZmluZSBfTU1fTUFTS19JTlZBTElEICAgICAgKDB4MDA4MCkKKyNkZWZpbmUgX01NX01BU0tfREVOT1JNICAgICAgICgweDAxMDApCisjZGVmaW5lIF9NTV9NQVNLX0RJVl9aRVJPICAgICAoMHgwMjAwKQorI2RlZmluZSBfTU1fTUFTS19PVkVSRkxPVyAgICAgKDB4MDQwMCkKKyNkZWZpbmUgX01NX01BU0tfVU5ERVJGTE9XICAgICgweDA4MDApCisjZGVmaW5lIF9NTV9NQVNLX0lORVhBQ1QgICAgICAoMHgxMDAwKQorI2RlZmluZSBfTU1fTUFTS19NQVNLICAgICAgICAgKDB4MWY4MCkKKworI2RlZmluZSBfTU1fUk9VTkRfTkVBUkVTVCAgICAgKDB4MDAwMCkKKyNkZWZpbmUgX01NX1JPVU5EX0RPV04gICAgICAgICgweDIwMDApCisjZGVmaW5lIF9NTV9ST1VORF9VUCAgICAgICAgICAoMHg0MDAwKQorI2RlZmluZSBfTU1fUk9VTkRfVE9XQVJEX1pFUk8gKDB4NjAwMCkKKyNkZWZpbmUgX01NX1JPVU5EX01BU0sgICAgICAgICgweDYwMDApCisKKyNkZWZpbmUgX01NX0ZMVVNIX1pFUk9fTUFTSyAgICgweDgwMDApCisjZGVmaW5lIF9NTV9GTFVTSF9aRVJPX09OICAgICAoMHg4MDAwKQorI2RlZmluZSBfTU1fRkxVU0hfWkVST19PRkYgICAgKDB4MDAwMCkKKworI2RlZmluZSBfTU1fR0VUX0VYQ0VQVElPTl9NQVNLKCkgKF9tbV9nZXRjc3IoKSAmIF9NTV9NQVNLX01BU0spCisjZGVmaW5lIF9NTV9HRVRfRVhDRVBUSU9OX1NUQVRFKCkgKF9tbV9nZXRjc3IoKSAmIF9NTV9FWENFUFRfTUFTSykKKyNkZWZpbmUgX01NX0dFVF9GTFVTSF9aRVJPX01PREUoKSAoX21tX2dldGNzcigpICYgX01NX0ZMVVNIX1pFUk9fTUFTSykKKyNkZWZpbmUgX01NX0dFVF9ST1VORElOR19NT0RFKCkgKF9tbV9nZXRjc3IoKSAmIF9NTV9ST1VORF9NQVNLKQorCisjZGVmaW5lIF9NTV9TRVRfRVhDRVBUSU9OX01BU0soeCkgKF9tbV9zZXRjc3IoKF9tbV9nZXRjc3IoKSAmIH5fTU1fTUFTS19NQVNLKSB8ICh4KSkpCisjZGVmaW5lIF9NTV9TRVRfRVhDRVBUSU9OX1NUQVRFKHgpIChfbW1fc2V0Y3NyKChfbW1fZ2V0Y3NyKCkgJiB+X01NX0VYQ0VQVF9NQVNLKSB8ICh4KSkpCisjZGVmaW5lIF9NTV9TRVRfRkxVU0hfWkVST19NT0RFKHgpIChfbW1fc2V0Y3NyKChfbW1fZ2V0Y3NyKCkgJiB+X01NX0ZMVVNIX1pFUk9fTUFTSykgfCAoeCkpKQorI2RlZmluZSBfTU1fU0VUX1JPVU5ESU5HX01PREUoeCkgKF9tbV9zZXRjc3IoKF9tbV9nZXRjc3IoKSAmIH5fTU1fUk9VTkRfTUFTSykgfCAoeCkpKQorCisjZGVmaW5lIF9NTV9UUkFOU1BPU0U0X1BTKHJvdzAsIHJvdzEsIHJvdzIsIHJvdzMpIFwKK2RvIHsgXAorICBfX20xMjggdG1wMywgdG1wMiwgdG1wMSwgdG1wMDsgXAorICB0bXAwID0gX21tX3VucGFja2xvX3BzKChyb3cwKSwgKHJvdzEpKTsgXAorICB0bXAyID0gX21tX3VucGFja2xvX3BzKChyb3cyKSwgKHJvdzMpKTsgXAorICB0bXAxID0gX21tX3VucGFja2hpX3BzKChyb3cwKSwgKHJvdzEpKTsgXAorICB0bXAzID0gX21tX3VucGFja2hpX3BzKChyb3cyKSwgKHJvdzMpKTsgXAorICAocm93MCkgPSBfbW1fbW92ZWxoX3BzKHRtcDAsIHRtcDIpOyBcCisgIChyb3cxKSA9IF9tbV9tb3ZlaGxfcHModG1wMiwgdG1wMCk7IFwKKyAgKHJvdzIpID0gX21tX21vdmVsaF9wcyh0bXAxLCB0bXAzKTsgXAorICAocm93MykgPSBfbW1fbW92ZWhsX3BzKHRtcDMsIHRtcDEpOyBcCit9IHdoaWxlICgwKQorCisvKiBBbGlhc2VzIGZvciBjb21wYXRpYmlsaXR5LiAqLworI2RlZmluZSBfbV9wZXh0cncgX21tX2V4dHJhY3RfcGkxNgorI2RlZmluZSBfbV9waW5zcncgX21tX2luc2VydF9waTE2CisjZGVmaW5lIF9tX3BtYXhzdyBfbW1fbWF4X3BpMTYKKyNkZWZpbmUgX21fcG1heHViIF9tbV9tYXhfcHU4CisjZGVmaW5lIF9tX3BtaW5zdyBfbW1fbWluX3BpMTYKKyNkZWZpbmUgX21fcG1pbnViIF9tbV9taW5fcHU4CisjZGVmaW5lIF9tX3Btb3Ztc2tiIF9tbV9tb3ZlbWFza19waTgKKyNkZWZpbmUgX21fcG11bGh1dyBfbW1fbXVsaGlfcHUxNgorI2RlZmluZSBfbV9wc2h1ZncgX21tX3NodWZmbGVfcGkxNgorI2RlZmluZSBfbV9tYXNrbW92cSBfbW1fbWFza21vdmVfc2k2NAorI2RlZmluZSBfbV9wYXZnYiBfbW1fYXZnX3B1OAorI2RlZmluZSBfbV9wYXZndyBfbW1fYXZnX3B1MTYKKyNkZWZpbmUgX21fcHNhZGJ3IF9tbV9zYWRfcHU4CisjZGVmaW5lIF9tXyBfbW1fCisjZGVmaW5lIF9tXyBfbW1fCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworLyogVWdseSBoYWNrIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSAoY29tcGF0aWJsZSB3aXRoIGdjYykgKi8KKyNpZiBkZWZpbmVkKF9fU1NFMl9fKSAmJiAhX19idWlsZGluZ19tb2R1bGUoX0J1aWx0aW5faW50cmluc2ljcykKKyNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX19YTU1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94b3BpbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveG9waW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmMGNlYwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveG9waW50cmluLmgKQEAgLTAsMCArMSw3ODIgQEAKKy8qPT09LS0tLSB4b3BpbnRyaW4uaCAtIFhPUCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YODZJTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHhvcGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19YT1BJTlRSSU5fSAorI2RlZmluZSBfX1hPUElOVFJJTl9ICisKKyNpbmNsdWRlIDxmbWE0aW50cmluLmg+CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygieG9wIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hY2NzX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3Nzd3coKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CLCAoX192OGhpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY19lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWNzd3coKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CLCAoX192OGhpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY3NkX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3Nzd2QoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CLCAoX192NHNpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY2RfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3dkKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQiwgKF9fdjRzaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hY2NzX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3NzZGQoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CLCAoX192NHNpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY19lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWNzZGQoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CLCAoX192NHNpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY3Nsb19lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWNzc2RxbCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IsIChfX3YyZGkpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjbG9fZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc2RxbCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IsIChfX3YyZGkpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjc2hpX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3NzZHFoKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQiwgKF9fdjJkaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hY2NoaV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWNzZHFoKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQiwgKF9fdjJkaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGRzZF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWRjc3N3ZCgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IsIChfX3Y0c2kpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWRkZF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWRjc3dkKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQiwgKF9fdjRzaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGR3X2VwaTgoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGRidygoX192MTZxaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRkX2VwaTgoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGRiZCgoX192MTZxaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRxX2VwaTgoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGRicSgoX192MTZxaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRkX2VwaTE2KF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoYWRkd2QoKF9fdjhoaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRxX2VwaTE2KF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoYWRkd3EoKF9fdjhoaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRxX2VwaTMyKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoYWRkZHEoKF9fdjRzaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGR3X2VwdTgoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR1YncoKF9fdjE2cWkpX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkZF9lcHU4KF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoYWRkdWJkKChfX3YxNnFpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHFfZXB1OChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZHVicSgoX192MTZxaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRkX2VwdTE2KF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoYWRkdXdkKChfX3Y4aGkpX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkcV9lcHUxNihfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZHV3cSgoX192OGhpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHFfZXB1MzIoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR1ZHEoKF9fdjRzaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJ3X2VwaTgoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhzdWJidygoX192MTZxaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJkX2VwaTE2KF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoc3Vid2QoKF9fdjhoaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJxX2VwaTMyKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoc3ViZHEoKF9fdjRzaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Ntb3Zfc2kxMjgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY21vdigoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IsIChfX3YyZGkpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbW92X3NpMjU2KF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQiwgX19tMjU2aSBfX0MpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl92cGNtb3ZfMjU2KChfX3Y0ZGkpX19BLCAoX192NGRpKV9fQiwgKF9fdjRkaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm1fZXBpOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBwZXJtKChfX3YxNnFpKV9fQSwgKF9fdjE2cWkpX19CLCAoX192MTZxaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JvdF9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwcm90YigoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcm90X2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwcm90dygoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JvdF9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHJvdGQoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yb3RfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3RxKChfX3YyZGkpX19BLCAoX192MmRpKV9fQik7Cit9CisKKyNkZWZpbmUgX21tX3JvdGlfZXBpOChBLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3RiaSgoX192MTZxaSkoX19tMTI4aSkoQSksIChOKSk7IH0pCisKKyNkZWZpbmUgX21tX3JvdGlfZXBpMTYoQSwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwcm90d2koKF9fdjhoaSkoX19tMTI4aSkoQSksIChOKSk7IH0pCisKKyNkZWZpbmUgX21tX3JvdGlfZXBpMzIoQSwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwcm90ZGkoKF9fdjRzaSkoX19tMTI4aSkoQSksIChOKSk7IH0pCisKKyNkZWZpbmUgX21tX3JvdGlfZXBpNjQoQSwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwcm90cWkoKF9fdjJkaSkoX19tMTI4aSkoQSksIChOKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2hsX2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBzaGxiKChfX3YxNnFpKV9fQSwgKF9fdjE2cWkpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGxfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBzaGx3KChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2hsX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwc2hsZCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NobF9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNobHEoKF9fdjJkaSlfX0EsIChfX3YyZGkpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGFfZXBpOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNoYWIoKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYV9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNoYXcoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGFfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBzaGFkKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2hhX2VwaTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwc2hhcSgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOworfQorCisjZGVmaW5lIF9tbV9jb21fZXB1OChBLCBCLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjb211YigoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoQiksIChOKSk7IH0pCisKKyNkZWZpbmUgX21tX2NvbV9lcHUxNihBLCBCLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjb211dygoX192OGhpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKEIpLCAoTikpOyB9KQorCisjZGVmaW5lIF9tbV9jb21fZXB1MzIoQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY29tdWQoKF9fdjRzaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fY29tX2VwdTY0KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbXVxKChfX3YyZGkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQiksIChOKSk7IH0pCisKKyNkZWZpbmUgX21tX2NvbV9lcGk4KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbWIoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoQiksIChOKSk7IH0pCisKKyNkZWZpbmUgX21tX2NvbV9lcGkxNihBLCBCLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjb213KChfX3Y4aGkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fY29tX2VwaTMyKEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbWQoKF9fdjRzaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEIpLCAoTikpOyB9KQorCisjZGVmaW5lIF9tbV9jb21fZXBpNjQoQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY29tcSgoX192MmRpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQiksIChOKSk7IH0pCisKKyNkZWZpbmUgX01NX1BDT01DVFJMX0xUICAgIDAKKyNkZWZpbmUgX01NX1BDT01DVFJMX0xFICAgIDEKKyNkZWZpbmUgX01NX1BDT01DVFJMX0dUICAgIDIKKyNkZWZpbmUgX01NX1BDT01DVFJMX0dFICAgIDMKKyNkZWZpbmUgX01NX1BDT01DVFJMX0VRICAgIDQKKyNkZWZpbmUgX01NX1BDT01DVFJMX05FUSAgIDUKKyNkZWZpbmUgX01NX1BDT01DVFJMX0ZBTFNFIDYKKyNkZWZpbmUgX01NX1BDT01DVFJMX1RSVUUgIDcKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sdF9lcHU4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1OChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sZV9lcHU4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1OChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21ndF9lcHU4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1OChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21nZV9lcHU4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1OChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21lcV9lcHU4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1OChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0VRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21uZXFfZXB1OChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTgoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9ORVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWZhbHNlX2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRkFMU0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbXRydWVfZXB1OChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTgoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9UUlVFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sdF9lcHUxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWxlX2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ3RfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21nZV9lcHUxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWVxX2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbmVxX2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9ORVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWZhbHNlX2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tdHJ1ZV9lcHUxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfVFJVRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbHRfZXB1MzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sZV9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWd0X2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ2VfZXB1MzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21lcV9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbW5lcV9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTkVRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21mYWxzZV9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRkFMU0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbXRydWVfZXB1MzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWx0X2VwdTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1NjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbGVfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21ndF9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWdlX2VwdTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1NjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZXFfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0VRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21uZXFfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZmFsc2VfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0ZBTFNFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb210cnVlX2VwdTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1NjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9UUlVFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sdF9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpOChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sZV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpOChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21ndF9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpOChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21nZV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpOChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21lcV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpOChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0VRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21uZXFfZXBpOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTgoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9ORVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWZhbHNlX2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRkFMU0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbXRydWVfZXBpOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTgoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9UUlVFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sdF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWxlX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ3RfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21nZV9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWVxX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbmVxX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9ORVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWZhbHNlX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tdHJ1ZV9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfVFJVRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbHRfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sZV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWd0X2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ2VfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21lcV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbW5lcV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTkVRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21mYWxzZV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRkFMU0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbXRydWVfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWx0X2VwaTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpNjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbGVfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21ndF9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWdlX2VwaTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpNjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZXFfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0VRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21uZXFfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZmFsc2VfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0ZBTFNFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb210cnVlX2VwaTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpNjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9UUlVFKTsKK30KKworI2RlZmluZSBfbW1fcGVybXV0ZTJfcGQoWCwgWSwgQywgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZwZXJtaWwycGQoKF9fdjJkZikoX19tMTI4ZCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShZKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEMpLCAoSSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9wZXJtdXRlMl9wZChYLCBZLCBDLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdnBlcm1pbDJwZDI1NigoX192NGRmKShfX20yNTZkKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoQyksIChJKSk7IH0pCisKKyNkZWZpbmUgX21tX3Blcm11dGUyX3BzKFgsIFksIEMsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZwZXJtaWwycHMoKF9fdjRzZikoX19tMTI4KShYKSwgKF9fdjRzZikoX19tMTI4KShZKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQyksIChJKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3Blcm11dGUyX3BzKFgsIFksIEMsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZwZXJtaWwycHMyNTYoKF9fdjhzZikoX19tMjU2KShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShZKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoQyksIChJKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mcmN6X3NzKF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmcmN6c3MoKF9fdjRzZilfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZyY3pfc2QoX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92ZnJjenNkKChfX3YyZGYpX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZyY3pfcHMoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZyY3pwcygoX192NHNmKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZnJjel9wZChfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmcmN6cGQoKF9fdjJkZilfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZnJjel9wcyhfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92ZnJjenBzMjU2KChfX3Y4c2YpX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mcmN6X3BkKF9fbTI1NmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZyY3pwZDI1NigoX192NGRmKV9fQSk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fWE9QSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVjaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlY2ludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ODQ3MGEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlY2ludHJpbi5oCkBAIC0wLDAgKzEsNDggQEAKKy8qPT09LS0tLSB4c2F2ZWNpbnRyaW4uaCAtIFhTQVZFQyBpbnRyaW5zaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDx4c2F2ZWNpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fWFNBVkVDSU5UUklOX0gKKyNkZWZpbmUgX19YU0FWRUNJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sICBfX3RhcmdldF9fKCJ4c2F2ZWMiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHNhdmVjKHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICBfX2J1aWx0aW5faWEzMl94c2F2ZWMoX19wLCBfX20pOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194c2F2ZWM2NCh2b2lkICpfX3AsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX20pIHsKKyAgX19idWlsdGluX2lhMzJfeHNhdmVjNjQoX19wLCBfX20pOworfQorI2VuZGlmCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlaW50cmluLmggYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlNmIyZQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVpbnRyaW4uaApAQCAtMCwwICsxLDU4IEBACisvKj09PS0tLS0geHNhdmVpbnRyaW4uaCAtIFhTQVZFIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHhzYXZlaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX1hTQVZFSU5UUklOX0gKKyNkZWZpbmUgX19YU0FWRUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgIF9fdGFyZ2V0X18oInhzYXZlIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hzYXZlKHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfeHNhdmUoX19wLCBfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hyc3Rvcih2b2lkICpfX3AsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX20pIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3hyc3RvcihfX3AsIF9fbSk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hzYXZlNjQodm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl94c2F2ZTY0KF9fcCwgX19tKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194cnN0b3I2NCh2b2lkICpfX3AsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX20pIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3hyc3RvcjY0KF9fcCwgX19tKTsKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94c2F2ZW9wdGludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94c2F2ZW9wdGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZmFhZTcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlb3B0aW50cmluLmgKQEAgLTAsMCArMSw0OCBAQAorLyo9PT0tLS0tIHhzYXZlb3B0aW50cmluLmggLSBYU0FWRU9QVCBpbnRyaW5zaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDx4c2F2ZW9wdGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19YU0FWRU9QVElOVFJJTl9ICisjZGVmaW5lIF9fWFNBVkVPUFRJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sICBfX3RhcmdldF9fKCJ4c2F2ZW9wdCIpKSkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194c2F2ZW9wdCh2b2lkICpfX3AsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX20pIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3hzYXZlb3B0KF9fcCwgX19tKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHNhdmVvcHQ2NCh2b2lkICpfX3AsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX20pIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3hzYXZlb3B0NjQoX19wLCBfX20pOworfQorI2VuZGlmCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlc2ludHJpbi5oIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94c2F2ZXNpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWU1NDBhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94c2F2ZXNpbnRyaW4uaApAQCAtMCwwICsxLDU4IEBACisvKj09PS0tLS0geHNhdmVzaW50cmluLmggLSBYU0FWRVMgaW50cmluc2ljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8eHNhdmVzaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX1hTQVZFU0lOVFJJTl9ICisjZGVmaW5lIF9fWFNBVkVTSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCAgX190YXJnZXRfXygieHNhdmVzIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hzYXZlcyh2b2lkICpfX3AsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX20pIHsKKyAgX19idWlsdGluX2lhMzJfeHNhdmVzKF9fcCwgX19tKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194cnN0b3JzKHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICBfX2J1aWx0aW5faWEzMl94cnN0b3JzKF9fcCwgX19tKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHJzdG9yczY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICBfX2J1aWx0aW5faWEzMl94cnN0b3JzNjQoX19wLCBfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hzYXZlczY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICBfX2J1aWx0aW5faWEzMl94c2F2ZXM2NChfX3AsIF9fbSk7Cit9CisjZW5kaWYKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHRlc3RpbnRyaW4uaCBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHRlc3RpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDMzNzhmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94dGVzdGludHJpbi5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qPT09LS0tLSB4dGVzdGludHJpbi5oIC0gWFRFU1QgaW50cmluc2ljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8eHRlc3RpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fWFRFU1RJTlRSSU5fSAorI2RlZmluZSBfX1hURVNUSU5UUklOX0gKKworLyogeHRlc3QgcmV0dXJucyBub24temVybyBpZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgZXhlY3V0ZWQgd2l0aGluIGFuIFJUTSBvciBhY3RpdmUKKyAqIEhMRSByZWdpb24uICovCisvKiBGSVhNRTogVGhpcyBjYW4gYmUgYW4gZWl0aGVyIG9yIGZvciBSVE0vSExFLiBEZWFsIHdpdGggdGhpcyB3aGVuIEhMRSBpcworICogc3VwcG9ydGVkLiAqLworc3RhdGljIF9faW5saW5lX18gaW50CisgICAgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJydG0iKSkpCisgICAgX3h0ZXN0KHZvaWQpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3h0ZXN0KCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4tYWFyY2g2NC1hbmRyb2lkLnNvIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4tYWFyY2g2NC1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1YmQ4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hYXJjaDY0LWFuZHJvaWQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4tYXJtLWFuZHJvaWQuc28gYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hcm0tYW5kcm9pZC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOGM2ZTIwCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4tYXJtLWFuZHJvaWQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4taTY4Ni1hbmRyb2lkLnNvIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4taTY4Ni1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2MWEzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1pNjg2LWFuZHJvaWQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4tbWlwcy1hbmRyb2lkLnNvIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4tbWlwcy1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjViZTNlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1taXBzLWFuZHJvaWQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4tbWlwczY0LWFuZHJvaWQuc28gYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1taXBzNjQtYW5kcm9pZC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZGI1MWMyCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4tbWlwczY0LWFuZHJvaWQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtYWFyY2g2NC1hbmRyb2lkLmEgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1hYXJjaDY0LWFuZHJvaWQuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzQ5NDRlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtYWFyY2g2NC1hbmRyb2lkLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtYXJtLWFuZHJvaWQuYSBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLWFybS1hbmRyb2lkLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczNDAwNQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLWFybS1hbmRyb2lkLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtaTY4Ni1hbmRyb2lkLmEgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1pNjg2LWFuZHJvaWQuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWY3NDg4Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtaTY4Ni1hbmRyb2lkLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtbWlwczY0ZWwtYW5kcm9pZC5hIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtbWlwczY0ZWwtYW5kcm9pZC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYjI2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1taXBzNjRlbC1hbmRyb2lkLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtbWlwc2VsLWFuZHJvaWQuYSBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLW1pcHNlbC1hbmRyb2lkLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwMzM5MwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLW1pcHNlbC1hbmRyb2lkLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUteDg2XzY0LWFuZHJvaWQuYSBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLXg4Nl82NC1hbmRyb2lkLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2NzdiYwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLXg4Nl82NC1hbmRyb2lkLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmUtYWFyY2g2NC1hbmRyb2lkLnNvIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmUtYWFyY2g2NC1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3NDNjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1hYXJjaDY0LWFuZHJvaWQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmUtYXJtLWFuZHJvaWQuc28gYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1hcm0tYW5kcm9pZC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYTZiMDEzCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmUtYXJtLWFuZHJvaWQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmUtaTY4Ni1hbmRyb2lkLnNvIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmUtaTY4Ni1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkNDIyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1pNjg2LWFuZHJvaWQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmUtbWlwcy1hbmRyb2lkLnNvIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmUtbWlwcy1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZkMTJhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1taXBzLWFuZHJvaWQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmUtbWlwczY0LWFuZHJvaWQuc28gYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1taXBzNjQtYW5kcm9pZC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjU4NzA4Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmUtbWlwczY0LWFuZHJvaWQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYm9tcC1hcm0uc28gYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGlib21wLWFybS5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYmNlYTEyCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYm9tcC1hcm0uc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYm9tcC1hcm02NC5zbyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJvbXAtYXJtNjQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzYzNzBlOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJvbXAtYXJtNjQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYm9tcC14ODYuc28gYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGlib21wLXg4Ni5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MThiN2RiCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYm9tcC14ODYuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYm9tcC14ODZfNjQuc28gYi9jbGFuZy0zMzYyNDM3L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGlib21wLXg4Nl82NC5zbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NDNiYjBkCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYm9tcC14ODZfNjQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy9tYW5pZmVzdF8zMzYyNDM3LnhtbCBiL2NsYW5nLTMzNjI0MzcvbWFuaWZlc3RfMzM2MjQzNy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3MDBlZgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvbWFuaWZlc3RfMzM2MjQzNy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzxtYW5pZmVzdD4KKyAgPHJlbW90ZSBmZXRjaD0iLi4iIG5hbWU9ImFvc3AiIHJldmlldz0iaHR0cHM6Ly9hbmRyb2lkLXJldmlldy5nb29nbGVzb3VyY2UuY29tLyIgLz4KKyAgPGRlZmF1bHQgcmVtb3RlPSJhb3NwIiByZXZpc2lvbj0ibWFzdGVyIiBzeW5jLWo9IjQiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLHRyYWRlZmVkIiBuYW1lPSJwbGF0Zm9ybS9idWlsZCIgcGF0aD0iYnVpbGQiIHJldmlzaW9uPSI5MjM5NmUxNzQ3M2IxM2U1ZjE1MjZkNWUxNzk5Nzk5ZTIyNGMyMGUzIiB1cHN0cmVhbT0ibWFzdGVyIj4KKyAgICA8Y29weWZpbGUgZGVzdD0iTWFrZWZpbGUiIHNyYz0iY29yZS9yb290Lm1rIiAvPgorICA8L3Byb2plY3Q+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLHRyYWRlZmVkIiBuYW1lPSJwbGF0Zm9ybS9idWlsZC9ibHVlcHJpbnQiIHBhdGg9ImJ1aWxkL2JsdWVwcmludCIgcmV2aXNpb249ImZhYWM3OGM2ZmI2N2Y3MTE4ZjQyYmI0Y2RmZjgzYmE0NDI4MmZiNWMiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLHRyYWRlZmVkIiBuYW1lPSJwbGF0Zm9ybS9idWlsZC9rYXRpIiBwYXRoPSJidWlsZC9rYXRpIiByZXZpc2lvbj0iMWI2ODI0M2NmMmRjOWUwOWM5NzIzZjY5NTQzMTEyNTY5MDM1OTQxNyIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssdHJhZGVmZWQiIG5hbWU9InBsYXRmb3JtL2J1aWxkL3Nvb25nIiBwYXRoPSJidWlsZC9zb29uZyIgcmV2aXNpb249IjdiODcyODM3YzZkMTNkYzU4Mjg5NzhkMThkNTVmNDk1NmMwNDZhNjEiIHVwc3RyZWFtPSJtYXN0ZXIiPgorICAgIDxsaW5rZmlsZSBkZXN0PSJBbmRyb2lkLmJwIiBzcmM9InJvb3QuYnAiIC8+CisgICAgPGxpbmtmaWxlIGRlc3Q9ImJvb3RzdHJhcC5iYXNoIiBzcmM9ImJvb3RzdHJhcC5iYXNoIiAvPgorICA8L3Byb2plY3Q+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrIiBuYW1lPSJwbGF0Zm9ybS9iaW9uaWMiIHBhdGg9ImJpb25pYyIgcmV2aXNpb249ImQ4MjQ0MjE0NzUxZjliNDhlNjBlNjk5MTBjNGU3MTc1ZjhmYWIxYWMiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrIiBuYW1lPSJwbGF0Zm9ybS9leHRlcm5hbC9jbGFuZyIgcGF0aD0iZXh0ZXJuYWwvY2xhbmciIHJldmlzaW9uPSJkZmUxNWQ2OTc2MzNjYmUxNGVkY2I3ZGMzMzBhY2RjZDk1NzVlMjY1IiB1cHN0cmVhbT0iZGV2IiAvPgorICA8cHJvamVjdCBuYW1lPSJwbGF0Zm9ybS9leHRlcm5hbC9jbGFuZy10b29scy1leHRyYSIgcGF0aD0iZXh0ZXJuYWwvY2xhbmctdG9vbHMtZXh0cmEiIHJldmlzaW9uPSI5NzQ4YzMwNjQzNWZhNjJlNWJlMzlmYjY4MGE2MWRkOTJhNjJiOTAxIiB1cHN0cmVhbT0iZGV2IiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayIgbmFtZT0icGxhdGZvcm0vZXh0ZXJuYWwvY29tcGlsZXItcnQiIHBhdGg9ImV4dGVybmFsL2NvbXBpbGVyLXJ0IiByZXZpc2lvbj0iZGI5NjNhMjEwNDhmZDcyNDJkYWFlNzQ2NjZjYjIyMWY3OTZmMzNjMyIgdXBzdHJlYW09ImRldiIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL2V4dGVybmFsL2dvb2dsZXRlc3QiIHBhdGg9ImV4dGVybmFsL2dvb2dsZXRlc3QiIHJldmlzaW9uPSI2NDUxNTM5NDY3Njg0OTY3NWU4OTU5YjY1YWRlM2QyNGQzNmU3MzBhIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayIgbmFtZT0icGxhdGZvcm0vZXh0ZXJuYWwvamVtYWxsb2MiIHBhdGg9ImV4dGVybmFsL2plbWFsbG9jIiByZXZpc2lvbj0iMDBmYTQ0ODJkODk3ODZhNDNmYjZmNzZkNmU4Njk5NmUxNTg3ZTE2ZiIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL2V4dGVybmFsL2xpYmN4eCIgcGF0aD0iZXh0ZXJuYWwvbGliY3h4IiByZXZpc2lvbj0iYmU5YThjMDY2MjVhNGFkNGIyZDg3MGNkNzgwNzc2ZTQ5ZDdkM2NiYSIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL2V4dGVybmFsL2xpYmN4eGFiaSIgcGF0aD0iZXh0ZXJuYWwvbGliY3h4YWJpIiByZXZpc2lvbj0iNmM1ZjJhNWEyZTQ0Yjg0ZTU0NzM5NmZkYTY5M2VlYmJmMjczMjcxZCIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL2V4dGVybmFsL2xpYnVud2luZCIgcGF0aD0iZXh0ZXJuYWwvbGlidW53aW5kIiByZXZpc2lvbj0iOTcyNGQyNDQ4ZWI3NjA0NTNjYjExMWIzZTg5NTEzNmNkYzJkODFkMCIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL2V4dGVybmFsL2xpYnVud2luZF9sbHZtIiBwYXRoPSJleHRlcm5hbC9saWJ1bndpbmRfbGx2bSIgcmV2aXNpb249IjVkZWRiM2MxYzI2NjgwMmYzMjhiZTU4NzIwYWRmNzM2YmZhMzg3NjIiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrIiBuYW1lPSJwbGF0Zm9ybS9leHRlcm5hbC9sbHZtIiBwYXRoPSJleHRlcm5hbC9sbHZtIiByZXZpc2lvbj0iZDMyMjFmY2RjZTA2NDE0ODg4NjAzNDUyN2ExOWRiZDc3NzQzZjllMiIgdXBzdHJlYW09ImRldiIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL2V4dGVybmFsL2x6bWEiIHBhdGg9ImV4dGVybmFsL2x6bWEiIHJldmlzaW9uPSIxN2RkYTU2ZjEyZDY3NGUyMjI2NmMyYWFkZmNjZTFjOTQ1YjJiYjJiIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBuYW1lPSJwbGF0Zm9ybS9leHRlcm5hbC9vcGVubXBfbGx2bSIgcGF0aD0iZXh0ZXJuYWwvb3Blbm1wX2xsdm0iIHJldmlzaW9uPSIyYWFhZTNlM2QzZDk0OGViMTg2MTA4MzYyZjVkZDlmMzdmZDNlM2RhIiB1cHN0cmVhbT0iZGV2IiAvPgorICA8cHJvamVjdCBjbG9uZS1kZXB0aD0iMSIgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9idWlsZC10b29scyIgcGF0aD0icHJlYnVpbHRzL2J1aWxkLXRvb2xzIiByZXZpc2lvbj0iMmZiZDY0OGUyZTUzZDBhZTMxMGYyYmU5MDNlZjRiNTA4NmIzNTExOSIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssZGFyd2luIiBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvY2xhbmcvaG9zdC9kYXJ3aW4teDg2IiBwYXRoPSJwcmVidWlsdHMvY2xhbmcvaG9zdC9kYXJ3aW4teDg2IiByZXZpc2lvbj0iNmRhN2FkZWNlYzAyZTg2NmE0OWQ3YWZjZGYwZDAzOWFiNmM5YjIzZCIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssbGludXgiIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4NiIgcGF0aD0icHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2IiByZXZpc2lvbj0iOTkwMjlkNmNiNzc3NzU3ZWM5YjE1MDExYWIzNjllYjNlZDE5YWFiNiIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssbGludXgiIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9jbGFuZy9ob3N0L3dpbmRvd3MteDg2IiBwYXRoPSJwcmVidWlsdHMvY2xhbmcvaG9zdC93aW5kb3dzLXg4NiIgcmV2aXNpb249ImJhNTFiZjdkODU0YjgwOGEyYWNiMTdlMDQ1YzE3MWU2ZTBiOTQ2ZjgiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLGRhcndpbixhcm0iIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hYXJjaDY0L2FhcmNoNjQtbGludXgtYW5kcm9pZC00LjkiIHBhdGg9InByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hYXJjaDY0L2FhcmNoNjQtbGludXgtYW5kcm9pZC00LjkiIHJldmlzaW9uPSI2YmYxNTNkZjMwODEzM2YwYWVkYTRmNDczODUzN2JiZWNhN2YyNTNhIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayxkYXJ3aW4sYXJtIiBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvYXJtL2FybS1lYWJpLTQuOCIgcGF0aD0icHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2FybS9hcm0tZWFiaS00LjgiIHJldmlzaW9uPSI2ZDA4Y2E5ZjQ1ZmY2ODU2NDhmZDEzYzc1YmY1Y2FjNGIxMWMxOWJiIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvYXJtL2FybS1saW51eC1hbmRyb2lkZWFiaS00LjkiIHBhdGg9InByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hcm0vYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuOSIgcmV2aXNpb249ImQ2MTBjMDhmOTBlZTJlMGQ1MjljYjIzNjBhYzAzYjI0OWUwMzdlMTIiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLGRhcndpbiIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2hvc3QvaGVhZGVycyIgcGF0aD0icHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2hvc3QvaGVhZGVycyIgcmV2aXNpb249IjRhYzRmN2NjNDFjZjNjOWUzNmZjM2Q2Y2YzN2ZkMWNmYTk1ODdhNjgiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLGRhcndpbiIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2hvc3QvaTY4Ni1hcHBsZS1kYXJ3aW4tNC4yLjEiIHBhdGg9InByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9ob3N0L2k2ODYtYXBwbGUtZGFyd2luLTQuMi4xIiByZXZpc2lvbj0iZWM1YWE2NmFhYTQ5NjRjMjc1NjRkMGVjODRkYzFmMThhMmQ3MmI3ZSIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssZGFyd2luLG1pcHMiIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9taXBzL21pcHM2NGVsLWxpbnV4LWFuZHJvaWQtNC45IiBwYXRoPSJwcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvbWlwcy9taXBzNjRlbC1saW51eC1hbmRyb2lkLTQuOSIgcmV2aXNpb249IjBjMGE3MDkzMjE1NGFhZWEzZTMyZDYxNmQ3OTcxNTk3ZGE2MDhlZDgiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLGRhcndpbix4ODYiIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni94ODYveDg2XzY0LWxpbnV4LWFuZHJvaWQtNC45IiBwYXRoPSJwcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYveDg2L3g4Nl82NC1saW51eC1hbmRyb2lkLTQuOSIgcmV2aXNpb249IjgwNTdiYTFhYzU1MzllNjI0ZGYxMDkzNGJlZTMxYzdlY2UxMDM5MzciIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLGxpbnV4LGFybSIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LWFuZHJvaWQtNC45IiBwYXRoPSJwcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9hYXJjaDY0L2FhcmNoNjQtbGludXgtYW5kcm9pZC00LjkiIHJldmlzaW9uPSI1ZjBhYTI3ZGUyMWZiYzYwOGU0OGRlZjM2NDdjZGNhZWYwNDIyODIwIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayxsaW51eCxhcm0iIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2FybS9hcm0tZWFiaS00LjgiIHBhdGg9InByZWJ1aWx0cy9nY2MvbGludXgteDg2L2FybS9hcm0tZWFiaS00LjgiIHJldmlzaW9uPSIyNmU5M2Y2YWY0N2Y3YmQzYTliZWI1YzEwMmE1ZjQ1ZTE5YmZhMzhhIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9hcm0vYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuOSIgcGF0aD0icHJlYnVpbHRzL2djYy9saW51eC14ODYvYXJtL2FybS1saW51eC1hbmRyb2lkZWFiaS00LjkiIHJldmlzaW9uPSJiZjAyZjliMmI0Zjk1NWQ4NzRmZGFhY2U3NjVlNDA4ZDBiMzFmMWU3IiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayxsaW51eCIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvaG9zdC94ODZfNjQtbGludXgtZ2xpYmMyLjExLTQuOCIgcGF0aD0icHJlYnVpbHRzL2djYy9saW51eC14ODYvaG9zdC94ODZfNjQtbGludXgtZ2xpYmMyLjExLTQuOCIgcmV2aXNpb249IjdhODgyNDkxNWEwNWJlZjg1ODFmYjFmNjE0YzRlZWU5NTY0YzRiYTIiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2hvc3QveDg2XzY0LWxpbnV4LWdsaWJjMi4xNS00LjgiIHBhdGg9InByZWJ1aWx0cy9nY2MvbGludXgteDg2L2hvc3QveDg2XzY0LWxpbnV4LWdsaWJjMi4xNS00LjgiIHJldmlzaW9uPSI3M2NhOTkxOTY3MjNmODEwZGFkNDIzOTBkMTU0NjU0MzU0ZjU3YzE2IiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9ob3N0L3g4Nl82NC13NjQtbWluZ3czMi00LjgiIHBhdGg9InByZWJ1aWx0cy9nY2MvbGludXgteDg2L2hvc3QveDg2XzY0LXc2NC1taW5ndzMyLTQuOCIgcmV2aXNpb249IjkzY2U2YmMwYmQ5N2FlNGJiNWY3ZTllN2UyYTc1MjI2MmExZWMxMjUiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLGxpbnV4LG1pcHMiIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L21pcHMvbWlwczY0ZWwtbGludXgtYW5kcm9pZC00LjkiIHBhdGg9InByZWJ1aWx0cy9nY2MvbGludXgteDg2L21pcHMvbWlwczY0ZWwtbGludXgtYW5kcm9pZC00LjkiIHJldmlzaW9uPSI1MzY1ZDNmMzZhY2ZiN2I1ZWUzY2M3MDdkMTRkZjZmYjQ0NGY3NTU0IiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayxsaW51eCx4ODYiIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L3g4Ni94ODZfNjQtbGludXgtYW5kcm9pZC00LjkiIHBhdGg9InByZWJ1aWx0cy9nY2MvbGludXgteDg2L3g4Ni94ODZfNjQtbGludXgtYW5kcm9pZC00LjkiIHJldmlzaW9uPSJlODljMDc5YzFiOTdlNmYyY2JiMTdiYmFjNDk0MDc1ZmRhODNjMzc0IiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBjbG9uZS1kZXB0aD0iMSIgZ3JvdXBzPSJkYXJ3aW4sdHJhZGVmZWQiIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nby9kYXJ3aW4teDg2IiBwYXRoPSJwcmVidWlsdHMvZ28vZGFyd2luLXg4NiIgcmV2aXNpb249Ijk2MGYxMGRjMmU5ZDA3NTg5ZDA1YWIzMmE2OWUzY2UzNzlhOTEyZGMiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGNsb25lLWRlcHRoPSIxIiBncm91cHM9ImxpbnV4LHRyYWRlZmVkIiBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvZ28vbGludXgteDg2IiBwYXRoPSJwcmVidWlsdHMvZ28vbGludXgteDg2IiByZXZpc2lvbj0iYWQ4MTFlMDlkNjI5MTQ4NmFkYTE1YzFmN2U4NDk4MjIyN2U5OTg4YiIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9uZGsiIHBhdGg9InByZWJ1aWx0cy9uZGsiIHJldmlzaW9uPSI2NjMxZWY0OWYyOWNlYzM2MmEyMGVhYTNhZjVhOWIxZGY3NDI0ODJhIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9ImxpbnV4LHBkayx0cmFkZWZlZCIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL25pbmphL2xpbnV4LXg4NiIgcGF0aD0icHJlYnVpbHRzL25pbmphL2xpbnV4LXg4NiIgcmV2aXNpb249IjYzNjliMTlmYzNmYmU3NjU2MzZhZjc1ZDM5NDYyN2UyYjkyNTk5ZWQiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0iZGFyd2luLHBkayx0cmFkZWZlZCIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL25pbmphL2Rhcndpbi14ODYiIHBhdGg9InByZWJ1aWx0cy9uaW5qYS9kYXJ3aW4teDg2IiByZXZpc2lvbj0iMDBmNzk4MzQ2ZGVkYjRhN2E2YTZkY2M5YWQzMmZmMDlkNjZlZTBkYiIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgY2xvbmUtZGVwdGg9IjEiIGdyb3Vwcz0icGRrIiBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvc2RrIiBwYXRoPSJwcmVidWlsdHMvc2RrIiByZXZpc2lvbj0iZjhiOGZhMzBiOWI1YTFhZmYxMjNjMGQzMDUzMzhmNjVjODczMTcxZCIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL3N5c3RlbS9jb3JlIiBwYXRoPSJzeXN0ZW0vY29yZSIgcmV2aXNpb249IjRiYzUxZDFlYTQ4ZGNkMTFlMWI0ZGIwODQxNDVjMmQwZGU4ZGRiZGIiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IG5hbWU9InRvb2xjaGFpbi9iaW51dGlscyIgcGF0aD0idG9vbGNoYWluL2JpbnV0aWxzIiByZXZpc2lvbj0iMTI5ZGVjM2VkMGUxZmMwN2Y3NWE0MzIyMDE0ZDc3MGNmZDY0MmY0ZCIgdXBzdHJlYW09Im1hc3RlciIgLz4KKzwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L3JlcG8ucHJvcCBiL2NsYW5nLTMzNjI0MzcvcmVwby5wcm9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZTBlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3JlcG8ucHJvcApAQCAtMCwwICsxLDQ1IEBACitwbGF0Zm9ybS9iaW9uaWMgZDgyNDQyMTQ3NTFmOWI0OGU2MGU2OTkxMGM0ZTcxNzVmOGZhYjFhYworcGxhdGZvcm0vYnVpbGQgOTIzOTZlMTc0NzNiMTNlNWYxNTI2ZDVlMTc5OTc5OWUyMjRjMjBlMworcGxhdGZvcm0vYnVpbGQvYmx1ZXByaW50IGZhYWM3OGM2ZmI2N2Y3MTE4ZjQyYmI0Y2RmZjgzYmE0NDI4MmZiNWMKK3BsYXRmb3JtL2J1aWxkL2thdGkgMWI2ODI0M2NmMmRjOWUwOWM5NzIzZjY5NTQzMTEyNTY5MDM1OTQxNworcGxhdGZvcm0vYnVpbGQvc29vbmcgN2I4NzI4MzdjNmQxM2RjNTgyODk3OGQxOGQ1NWY0OTU2YzA0NmE2MQorcGxhdGZvcm0vZXh0ZXJuYWwvY2xhbmcgZGZlMTVkNjk3NjMzY2JlMTRlZGNiN2RjMzMwYWNkY2Q5NTc1ZTI2NQorcGxhdGZvcm0vZXh0ZXJuYWwvY2xhbmctdG9vbHMtZXh0cmEgOTc0OGMzMDY0MzVmYTYyZTViZTM5ZmI2ODBhNjFkZDkyYTYyYjkwMQorcGxhdGZvcm0vZXh0ZXJuYWwvY29tcGlsZXItcnQgZGI5NjNhMjEwNDhmZDcyNDJkYWFlNzQ2NjZjYjIyMWY3OTZmMzNjMworcGxhdGZvcm0vZXh0ZXJuYWwvZ29vZ2xldGVzdCA2NDUxNTM5NDY3Njg0OTY3NWU4OTU5YjY1YWRlM2QyNGQzNmU3MzBhCitwbGF0Zm9ybS9leHRlcm5hbC9qZW1hbGxvYyAwMGZhNDQ4MmQ4OTc4NmE0M2ZiNmY3NmQ2ZTg2OTk2ZTE1ODdlMTZmCitwbGF0Zm9ybS9leHRlcm5hbC9saWJjeHggYmU5YThjMDY2MjVhNGFkNGIyZDg3MGNkNzgwNzc2ZTQ5ZDdkM2NiYQorcGxhdGZvcm0vZXh0ZXJuYWwvbGliY3h4YWJpIDZjNWYyYTVhMmU0NGI4NGU1NDczOTZmZGE2OTNlZWJiZjI3MzI3MWQKK3BsYXRmb3JtL2V4dGVybmFsL2xpYnVud2luZCA5NzI0ZDI0NDhlYjc2MDQ1M2NiMTExYjNlODk1MTM2Y2RjMmQ4MWQwCitwbGF0Zm9ybS9leHRlcm5hbC9saWJ1bndpbmRfbGx2bSA1ZGVkYjNjMWMyNjY4MDJmMzI4YmU1ODcyMGFkZjczNmJmYTM4NzYyCitwbGF0Zm9ybS9leHRlcm5hbC9sbHZtIGQzMjIxZmNkY2UwNjQxNDg4ODYwMzQ1MjdhMTlkYmQ3Nzc0M2Y5ZTIKK3BsYXRmb3JtL2V4dGVybmFsL2x6bWEgMTdkZGE1NmYxMmQ2NzRlMjIyNjZjMmFhZGZjY2UxYzk0NWIyYmIyYgorcGxhdGZvcm0vZXh0ZXJuYWwvb3Blbm1wX2xsdm0gMmFhYWUzZTNkM2Q5NDhlYjE4NjEwODM2MmY1ZGQ5ZjM3ZmQzZTNkYQorcGxhdGZvcm0vbWFuaWZlc3QgZWMyNzY3YjU3MmJiOWMwOTI2OGFjMmUzZmU3Mjc4OTNiZTk4YzViNAorcGxhdGZvcm0vcHJlYnVpbHRzL2J1aWxkLXRvb2xzIDJmYmQ2NDhlMmU1M2QwYWUzMTBmMmJlOTAzZWY0YjUwODZiMzUxMTkKK3BsYXRmb3JtL3ByZWJ1aWx0cy9jbGFuZy9ob3N0L2Rhcndpbi14ODYgNmRhN2FkZWNlYzAyZTg2NmE0OWQ3YWZjZGYwZDAzOWFiNmM5YjIzZAorcGxhdGZvcm0vcHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2IDk5MDI5ZDZjYjc3Nzc1N2VjOWIxNTAxMWFiMzY5ZWIzZWQxOWFhYjYKK3BsYXRmb3JtL3ByZWJ1aWx0cy9jbGFuZy9ob3N0L3dpbmRvd3MteDg2IGJhNTFiZjdkODU0YjgwOGEyYWNiMTdlMDQ1YzE3MWU2ZTBiOTQ2ZjgKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hYXJjaDY0L2FhcmNoNjQtbGludXgtYW5kcm9pZC00LjkgNmJmMTUzZGYzMDgxMzNmMGFlZGE0ZjQ3Mzg1MzdiYmVjYTdmMjUzYQorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2FybS9hcm0tZWFiaS00LjggNmQwOGNhOWY0NWZmNjg1NjQ4ZmQxM2M3NWJmNWNhYzRiMTFjMTliYgorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2FybS9hcm0tbGludXgtYW5kcm9pZGVhYmktNC45IGQ2MTBjMDhmOTBlZTJlMGQ1MjljYjIzNjBhYzAzYjI0OWUwMzdlMTIKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9ob3N0L2hlYWRlcnMgNGFjNGY3Y2M0MWNmM2M5ZTM2ZmMzZDZjZjM3ZmQxY2ZhOTU4N2E2OAorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2hvc3QvaTY4Ni1hcHBsZS1kYXJ3aW4tNC4yLjEgZWM1YWE2NmFhYTQ5NjRjMjc1NjRkMGVjODRkYzFmMThhMmQ3MmI3ZQorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L21pcHMvbWlwczY0ZWwtbGludXgtYW5kcm9pZC00LjkgMGMwYTcwOTMyMTU0YWFlYTNlMzJkNjE2ZDc5NzE1OTdkYTYwOGVkOAorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L3g4Ni94ODZfNjQtbGludXgtYW5kcm9pZC00LjkgODA1N2JhMWFjNTUzOWU2MjRkZjEwOTM0YmVlMzFjN2VjZTEwMzkzNworcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LWFuZHJvaWQtNC45IDVmMGFhMjdkZTIxZmJjNjA4ZTQ4ZGVmMzY0N2NkY2FlZjA0MjI4MjAKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2FybS9hcm0tZWFiaS00LjggMjZlOTNmNmFmNDdmN2JkM2E5YmViNWMxMDJhNWY0NWUxOWJmYTM4YQorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvYXJtL2FybS1saW51eC1hbmRyb2lkZWFiaS00LjkgYmYwMmY5YjJiNGY5NTVkODc0ZmRhYWNlNzY1ZTQwOGQwYjMxZjFlNworcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvaG9zdC94ODZfNjQtbGludXgtZ2xpYmMyLjExLTQuOCA3YTg4MjQ5MTVhMDViZWY4NTgxZmIxZjYxNGM0ZWVlOTU2NGM0YmEyCitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9ob3N0L3g4Nl82NC1saW51eC1nbGliYzIuMTUtNC44IDczY2E5OTE5NjcyM2Y4MTBkYWQ0MjM5MGQxNTQ2NTQzNTRmNTdjMTYKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2hvc3QveDg2XzY0LXc2NC1taW5ndzMyLTQuOCA5M2NlNmJjMGJkOTdhZTRiYjVmN2U5ZTdlMmE3NTIyNjJhMWVjMTI1CitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9taXBzL21pcHM2NGVsLWxpbnV4LWFuZHJvaWQtNC45IDUzNjVkM2YzNmFjZmI3YjVlZTNjYzcwN2QxNGRmNmZiNDQ0Zjc1NTQKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L3g4Ni94ODZfNjQtbGludXgtYW5kcm9pZC00LjkgZTg5YzA3OWMxYjk3ZTZmMmNiYjE3YmJhYzQ5NDA3NWZkYTgzYzM3NAorcGxhdGZvcm0vcHJlYnVpbHRzL2dvL2Rhcndpbi14ODYgOTYwZjEwZGMyZTlkMDc1ODlkMDVhYjMyYTY5ZTNjZTM3OWE5MTJkYworcGxhdGZvcm0vcHJlYnVpbHRzL2dvL2xpbnV4LXg4NiBhZDgxMWUwOWQ2MjkxNDg2YWRhMTVjMWY3ZTg0OTgyMjI3ZTk5ODhiCitwbGF0Zm9ybS9wcmVidWlsdHMvbmRrIDY2MzFlZjQ5ZjI5Y2VjMzYyYTIwZWFhM2FmNWE5YjFkZjc0MjQ4MmEKK3BsYXRmb3JtL3ByZWJ1aWx0cy9uaW5qYS9kYXJ3aW4teDg2IDAwZjc5ODM0NmRlZGI0YTdhNmE2ZGNjOWFkMzJmZjA5ZDY2ZWUwZGIKK3BsYXRmb3JtL3ByZWJ1aWx0cy9uaW5qYS9saW51eC14ODYgNjM2OWIxOWZjM2ZiZTc2NTYzNmFmNzVkMzk0NjI3ZTJiOTI1OTllZAorcGxhdGZvcm0vcHJlYnVpbHRzL3NkayBmOGI4ZmEzMGI5YjVhMWFmZjEyM2MwZDMwNTMzOGY2NWM4NzMxNzFkCitwbGF0Zm9ybS9zeXN0ZW0vY29yZSA0YmM1MWQxZWE0OGRjZDExZTFiNGRiMDg0MTQ1YzJkMGRlOGRkYmRiCit0b29sY2hhaW4vYmludXRpbHMgMTI5ZGVjM2VkMGUxZmMwN2Y3NWE0MzIyMDE0ZDc3MGNmZDY0MmY0ZApkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90ZXN0L2FhcmNoNjQvYmluL2FzYW5fdGVzdCBiL2NsYW5nLTMzNjI0MzcvdGVzdC9hYXJjaDY0L2Jpbi9hc2FuX3Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmNmMGY4OAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvdGVzdC9hYXJjaDY0L2Jpbi9hc2FuX3Rlc3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90ZXN0L2FybS9iaW4vYXNhbl90ZXN0IGIvY2xhbmctMzM2MjQzNy90ZXN0L2FybS9iaW4vYXNhbl90ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmNWQwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rlc3QvYXJtL2Jpbi9hc2FuX3Rlc3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90ZXN0L2k2ODYvYmluL2FzYW5fdGVzdCBiL2NsYW5nLTMzNjI0MzcvdGVzdC9pNjg2L2Jpbi9hc2FuX3Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDliM2JlOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvdGVzdC9pNjg2L2Jpbi9hc2FuX3Rlc3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90ZXN0L21pcHMvYmluL2FzYW5fdGVzdCBiL2NsYW5nLTMzNjI0MzcvdGVzdC9taXBzL2Jpbi9hc2FuX3Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTFlNDhlMQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvdGVzdC9taXBzL2Jpbi9hc2FuX3Rlc3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90ZXN0L21pcHM2NC9iaW4vYXNhbl90ZXN0IGIvY2xhbmctMzM2MjQzNy90ZXN0L21pcHM2NC9iaW4vYXNhbl90ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkNGU2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rlc3QvbWlwczY0L2Jpbi9hc2FuX3Rlc3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLWJ1aWxkL0NNYWtlTGlzdHMudHh0IGIvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLWJ1aWxkL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzI0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw4MiBAQAorb3B0aW9uKENMQU5HX0lOU1RBTExfU0NBTkJVSUxEICJJbnN0YWxsIHRoZSBzY2FuLWJ1aWxkIHRvb2wiIE9OKQorCitpbmNsdWRlKEdOVUluc3RhbGxEaXJzKQorCitpZiAoV0lOMzIgQU5EIE5PVCBDWUdXSU4pCisgIHNldChCaW5GaWxlcworICAgICAgICBzY2FuLWJ1aWxkLmJhdCkKKyAgc2V0KExpYmV4ZWNGaWxlcworICAgICAgICBjY2MtYW5hbHl6ZXIuYmF0CisgICAgICAgIGMrKy1hbmFseXplci5iYXQpCitlbHNlKCkKKyAgc2V0KEJpbkZpbGVzCisgICAgICAgIHNjYW4tYnVpbGQpCisgIHNldChMaWJleGVjRmlsZXMKKyAgICAgICAgY2NjLWFuYWx5emVyCisgICAgICAgIGMrKy1hbmFseXplcikKKyAgaWYgKEFQUExFKQorICAgIGxpc3QoQVBQRU5EIEJpbkZpbGVzCisgICAgICAgICAgIHNldC14Y29kZS1hbmFseXplcikKKyAgZW5kaWYoKQorZW5kaWYoKQorCitzZXQoTWFuUGFnZXMKKyAgICAgIHNjYW4tYnVpbGQuMSkKKworc2V0KFNoYXJlRmlsZXMKKyAgICAgIHNjYW52aWV3LmNzcworICAgICAgc29ydHRhYmxlLmpzKQorCisKK2lmKENMQU5HX0lOU1RBTExfU0NBTkJVSUxEKQorICBmb3JlYWNoKEJpbkZpbGUgJHtCaW5GaWxlc30pCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L2Jpbi8ke0JpbkZpbGV9CisgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vYmluCisgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2Jpbi8ke0JpbkZpbGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vCisgICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2Jpbi8ke0JpbkZpbGV9KQorICAgIGxpc3QoQVBQRU5EIERlcGVuZHMgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vJHtCaW5GaWxlfSkKKyAgICBpbnN0YWxsKFBST0dSQU1TIGJpbi8ke0JpbkZpbGV9IERFU1RJTkFUSU9OIGJpbikKKyAgZW5kZm9yZWFjaCgpCisKKyAgZm9yZWFjaChMaWJleGVjRmlsZSAke0xpYmV4ZWNGaWxlc30pCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0KKyAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIG1ha2VfZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9saWJleGVjCisgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYmV4ZWMvCisgICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0pCisgICAgbGlzdChBUFBFTkQgRGVwZW5kcyAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0pCisgICAgaW5zdGFsbChQUk9HUkFNUyBsaWJleGVjLyR7TGliZXhlY0ZpbGV9IERFU1RJTkFUSU9OIGxpYmV4ZWMpCisgIGVuZGZvcmVhY2goKQorCisgIGZvcmVhY2goTWFuUGFnZSAke01hblBhZ2VzfSkKKyAgICBhZGRfY3VzdG9tX2NvbW1hbmQoT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMS8ke01hblBhZ2V9CisgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMQorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9tYW4vJHtNYW5QYWdlfQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMS8KKyAgICAgICAgICAgICAgICAgICAgICAgREVQRU5EUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbWFuLyR7TWFuUGFnZX0pCisgICAgbGlzdChBUFBFTkQgRGVwZW5kcyAke0NNQUtFX0JJTkFSWV9ESVJ9LyR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjEvJHtNYW5QYWdlfSkKKyAgICBpbnN0YWxsKFBST0dSQU1TIG1hbi8ke01hblBhZ2V9IERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjEpCisgIGVuZGZvcmVhY2goKQorCisgIGZvcmVhY2goU2hhcmVGaWxlICR7U2hhcmVGaWxlc30pCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tYnVpbGQvJHtTaGFyZUZpbGV9CisgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vc2hhcmUvc2Nhbi1idWlsZAorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zaGFyZS9zY2FuLWJ1aWxkLyR7U2hhcmVGaWxlfQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vc2hhcmUvc2Nhbi1idWlsZC8KKyAgICAgICAgICAgICAgICAgICAgICAgREVQRU5EUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc2hhcmUvc2Nhbi1idWlsZC8ke1NoYXJlRmlsZX0pCisgICAgbGlzdChBUFBFTkQgRGVwZW5kcyAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tYnVpbGQvJHtTaGFyZUZpbGV9KQorICAgIGluc3RhbGwoRklMRVMgc2hhcmUvc2Nhbi1idWlsZC8ke1NoYXJlRmlsZX0gREVTVElOQVRJT04gc2hhcmUvc2Nhbi1idWlsZCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgYWRkX2N1c3RvbV90YXJnZXQoc2Nhbi1idWlsZCBBTEwgREVQRU5EUyAke0RlcGVuZHN9KQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoc2Nhbi1idWlsZCBQUk9QRVJUSUVTIEZPTERFUiAiTWlzYyIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NjYW4tYnVpbGQgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NjYW4tYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzE4MmEyOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2Nhbi1idWlsZApAQCAtMCwwICsxLDE4NDYgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKyMgTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorIworIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKyMKKyMgQSBzY3JpcHQgZGVzaWduZWQgdG8gd3JhcCBhIGJ1aWxkIHNvIHRoYXQgYWxsIGNhbGxzIHRvIGdjYyBhcmUgaW50ZXJjZXB0ZWQKKyMgYW5kIHBpcGVkIHRvIHRoZSBzdGF0aWMgYW5hbHl6ZXIuCisjCisjIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEZpbmRCaW4gcXcoJFJlYWxCaW4pOwordXNlIERpZ2VzdDo6TUQ1OwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEZpbGU6OkZpbmQ7Cit1c2UgRmlsZTo6Q29weSBxdyhjb3B5KTsKK3VzZSBGaWxlOjpQYXRoIHF3KCBybXRyZWUgbWtwYXRoICk7Cit1c2UgVGVybTo6QU5TSUNvbG9yOwordXNlIFRlcm06OkFOU0lDb2xvciBxdyg6Y29uc3RhbnRzKTsKK3VzZSBDd2QgcXcvIGdldGN3ZCBhYnNfcGF0aCAvOwordXNlIFN5czo6SG9zdG5hbWU7Cit1c2UgSGFzaDo6VXRpbCBxdyhsb2NrX2tleXMpOworCitteSAkUHJvZyA9ICJzY2FuLWJ1aWxkIjsKK215ICRCdWlsZE5hbWU7CitteSAkQnVpbGREYXRlOworCitteSAkVEVSTSA9ICRFTlZ7J1RFUk0nfTsKK215ICRVc2VDb2xvciA9IChkZWZpbmVkICRURVJNIGFuZCAkVEVSTSA9fiAneHRlcm0tLipjb2xvcicgYW5kIC10IFNURE9VVAorICAgICAgICAgICAgICAgIGFuZCBkZWZpbmVkICRFTlZ7J1NDQU5fQlVJTERfQ09MT1InfSk7CisKKyMgUG9ydGFiaWxpdHk6IGdldHB3dWlkIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgV2luMzIgKHNlZSBQZXJsIGxhbmd1YWdlCisjIHJlZmVyZW5jZSwgcGVybHBvcnQpLCB1c2UgZ2V0bG9naW4gaW5zdGVhZC4KK215ICRVc2VyTmFtZSA9IEh0bWxFc2NhcGUoZ2V0bG9naW4oKSB8fCBnZXRwd3VpZCgkPCkgfHwgJ3Vua25vd24nKTsKK215ICRIb3N0TmFtZSA9IEh0bWxFc2NhcGUoaG9zdG5hbWUoKSB8fCAndW5rbm93bicpOworbXkgJEN1cnJlbnREaXIgPSBIdG1sRXNjYXBlKGdldGN3ZCgpKTsKKworbXkgJENtZEFyZ3M7CisKK215ICREYXRlID0gbG9jYWx0aW1lKCk7CisKKyMgQ29tbWFuZC1saW5lL2NvbmZpZyBhcmd1bWVudHMuCitteSAlT3B0aW9ucyA9ICgKKyAgVmVyYm9zZSA9PiAwLCAgICAgICAgICAgICAgIyBWZXJib3NlIG91dHB1dCBmcm9tIHRoaXMgc2NyaXB0LgorICBBbmFseXplSGVhZGVycyA9PiAwLAorICBPdXRwdXREaXIgPT4gdW5kZWYsICAgICAgICAjIFBhcmVudCBkaXJlY3RvcnkgdG8gc3RvcmUgSFRNTCBmaWxlcy4KKyAgSHRtbFRpdGxlID0+IGJhc2VuYW1lKCRDdXJyZW50RGlyKS4iIC0gc2Nhbi1idWlsZCByZXN1bHRzIiwKKyAgSWdub3JlRXJyb3JzID0+IDAsICAgICAgICAgIyBJZ25vcmUgYnVpbGQgZXJyb3JzLgorICBWaWV3UmVzdWx0cyA9PiAwLCAgICAgICAgICAjIFZpZXcgcmVzdWx0cyB3aGVuIHRoZSBidWlsZCB0ZXJtaW5hdGVzLgorICBFeGl0U3RhdHVzRm91bmRCdWdzID0+IDAsICAjIEV4aXQgc3RhdHVzIHJlZmxlY3RzIHdoZXRoZXIgYnVncyB3ZXJlIGZvdW5kCisgIEtlZXBFbXB0eSA9PiAwLCAgICAgICAgICAgICMgRG9uJ3QgcmVtb3ZlIG91dHB1dCBkaXJlY3RvcnkgZXZlbiB3aXRoIDAgcmVzdWx0cy4KKyAgRW5hYmxlQ2hlY2tlcnMgPT4ge30sCisgIERpc2FibGVDaGVja2VycyA9PiB7fSwKKyAgVXNlQ0MgPT4gdW5kZWYsICAgICAgICAgICAgIyBDIGNvbXBpbGVyIHRvIHVzZSBmb3IgY29tcGlsYXRpb24uCisgIFVzZUNYWCA9PiB1bmRlZiwgICAgICAgICAgICMgQysrIGNvbXBpbGVyIHRvIHVzZSBmb3IgY29tcGlsYXRpb24uCisgIEFuYWx5emVyVGFyZ2V0ID0+IHVuZGVmLAorICBTdG9yZU1vZGVsID0+IHVuZGVmLAorICBDb25zdHJhaW50c01vZGVsID0+IHVuZGVmLAorICBJbnRlcm5hbFN0YXRzID0+IHVuZGVmLAorICBPdXRwdXRGb3JtYXQgPT4gImh0bWwiLAorICBDb25maWdPcHRpb25zID0+IFtdLCAgICAgICAjIE9wdGlvbnMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBhbmFseXplcidzIC1hbmFseXplci1jb25maWcgZmxhZy4KKyAgUmVwb3J0RmFpbHVyZXMgPT4gdW5kZWYsCisgIEFuYWx5emVyU3RhdHMgPT4gMCwKKyAgTWF4TG9vcCA9PiAwLAorICBQbHVnaW5zVG9Mb2FkID0+IFtdLAorICBBbmFseXplckRpc2NvdmVyeU1ldGhvZCA9PiB1bmRlZiwKKyAgT3ZlcnJpZGVDb21waWxlciA9PiAwLCAgICAgICMgVGhlIGZsYWcgY29ycmVzcG9uZGluZyB0byB0aGUgLS1vdmVycmlkZS1jb21waWxlciBjb21tYW5kIGxpbmUgb3B0aW9uLgorICBGb3JjZUFuYWx5emVEZWJ1Z0NvZGUgPT4gMAorKTsKK2xvY2tfa2V5cyglT3B0aW9ucyk7CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIERpYWdub3N0aWNzCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgRGlhZyB7CisgIGlmICgkVXNlQ29sb3IpIHsKKyAgICBwcmludCBCT0xELCBNQUdFTlRBICIkUHJvZzogQF8iOworICAgIHByaW50IFJFU0VUOworICB9CisgIGVsc2UgeworICAgIHByaW50ICIkUHJvZzogQF8iOworICB9Cit9CisKK3N1YiBFcnJvckRpYWcgeworICBpZiAoJFVzZUNvbG9yKSB7CisgICAgcHJpbnQgU1RERVJSIEJPTEQsIFJFRCAiJFByb2c6ICI7CisgICAgcHJpbnQgU1RERVJSIFJFU0VULCBSRUQgQF87CisgICAgcHJpbnQgU1RERVJSIFJFU0VUOworICB9IGVsc2UgeworICAgIHByaW50IFNUREVSUiAiJFByb2c6IEBfIjsKKyAgfQorfQorCitzdWIgRGlhZ0NyYXNoZXMgeworICBteSAkRGlyID0gc2hpZnQ7CisgIERpYWcgKCJUaGUgYW5hbHl6ZXIgZW5jb3VudGVyZWQgcHJvYmxlbXMgb24gc29tZSBzb3VyY2UgZmlsZXMuXG4iKTsKKyAgRGlhZyAoIlByZXByb2Nlc3NlZCB2ZXJzaW9ucyBvZiB0aGVzZSBzb3VyY2VzIHdlcmUgZGVwb3NpdGVkIGluICckRGlyL2ZhaWx1cmVzJy5cbiIpOworICBEaWFnICgiUGxlYXNlIGNvbnNpZGVyIHN1Ym1pdHRpbmcgYSBidWcgcmVwb3J0IHVzaW5nIHRoZXNlIGZpbGVzOlxuIik7CisgIERpYWcgKCIgIGh0dHA6Ly9jbGFuZy1hbmFseXplci5sbHZtLm9yZy9maWxpbmdfYnVncy5odG1sXG4iKQorfQorCitzdWIgRGllRGlhZyB7CisgIGlmICgkVXNlQ29sb3IpIHsKKyAgICBwcmludCBTVERFUlIgQk9MRCwgUkVEICIkUHJvZzogIjsKKyAgICBwcmludCBTVERFUlIgUkVTRVQsIFJFRCBAXzsKKyAgICBwcmludCBTVERFUlIgUkVTRVQ7CisgIH0KKyAgZWxzZSB7CisgICAgcHJpbnQgU1RERVJSICIkUHJvZzogIiwgQF87CisgIH0KKyAgZXhpdCAxOworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBQcmludCBkZWZhdWx0IGNoZWNrZXIgbmFtZXMKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK2lmIChncmVwIC9eLS1oZWxwLWNoZWNrZXJzJC8sIEBBUkdWKSB7CisgICAgbXkgQG9wdGlvbnMgPSBxeCgkMCAtaCk7CisgICAgZm9yZWFjaCAoQG9wdGlvbnMpIHsKKyAgICBuZXh0IHVubGVzcyAvXiBcKy87CisgICAgcy9eXHMqLy87CisgICAgbXkgKCRzaWduLCAkbmFtZSwgQHRleHQpID0gc3BsaXQgJyAnLCAkXzsKKyAgICBwcmludCAkbmFtZSwgJC8gaWYgJHNpZ24gZXEgJysnOworICAgIH0KKyAgICBleGl0IDA7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIERlY2xhcmF0aW9uIG9mIENsYW5nIG9wdGlvbnMuICBQb3B1bGF0ZWQgbGF0ZXIuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitteSAkQ2xhbmc7CitteSAkQ2xhbmdTQjsKK215ICRDbGFuZ0NYWDsKK215ICRDbGFuZ1ZlcnNpb247CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIEdldEhUTUxSdW5EaXIgLSBDb25zdHJ1Y3QgYW4gSFRNTCBkaXJlY3RvcnkgbmFtZSBmb3IgdGhlIGN1cnJlbnQgc3ViLXJ1bi4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBHZXRIVE1MUnVuRGlyIHsKKyAgZGllICJOb3QgZW5vdWdoIGFyZ3VtZW50cy4iIGlmIChAXyA9PSAwKTsKKyAgbXkgJERpciA9IHNoaWZ0IEBfOworICBteSAkVG1wTW9kZSA9IDA7CisgIGlmICghZGVmaW5lZCAkRGlyKSB7CisgICAgJERpciA9ICRFTlZ7J1RNUERJUid9IHx8ICRFTlZ7J1RFTVAnfSB8fCAkRU5WeydUTVAnfSB8fCAiL3RtcCI7CisgICAgJFRtcE1vZGUgPSAxOworICB9CisKKyAgIyBDaG9wIG9mZiBhbnkgdHJhaWxpbmcgJy8nIGNoYXJhY3RlcnMuCisgIHdoaWxlICgkRGlyID1+IC9cLyQvKSB7IGNob3AgJERpcjsgfQorCisgICMgR2V0IGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4KKyAgbXkgQEN1cnJlbnRUaW1lID0gbG9jYWx0aW1lKCk7CisgIG15ICR5ZWFyICA9ICRDdXJyZW50VGltZVs1XSArIDE5MDA7CisgIG15ICRkYXkgICA9ICRDdXJyZW50VGltZVszXTsKKyAgbXkgJG1vbnRoID0gJEN1cnJlbnRUaW1lWzRdICsgMTsKKyAgbXkgJGhvdXIgPSAgJEN1cnJlbnRUaW1lWzJdOworICBteSAkbWluID0gICAkQ3VycmVudFRpbWVbMV07CisgIG15ICRzZWMgPSAgICRDdXJyZW50VGltZVswXTsKKworICBteSAkVGltZVN0cmluZyA9IHNwcmludGYoIiUwMmQlMDJkJTAyZCIsICRob3VyLCAkbWluLCAkc2VjKTsKKyAgbXkgJERhdGVTdHJpbmcgPSBzcHJpbnRmKCIlZC0lMDJkLSUwMmQtJXMtJCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJHllYXIsICRtb250aCwgJGRheSwgJFRpbWVTdHJpbmcpOworCisgICMgRGV0ZXJtaW5lIHRoZSBydW4gbnVtYmVyLgorICBteSAkUnVuTnVtYmVyOworCisgIGlmICgtZCAkRGlyKSB7CisgICAgaWYgKCEgLXIgJERpcikgeworICAgICAgRGllRGlhZygiZGlyZWN0b3J5ICckRGlyJyBleGlzdHMgYnV0IGlzIG5vdCByZWFkYWJsZS5cbiIpOworICAgIH0KKyAgICAjIEl0ZXJhdGUgb3ZlciBhbGwgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCisgICAgbXkgJG1heCA9IDA7CisgICAgb3BlbmRpcihESVIsICREaXIpOworICAgIG15IEBGSUxFUyA9IGdyZXAgeyAtZCAiJERpci8kXyIgfSByZWFkZGlyKERJUik7CisgICAgY2xvc2VkaXIoRElSKTsKKworICAgIGZvcmVhY2ggbXkgJGYgKEBGSUxFUykgeworICAgICAgIyBTdHJpcCB0aGUgcHJlZml4ICckUHJvZy0nIGlmIHdlIGFyZSBkdW1waW5nIGZpbGVzIHRvIC90bXAuCisgICAgICBpZiAoJFRtcE1vZGUpIHsKKyAgICAgICAgbmV4dCBpZiAoISgkZiA9fiAvXiRQcm9nLSguKykvKSk7CisgICAgICAgICRmID0gJDE7CisgICAgICB9CisKKyAgICAgIG15IEB4ID0gc3BsaXQvLS8sICRmOworICAgICAgbmV4dCBpZiAoc2NhbGFyKEB4KSAhPSA0KTsKKyAgICAgIG5leHQgaWYgKCR4WzBdICE9ICR5ZWFyKTsKKyAgICAgIG5leHQgaWYgKCR4WzFdICE9ICRtb250aCk7CisgICAgICBuZXh0IGlmICgkeFsyXSAhPSAkZGF5KTsKKyAgICAgIG5leHQgaWYgKCR4WzNdICE9ICRUaW1lU3RyaW5nKTsKKyAgICAgIG5leHQgaWYgKCR4WzRdICE9ICQkKTsKKworICAgICAgaWYgKCR4WzVdID4gJG1heCkgeworICAgICAgICAkbWF4ID0gJHhbNV07CisgICAgICB9CisgICAgfQorCisgICAgJFJ1bk51bWJlciA9ICRtYXggKyAxOworICB9CisgIGVsc2UgeworCisgICAgaWYgKC14ICREaXIpIHsKKyAgICAgIERpZURpYWcoIickRGlyJyBleGlzdHMgYnV0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbiIpOworICAgIH0KKworICAgIGlmICgkVG1wTW9kZSkgeworICAgICAgRGllRGlhZygiVGhlIGRpcmVjdG9yeSAnL3RtcCcgZG9lcyBub3QgZXhpc3Qgb3IgY2Fubm90IGJlIGFjY2Vzc2VkLlxuIik7CisgICAgfQorCisgICAgIyAkRGlyIGRvZXMgbm90IGV4aXN0LiAgSXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgdGhlCisgICAgIyBjbGFuZyBkcml2ZXIuICBTZXQgdGhlIHJ1biBudW1iZXIgdG8gMS4KKworICAgICRSdW5OdW1iZXIgPSAxOworICB9CisKKyAgZGllICJSdW5OdW1iZXIgbXVzdCBiZSBkZWZpbmVkISIgaWYgKCFkZWZpbmVkICRSdW5OdW1iZXIpOworCisgICMgQXBwZW5kIHRoZSBydW4gbnVtYmVyLgorICBteSAkTmV3RGlyOworICBpZiAoJFRtcE1vZGUpIHsKKyAgICAkTmV3RGlyID0gIiREaXIvJFByb2ctJERhdGVTdHJpbmctJFJ1bk51bWJlciI7CisgIH0KKyAgZWxzZSB7CisgICAgJE5ld0RpciA9ICIkRGlyLyREYXRlU3RyaW5nLSRSdW5OdW1iZXIiOworICB9CisKKyAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGluIG9yZGVyIHRvIGF2b2lkIGhpamFjay4KKyAgaWYgKC1lICROZXdEaXIpIHsKKyAgICAgIERpZURpYWcoIlRoZSBkaXJlY3RvcnkgJyROZXdEaXInIGFscmVhZHkgZXhpc3RzLlxuIik7CisgIH0KKworICBta3BhdGgoJE5ld0Rpcik7CisgIHJldHVybiAkTmV3RGlyOworfQorCitzdWIgU2V0SHRtbEVudiB7CisKKyAgZGllICJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiIgaWYgKHNjYWxhcihAXykgIT0gMik7CisKKyAgbXkgJEFyZ3MgPSBzaGlmdDsKKyAgbXkgJERpciA9IHNoaWZ0OworCisgIGRpZSAiTm8gYnVpbGQgY29tbWFuZC4iIGlmIChzY2FsYXIoQCRBcmdzKSA9PSAwKTsKKworICBteSAkQ21kID0gJCRBcmdzWzBdOworCisgIGlmICgkQ21kID1+IC9jb25maWd1cmUvIHx8ICRDbWQgPX4gL2F1dG9nZW4vKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKCRPcHRpb25ze1ZlcmJvc2V9KSB7CisgICAgRGlhZygiRW1pdHRpbmcgcmVwb3J0cyBmb3IgdGhpcyBydW4gdG8gJyREaXInLlxuIik7CisgIH0KKworICAkRU5WeydDQ0NfQU5BTFlaRVJfSFRNTCd9ID0gJERpcjsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgQ29tcHV0ZURpZ2VzdCAtIENvbXB1dGUgYSBkaWdlc3Qgb2YgdGhlIHNwZWNpZmllZCBmaWxlLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIENvbXB1dGVEaWdlc3QgeworICBteSAkRk5hbWUgPSBzaGlmdDsKKyAgRGllRGlhZygiQ2Fubm90IHJlYWQgJEZOYW1lIHRvIGNvbXB1dGUgRGlnZXN0LlxuIikgaWYgKCEgLXIgJEZOYW1lKTsKKworICAjIFVzZSBEaWdlc3Q6Ok1ENS4gIFdlIGRvbid0IGhhdmUgdG8gYmUgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlLiAgV2UncmUKKyAgIyBqdXN0IGxvb2tpbmcgZm9yIGR1cGxpY2F0ZSBmaWxlcyB0aGF0IGNvbWUgZnJvbSBhIG5vbi1tYWxpY2lvdXMgc291cmNlLgorICAjIFdlIHVzZSBEaWdlc3Q6Ok1ENSBiZWNhdXNlIGl0IGlzIGEgc3RhbmRhcmQgUGVybCBtb2R1bGUgdGhhdCBzaG91bGQKKyAgIyBjb21lIGJ1bmRsZWQgb24gbW9zdCBzeXN0ZW1zLgorICBvcGVuKEZJTEUsICRGTmFtZSkgb3IgRGllRGlhZygiQ2Fubm90IG9wZW4gJEZOYW1lIHdoZW4gY29tcHV0aW5nIERpZ2VzdC5cbiIpOworICBiaW5tb2RlIEZJTEU7CisgIG15ICRSZXN1bHQgPSBEaWdlc3Q6Ok1ENS0+bmV3LT5hZGRmaWxlKCpGSUxFKS0+aGV4ZGlnZXN0OworICBjbG9zZShGSUxFKTsKKworICAjIFJldHVybiB0aGUgZGlnZXN0LgorICByZXR1cm4gJFJlc3VsdDsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgIFVwZGF0ZVByZWZpeCAtIENvbXB1dGUgdGhlIGNvbW1vbiBwcmVmaXggb2YgZmlsZXMuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitteSAkUHJlZml4OworCitzdWIgVXBkYXRlUHJlZml4IHsKKyAgbXkgJHggPSBzaGlmdDsKKyAgbXkgJHkgPSBiYXNlbmFtZSgkeCk7CisgICR4ID1+IHMvXFEkeVxFJC8vOworCisgIGlmICghZGVmaW5lZCAkUHJlZml4KSB7CisgICAgJFByZWZpeCA9ICR4OworICAgIHJldHVybjsKKyAgfQorCisgIGNob3AgJFByZWZpeCB3aGlsZSAoISgkeCA9fiAvXlxRJFByZWZpeC8pKTsKK30KKworc3ViIEdldFByZWZpeCB7CisgIHJldHVybiAkUHJlZml4OworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyAgVXBkYXRlSW5GaWxlUGF0aCAtIFVwZGF0ZSB0aGUgcGF0aCBpbiB0aGUgcmVwb3J0IGZpbGUuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgVXBkYXRlSW5GaWxlUGF0aCB7CisgIG15ICRmbmFtZSA9IHNoaWZ0OworICBteSAkcmVnZXggPSBzaGlmdDsKKyAgbXkgJG5ld3RleHQgPSBzaGlmdDsKKworICBvcGVuIChSSU4sICRmbmFtZSkgb3IgZGllICJjYW5ub3Qgb3BlbiAkZm5hbWUiOworICBvcGVuIChST1VULCAiPiIsICIkZm5hbWUudG1wIikgb3IgZGllICJjYW5ub3Qgb3BlbiAkZm5hbWUudG1wIjsKKworICB3aGlsZSAoPFJJTj4pIHsKKyAgICBzLyRyZWdleC8kbmV3dGV4dC87CisgICAgcHJpbnQgUk9VVCAkXzsKKyAgfQorCisgIGNsb3NlIChST1VUKTsKKyAgY2xvc2UgKFJJTik7CisgIHJlbmFtZSgiJGZuYW1lLnRtcCIsICRmbmFtZSkKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgQWRkU3RhdExpbmUgLSBEZWNvZGUgYW5kIGluc2VydCBhIHN0YXRpc3RpY3MgbGluZSBpbnRvIHRoZSBkYXRhYmFzZS4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBBZGRTdGF0TGluZSB7CisgIG15ICRMaW5lICA9IHNoaWZ0OworICBteSAkU3RhdHMgPSBzaGlmdDsKKyAgbXkgJEZpbGUgID0gc2hpZnQ7CisKKyAgcHJpbnQgJExpbmUgLiAiXG4iOworCisgIG15ICRSZWdleCA9IHFyLyguKj8pXCAtPlwgVG90YWxcIENGR0Jsb2NrczpcIChcZCspXCBcfFwgVW5yZWFjaGFibGUKKyAgICAgIFwgQ0ZHQmxvY2tzOlwgKFxkKylcIFx8XCBFeGhhdXN0ZWRcIEJsb2NrOlwgKHllc3xubylcIFx8XCBFbXB0eVwgV29ya0xpc3Q6CisgICAgICBcICh5ZXN8bm8pL3g7CisKKyAgaWYgKCRMaW5lICF+ICRSZWdleCkgeworICAgIHJldHVybjsKKyAgfQorCisgICMgQ3JlYXRlIGEgaGFzaCBvZiB0aGUgaW50ZXJlc3RpbmcgZmllbGRzCisgIG15ICRSb3cgPSB7CisgICAgRmlsZW5hbWUgICAgPT4gJEZpbGUsCisgICAgRnVuY3Rpb24gICAgPT4gJDEsCisgICAgVG90YWwgICAgICAgPT4gJDIsCisgICAgVW5yZWFjaGFibGUgPT4gJDMsCisgICAgQWJvcnRlZCAgICAgPT4gJDQsCisgICAgRW1wdHkgICAgICAgPT4gJDUKKyAgfTsKKworICAjIEFkZCB0aGVtIHRvIHRoZSBzdGF0cyBhcnJheQorICBwdXNoIEAkU3RhdHMsICRSb3c7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIFNjYW5GaWxlIC0gU2NhbiBhIHJlcG9ydCBmaWxlIGZvciB2YXJpb3VzIGlkZW50aWZ5aW5nIGF0dHJpYnV0ZXMuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCisjIFNvbWV0aW1lcyBhIHNvdXJjZSBmaWxlIGlzIHNjYW5uZWQgbW9yZSB0aGFuIG9uY2UsIGFuZCB0aHVzIHByb2R1Y2VzCisjIG11bHRpcGxlIGVycm9yIHJlcG9ydHMuICBXZSB1c2UgYSBjYWNoZSB0byBzb2x2ZSB0aGlzIHByb2JsZW0uCisKK215ICVBbHJlYWR5U2Nhbm5lZDsKKworc3ViIFNjYW5GaWxlIHsKKworICBteSAkSW5kZXggPSBzaGlmdDsKKyAgbXkgJERpciA9IHNoaWZ0OworICBteSAkRk5hbWUgPSBzaGlmdDsKKyAgbXkgJFN0YXRzID0gc2hpZnQ7CisKKyAgIyBDb21wdXRlIGEgZGlnZXN0IGZvciB0aGUgcmVwb3J0IGZpbGUuICBEZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbHJlYWR5CisgICMgc2Nhbm5lZCBhIGZpbGUgdGhhdCBsb29rcyBqdXN0IGxpa2UgaXQuCisKKyAgbXkgJGRpZ2VzdCA9IENvbXB1dGVEaWdlc3QoIiREaXIvJEZOYW1lIik7CisKKyAgaWYgKGRlZmluZWQgJEFscmVhZHlTY2FubmVkeyRkaWdlc3R9KSB7CisgICAgIyBSZWR1bmRhbnQgZmlsZS4gIFJlbW92ZSBpdC4KKyAgICB1bmxpbmsoIiREaXIvJEZOYW1lIik7CisgICAgcmV0dXJuOworICB9CisKKyAgJEFscmVhZHlTY2FubmVkeyRkaWdlc3R9ID0gMTsKKworICAjIEF0IHRoaXMgcG9pbnQgdGhlIHJlcG9ydCBmaWxlIGlzIG5vdCB3b3JsZCByZWFkYWJsZS4gIE1ha2UgaXQgaGFwcGVuLgorICBjaG1vZCgwNjQ0LCAiJERpci8kRk5hbWUiKTsKKworICAjIFNjYW4gdGhlIHJlcG9ydCBmaWxlIGZvciB0YWdzLgorICBvcGVuKElOLCAiJERpci8kRk5hbWUiKSBvciBEaWVEaWFnKCJDYW5ub3Qgb3BlbiAnJERpci8kRk5hbWUnXG4iKTsKKworICBteSAkQnVnVHlwZSAgICAgICAgPSAiIjsKKyAgbXkgJEJ1Z0ZpbGUgICAgICAgID0gIiI7CisgIG15ICRCdWdGdW5jdGlvbiAgICA9ICIiOworICBteSAkQnVnQ2F0ZWdvcnkgICAgPSAiIjsKKyAgbXkgJEJ1Z0Rlc2NyaXB0aW9uID0gIiI7CisgIG15ICRCdWdQYXRoTGVuZ3RoICA9IDE7CisgIG15ICRCdWdMaW5lICAgICAgICA9IDA7CisKKyAgd2hpbGUgKDxJTj4pIHsKKyAgICBsYXN0IGlmICgvPCEtLSBCVUdNRVRBRU5EIC0tPi8pOworCisgICAgaWYgKC88IS0tIEJVR1RZUEUgKC4qKSAtLT4kLykgeworICAgICAgJEJ1Z1R5cGUgPSAkMTsKKyAgICB9CisgICAgZWxzaWYgKC88IS0tIEJVR0ZJTEUgKC4qKSAtLT4kLykgeworICAgICAgJEJ1Z0ZpbGUgPSBhYnNfcGF0aCgkMSk7CisgICAgICBpZiAoIWRlZmluZWQgJEJ1Z0ZpbGUpIHsKKyAgICAgICAgICMgVGhlIGZpbGUgbm8gbG9uZ2VyIGV4aXN0czogdXNlIHRoZSBvcmlnaW5hbCBwYXRoLgorICAgICAgICAgJEJ1Z0ZpbGUgPSAkMTsKKyAgICAgIH0KKyAgICAgIFVwZGF0ZVByZWZpeCgkQnVnRmlsZSk7CisgICAgfQorICAgIGVsc2lmICgvPCEtLSBCVUdQQVRITEVOR1RIICguKikgLS0+JC8pIHsKKyAgICAgICRCdWdQYXRoTGVuZ3RoID0gJDE7CisgICAgfQorICAgIGVsc2lmICgvPCEtLSBCVUdMSU5FICguKikgLS0+JC8pIHsKKyAgICAgICRCdWdMaW5lID0gJDE7CisgICAgfQorICAgIGVsc2lmICgvPCEtLSBCVUdDQVRFR09SWSAoLiopIC0tPiQvKSB7CisgICAgICAkQnVnQ2F0ZWdvcnkgPSAkMTsKKyAgICB9CisgICAgZWxzaWYgKC88IS0tIEJVR0RFU0MgKC4qKSAtLT4kLykgeworICAgICAgJEJ1Z0Rlc2NyaXB0aW9uID0gJDE7CisgICAgfQorICAgIGVsc2lmICgvPCEtLSBGVU5DVElPTk5BTUUgKC4qKSAtLT4kLykgeworICAgICAgJEJ1Z0Z1bmN0aW9uID0gJDE7CisgICAgfQorCisgIH0KKworCisgIGNsb3NlKElOKTsKKworICBpZiAoIWRlZmluZWQgJEJ1Z0NhdGVnb3J5KSB7CisgICAgJEJ1Z0NhdGVnb3J5ID0gIk90aGVyIjsKKyAgfQorCisgICMgRG9uJ3QgYWRkIGludGVybmFsIHN0YXRpc3RpY3MgdG8gdGhlIGJ1ZyByZXBvcnRzCisgIGlmICgkQnVnQ2F0ZWdvcnkgPX4gL3N0YXRpc3RpY3MvaSkgeworICAgIEFkZFN0YXRMaW5lKCRCdWdEZXNjcmlwdGlvbiwgJFN0YXRzLCAkQnVnRmlsZSk7CisgICAgcmV0dXJuOworICB9CisKKyAgcHVzaCBAJEluZGV4LFsgJEZOYW1lLCAkQnVnQ2F0ZWdvcnksICRCdWdUeXBlLCAkQnVnRmlsZSwgJEJ1Z0Z1bmN0aW9uLCAkQnVnTGluZSwKKyAgICAgICAgICAgICAgICAgJEJ1Z1BhdGhMZW5ndGggXTsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgQ29weUZpbGVzIC0gQ29weSByZXNvdXJjZSBmaWxlcyB0byB0YXJnZXQgZGlyZWN0b3J5LgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIENvcHlGaWxlcyB7CisKKyAgbXkgJERpciA9IHNoaWZ0OworCisgIG15ICRKUyA9IEN3ZDo6cmVhbHBhdGgoIiRSZWFsQmluLy4uL3NoYXJlL3NjYW4tYnVpbGQvc29ydHRhYmxlLmpzIik7CisKKyAgRGllRGlhZygiQ2Fubm90IGZpbmQgJ3NvcnR0YWJsZS5qcycuXG4iKQorICAgIGlmICghIC1yICRKUyk7CisKKyAgY29weSgkSlMsICIkRGlyIik7CisKKyAgRGllRGlhZygiQ291bGQgbm90IGNvcHkgJ3NvcnR0YWJsZS5qcycgdG8gJyREaXInLlxuIikKKyAgICBpZiAoISAtciAiJERpci9zb3J0dGFibGUuanMiKTsKKworICBteSAkQ1NTID0gQ3dkOjpyZWFscGF0aCgiJFJlYWxCaW4vLi4vc2hhcmUvc2Nhbi1idWlsZC9zY2Fudmlldy5jc3MiKTsKKworICBEaWVEaWFnKCJDYW5ub3QgZmluZCAnc2NhbnZpZXcuY3NzJy5cbiIpCisgICAgaWYgKCEgLXIgJENTUyk7CisKKyAgY29weSgkQ1NTLCAiJERpciIpOworCisgIERpZURpYWcoIkNvdWxkIG5vdCBjb3B5ICdzY2Fudmlldy5jc3MnIHRvICckRGlyJy5cbiIpCisgICAgaWYgKCEgLXIgJENTUyk7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIENhbGNTdGF0cyAtIENhbGN1bGF0ZXMgdmlzaXRhdGlvbiBzdGF0aXN0aWNzIGFuZCByZXR1cm5zIHRoZSBzdHJpbmcuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgQ2FsY1N0YXRzIHsKKyAgbXkgJFN0YXRzID0gc2hpZnQ7CisKKyAgbXkgJFRvdGFsQmxvY2tzID0gMDsKKyAgbXkgJFVucmVhY2hlZEJsb2NrcyA9IDA7CisgIG15ICRUb3RhbEZ1bmN0aW9ucyA9IHNjYWxhcihAJFN0YXRzKTsKKyAgbXkgJEJsb2NrQWJvcnRlZCA9IDA7CisgIG15ICRXb3JrTGlzdEFib3J0ZWQgPSAwOworICBteSAkQWJvcnRlZCA9IDA7CisKKyAgIyBDYWxjdWxhdGUgdGhlIHVuaXF1ZSBmaWxlcworICBteSAkRmlsZXNIYXNoID0ge307CisKKyAgZm9yZWFjaCBteSAkUm93IChAJFN0YXRzKSB7CisgICAgJEZpbGVzSGFzaC0+eyRSb3ctPntGaWxlbmFtZX19ID0gMTsKKyAgICAkVG90YWxCbG9ja3MgKz0gJFJvdy0+e1RvdGFsfTsKKyAgICAkVW5yZWFjaGVkQmxvY2tzICs9ICRSb3ctPntVbnJlYWNoYWJsZX07CisgICAgJEJsb2NrQWJvcnRlZCsrIGlmICRSb3ctPntBYm9ydGVkfSBlcSAneWVzJzsKKyAgICAkV29ya0xpc3RBYm9ydGVkKysgaWYgJFJvdy0+e0VtcHR5fSBlcSAnbm8nOworICAgICRBYm9ydGVkKysgaWYgJFJvdy0+e0Fib3J0ZWR9IGVxICd5ZXMnIHx8ICRSb3ctPntFbXB0eX0gZXEgJ25vJzsKKyAgfQorCisgIG15ICRUb3RhbEZpbGVzID0gc2NhbGFyKGtleXMoJSRGaWxlc0hhc2gpKTsKKworICAjIENhbGN1bGF0aW9ucworICBteSAkUGVyY2VudEFib3J0ZWQgPSBzcHJpbnRmKCIlLjJmIiwgJEFib3J0ZWQgLyAkVG90YWxGdW5jdGlvbnMgKiAxMDApOworICBteSAkUGVyY2VudEJsb2NrQWJvcnRlZCA9IHNwcmludGYoIiUuMmYiLCAkQmxvY2tBYm9ydGVkIC8gJFRvdGFsRnVuY3Rpb25zCisgICAgICAqIDEwMCk7CisgIG15ICRQZXJjZW50V29ya0xpc3RBYm9ydGVkID0gc3ByaW50ZigiJS4yZiIsICRXb3JrTGlzdEFib3J0ZWQgLworICAgICAgJFRvdGFsRnVuY3Rpb25zICogMTAwKTsKKyAgbXkgJFBlcmNlbnRCbG9ja3NVbnJlYWNoZWQgPSBzcHJpbnRmKCIlLjJmIiwgJFVucmVhY2hlZEJsb2NrcyAvICRUb3RhbEJsb2NrcworICAgICAgKiAxMDApOworCisgIG15ICRTdGF0c1N0cmluZyA9ICJBbmFseXplZCAkVG90YWxCbG9ja3MgYmxvY2tzIGluICRUb3RhbEZ1bmN0aW9ucyBmdW5jdGlvbnMiCisgICAgLiAiIGluICRUb3RhbEZpbGVzIGZpbGVzXG4iCisgICAgLiAiJEFib3J0ZWQgZnVuY3Rpb25zIGFib3J0ZWQgZWFybHkgKCRQZXJjZW50QWJvcnRlZCUpXG4iCisgICAgLiAiJEJsb2NrQWJvcnRlZCBoYWQgYWJvcnRlZCBibG9ja3MgKCRQZXJjZW50QmxvY2tBYm9ydGVkJSlcbiIKKyAgICAuICIkV29ya0xpc3RBYm9ydGVkIGhhZCB1bmZpbmlzaGVkIHdvcmtsaXN0cyAoJFBlcmNlbnRXb3JrTGlzdEFib3J0ZWQlKVxuIgorICAgIC4gIiRVbnJlYWNoZWRCbG9ja3MgYmxvY2tzIHdlcmUgbmV2ZXIgcmVhY2hlZCAoJFBlcmNlbnRCbG9ja3NVbnJlYWNoZWQlKVxuIjsKKworICByZXR1cm4gJFN0YXRzU3RyaW5nOworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBQb3N0cHJvY2VzcyAtIFBvc3Rwcm9jZXNzIHRoZSByZXN1bHRzIG9mIGFuIGFuYWx5c2lzIHNjYW4uCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitteSBAZmlsZXNGb3VuZDsKK215ICRiYXNlRGlyOworc3ViIEZpbGVXYW50ZWQgeworICAgIG15ICRiYXNlRGlyUmVnRXggPSBxdW90ZW1ldGEgJGJhc2VEaXI7CisgICAgbXkgJGZpbGUgPSAkRmlsZTo6RmluZDo6bmFtZTsKKworICAgICMgVGhlIG5hbWUgb2YgdGhlIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IGNsYW5nIGJpbmFyeSAoSFRNTERpYWdub3N0aWNzLmNwcCkKKyAgICBpZiAoJGZpbGUgPX4gL3JlcG9ydC0uKlwuaHRtbCQvKSB7CisgICAgICAgbXkgJHJlbGF0aXZlX2ZpbGUgPSAkZmlsZTsKKyAgICAgICAkcmVsYXRpdmVfZmlsZSA9fiBzLyRiYXNlRGlyUmVnRXgvL2c7CisgICAgICAgcHVzaCBAZmlsZXNGb3VuZCwgJHJlbGF0aXZlX2ZpbGU7CisgICAgfQorfQorCitzdWIgUG9zdHByb2Nlc3MgeworCisgIG15ICREaXIgICAgICAgICAgID0gc2hpZnQ7CisgIG15ICRCYXNlRGlyICAgICAgID0gc2hpZnQ7CisgIG15ICRBbmFseXplclN0YXRzID0gc2hpZnQ7CisgIG15ICRLZWVwRW1wdHkgICAgID0gc2hpZnQ7CisKKyAgZGllICJObyBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIgaWYgKCFkZWZpbmVkICREaXIpOworCisgIGlmICghIC1kICREaXIpIHsKKyAgICBEaWFnKCJObyBidWdzIGZvdW5kLlxuIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAkYmFzZURpciA9ICREaXIgLiAiLyI7CisgIGZpbmQoeyB3YW50ZWQgPT4gXCZGaWxlV2FudGVkLCBmb2xsb3cgPT4gMH0sICREaXIpOworCisgIGlmIChzY2FsYXIoQGZpbGVzRm91bmQpID09IDAgYW5kICEgLWUgIiREaXIvZmFpbHVyZXMiKSB7CisgICAgaWYgKCEgJEtlZXBFbXB0eSkgeworICAgICAgRGlhZygiUmVtb3ZpbmcgZGlyZWN0b3J5ICckRGlyJyBiZWNhdXNlIGl0IGNvbnRhaW5zIG5vIHJlcG9ydHMuXG4iKTsKKyAgICAgIHJtdHJlZSgkRGlyKSBvciBkaWUgIkNhbm5vdCBybXRyZWUgJyREaXInIDogJCEiOworICAgIH0KKyAgICBEaWFnKCJObyBidWdzIGZvdW5kLlxuIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAjIFNjYW4gZWFjaCByZXBvcnQgZmlsZSBhbmQgYnVpbGQgYW4gaW5kZXguCisgIG15IEBJbmRleDsKKyAgbXkgQFN0YXRzOworICBmb3JlYWNoIG15ICRmaWxlIChAZmlsZXNGb3VuZCkgeyBTY2FuRmlsZShcQEluZGV4LCAkRGlyLCAkZmlsZSwgXEBTdGF0cyk7IH0KKworICAjIFNjYW4gdGhlIGZhaWx1cmVzIGRpcmVjdG9yeSBhbmQgdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgLmluZm8gZmlsZXMKKyAgIyB0byB1cGRhdGUgdGhlIGNvbW1vbiBwcmVmaXggZGlyZWN0b3J5LgorICBteSBAZmFpbHVyZXM7CisgIG15IEBhdHRyaWJ1dGVzX2lnbm9yZWQ7CisgIGlmICgtZCAiJERpci9mYWlsdXJlcyIpIHsKKyAgICBvcGVuZGlyKERJUiwgIiREaXIvZmFpbHVyZXMiKTsKKyAgICBAZmFpbHVyZXMgPSBncmVwIHsgL1suXWluZm8udHh0JC8gJiYgIS9hdHRyaWJ1dGVfaWdub3JlZC87IH0gcmVhZGRpcihESVIpOworICAgIGNsb3NlZGlyKERJUik7CisgICAgb3BlbmRpcihESVIsICIkRGlyL2ZhaWx1cmVzIik7CisgICAgQGF0dHJpYnV0ZXNfaWdub3JlZCA9IGdyZXAgeyAvXmF0dHJpYnV0ZV9pZ25vcmVkLzsgfSByZWFkZGlyKERJUik7CisgICAgY2xvc2VkaXIoRElSKTsKKyAgICBmb3JlYWNoIG15ICRmaWxlIChAZmFpbHVyZXMpIHsKKyAgICAgIG9wZW4gSU4sICIkRGlyL2ZhaWx1cmVzLyRmaWxlIiBvciBEaWVEaWFnKCJjYW5ub3Qgb3BlbiAkZmlsZVxuIik7CisgICAgICBteSAkUGF0aCA9IDxJTj47CisgICAgICBpZiAoZGVmaW5lZCAkUGF0aCkgeyBVcGRhdGVQcmVmaXgoJFBhdGgpOyB9CisgICAgICBjbG9zZSBJTjsKKyAgICB9CisgIH0KKworICAjIEdlbmVyYXRlIGFuIGluZGV4Lmh0bWwgZmlsZS4KKyAgbXkgJEZOYW1lID0gIiREaXIvaW5kZXguaHRtbCI7CisgIG9wZW4oT1VULCAiPiIsICRGTmFtZSkgb3IgRGllRGlhZygiQ2Fubm90IGNyZWF0ZSBmaWxlICckRk5hbWUnXG4iKTsKKworICAjIFByaW50IG91dCB0aGUgaGVhZGVyLgorCitwcmludCBPVVQgPDxFTkRURVhUOworPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4ke09wdGlvbnN7SHRtbFRpdGxlfX08L3RpdGxlPgorPGxpbmsgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic2NhbnZpZXcuY3NzIi8+Cis8c2NyaXB0IHNyYz0ic29ydHRhYmxlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBTZXREaXNwbGF5KFJvd0NsYXNzLCBEaXNwbGF5VmFsKQoreworICB2YXIgUm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpOworICBmb3IgKCB2YXIgaSA9IDAgOyBpIDwgUm93cy5sZW5ndGg7ICsraSApIHsKKyAgICBpZiAoUm93c1tpXS5jbGFzc05hbWUgPT0gUm93Q2xhc3MpIHsKKyAgICAgIFJvd3NbaV0uc3R5bGUuZGlzcGxheSA9IERpc3BsYXlWYWw7CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIENvcHlDaGVja2VkU3RhdGVUb0NoZWNrQnV0dG9ucyhTdW1tYXJ5Q2hlY2tCdXR0b24pIHsKKyAgdmFyIElucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOworICBmb3IgKCB2YXIgaSA9IDAgOyBpIDwgSW5wdXRzLmxlbmd0aDsgKytpICkgeworICAgIGlmIChJbnB1dHNbaV0udHlwZSA9PSAiY2hlY2tib3giKSB7CisgICAgICBpZihJbnB1dHNbaV0gIT0gU3VtbWFyeUNoZWNrQnV0dG9uKSB7CisgICAgICAgIElucHV0c1tpXS5jaGVja2VkID0gU3VtbWFyeUNoZWNrQnV0dG9uLmNoZWNrZWQ7CisgICAgICAgIElucHV0c1tpXS5vbmNsaWNrKCk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIHJldHVybk9iakJ5SWQoIGlkICkgeworICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkKKyAgICAgICAgdmFyIHJldHVyblZhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICBlbHNlIGlmIChkb2N1bWVudC5hbGwpCisgICAgICAgIHZhciByZXR1cm5WYXIgPSBkb2N1bWVudC5hbGxbaWRdOworICAgIGVsc2UgaWYgKGRvY3VtZW50LmxheWVycykKKyAgICAgICAgdmFyIHJldHVyblZhciA9IGRvY3VtZW50LmxheWVyc1tpZF07CisgICAgcmV0dXJuIHJldHVyblZhcjsKK30KKwordmFyIE51bVVuY2hlY2tlZCA9IDA7CisKK2Z1bmN0aW9uIFRvZ2dsZURpc3BsYXkoQ2hlY2tCdXR0b24sIENsYXNzTmFtZSkgeworICBpZiAoQ2hlY2tCdXR0b24uY2hlY2tlZCkgeworICAgIFNldERpc3BsYXkoQ2xhc3NOYW1lLCAiIik7CisgICAgaWYgKC0tTnVtVW5jaGVja2VkID09IDApIHsKKyAgICAgIHJldHVybk9iakJ5SWQoIkFsbEJ1Z3NDaGVjayIpLmNoZWNrZWQgPSB0cnVlOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBTZXREaXNwbGF5KENsYXNzTmFtZSwgIm5vbmUiKTsKKyAgICBOdW1VbmNoZWNrZWQrKzsKKyAgICByZXR1cm5PYmpCeUlkKCJBbGxCdWdzQ2hlY2siKS5jaGVja2VkID0gZmFsc2U7CisgIH0KK30KKzwvc2NyaXB0PgorPCEtLSBTVU1NQVJZRU5ESEVBRCAtLT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPiR7T3B0aW9uc3tIdG1sVGl0bGV9fTwvaDE+CisKKzx0YWJsZT4KKzx0cj48dGg+VXNlcjo8L3RoPjx0ZD4ke1VzZXJOYW1lfVxAJHtIb3N0TmFtZX08L3RkPjwvdHI+Cis8dHI+PHRoPldvcmtpbmcgRGlyZWN0b3J5OjwvdGg+PHRkPiR7Q3VycmVudERpcn08L3RkPjwvdHI+Cis8dHI+PHRoPkNvbW1hbmQgTGluZTo8L3RoPjx0ZD4ke0NtZEFyZ3N9PC90ZD48L3RyPgorPHRyPjx0aD5DbGFuZyBWZXJzaW9uOjwvdGg+PHRkPiR7Q2xhbmdWZXJzaW9ufTwvdGQ+PC90cj4KKzx0cj48dGg+RGF0ZTo8L3RoPjx0ZD4ke0RhdGV9PC90ZD48L3RyPgorRU5EVEVYVAorCitwcmludCBPVVQgIjx0cj48dGg+VmVyc2lvbjo8L3RoPjx0ZD4ke0J1aWxkTmFtZX0gKCR7QnVpbGREYXRlfSk8L3RkPjwvdHI+XG4iCisgIGlmIChkZWZpbmVkKCRCdWlsZE5hbWUpICYmIGRlZmluZWQoJEJ1aWxkRGF0ZSkpOworCitwcmludCBPVVQgPDxFTkRURVhUOworPC90YWJsZT4KK0VORFRFWFQKKworICBpZiAoc2NhbGFyKEBmaWxlc0ZvdW5kKSkgeworICAgICMgUHJpbnQgb3V0IHRoZSBzdW1tYXJ5IHRhYmxlLgorICAgIG15ICVUb3RhbHM7CisKKyAgICBmb3IgbXkgJHJvdyAoIEBJbmRleCApIHsKKyAgICAgIG15ICRidWdfdHlwZSA9ICgkcm93LT5bMl0pOworICAgICAgbXkgJGJ1Z19jYXRlZ29yeSA9ICgkcm93LT5bMV0pOworICAgICAgbXkgJGtleSA9ICIkYnVnX2NhdGVnb3J5OiRidWdfdHlwZSI7CisKKyAgICAgIGlmICghZGVmaW5lZCAkVG90YWxzeyRrZXl9KSB7ICRUb3RhbHN7JGtleX0gPSBbMSwkYnVnX2NhdGVnb3J5LCRidWdfdHlwZV07IH0KKyAgICAgIGVsc2UgeyAkVG90YWxzeyRrZXl9LT5bMF0rKzsgfQorICAgIH0KKworICAgIHByaW50IE9VVCAiPGgyPkJ1ZyBTdW1tYXJ5PC9oMj4iOworCisgICAgaWYgKGRlZmluZWQgJEJ1aWxkTmFtZSkgeworICAgICAgcHJpbnQgT1VUICJcbjxwPlJlc3VsdHMgaW4gdGhpcyBhbmFseXNpcyBydW4gYXJlIGJhc2VkIG9uIGFuYWx5emVyIGJ1aWxkIDxiPiRCdWlsZE5hbWU8L2I+LjwvcD5cbiIKKyAgICB9CisKKyAgbXkgJFRvdGFsQnVncyA9IHNjYWxhcihASW5kZXgpOworcHJpbnQgT1VUIDw8RU5EVEVYVDsKKzx0YWJsZT4KKzx0aGVhZD48dHI+PHRkPkJ1ZyBUeXBlPC90ZD48dGQ+UXVhbnRpdHk8L3RkPjx0ZCBjbGFzcz0ic29ydHRhYmxlX25vc29ydCI+RGlzcGxheT88L3RkPjwvdHI+PC90aGVhZD4KKzx0ciBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZCI+PHRkIGNsYXNzPSJTVU1NX0RFU0MiPkFsbCBCdWdzPC90ZD48dGQgY2xhc3M9IlEiPiRUb3RhbEJ1Z3M8L3RkPjx0ZD48Y2VudGVyPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IkFsbEJ1Z3NDaGVjayIgb25DbGljaz0iQ29weUNoZWNrZWRTdGF0ZVRvQ2hlY2tCdXR0b25zKHRoaXMpOyIgY2hlY2tlZC8+PC9jZW50ZXI+PC90ZD48L3RyPgorRU5EVEVYVAorCisgICAgbXkgJGxhc3RfY2F0ZWdvcnk7CisKKyAgICBmb3IgbXkgJGtleSAoCisgICAgICBzb3J0IHsKKyAgICAgICAgbXkgJHggPSAkVG90YWxzeyRhfTsKKyAgICAgICAgbXkgJHkgPSAkVG90YWxzeyRifTsKKyAgICAgICAgbXkgJHJlcyA9ICR4LT5bMV0gY21wICR5LT5bMV07CisgICAgICAgICRyZXMgPSAkeC0+WzJdIGNtcCAkeS0+WzJdIGlmICgkcmVzID09IDApOworICAgICAgICAkcmVzCisgICAgICB9IGtleXMgJVRvdGFscyApCisgICAgeworICAgICAgbXkgJHZhbCA9ICRUb3RhbHN7JGtleX07CisgICAgICBteSAkY2F0ZWdvcnkgPSAkdmFsLT5bMV07CisgICAgICBpZiAoIWRlZmluZWQgJGxhc3RfY2F0ZWdvcnkgb3IgJGxhc3RfY2F0ZWdvcnkgbmUgJGNhdGVnb3J5KSB7CisgICAgICAgICRsYXN0X2NhdGVnb3J5ID0gJGNhdGVnb3J5OworICAgICAgICBwcmludCBPVVQgIjx0cj48dGg+JGNhdGVnb3J5PC90aD48dGggY29sc3Bhbj0yPjwvdGg+PC90cj5cbiI7CisgICAgICB9CisgICAgICBteSAkeCA9IGxjICRrZXk7CisgICAgICAkeCA9fiBzL1sgLCciOlwvKCldKy9fL2c7CisgICAgICBwcmludCBPVVQgIjx0cj48dGQgY2xhc3M9XCJTVU1NX0RFU0NcIj4iOworICAgICAgcHJpbnQgT1VUICR2YWwtPlsyXTsKKyAgICAgIHByaW50IE9VVCAiPC90ZD48dGQgY2xhc3M9XCJRXCI+IjsKKyAgICAgIHByaW50IE9VVCAkdmFsLT5bMF07CisgICAgICBwcmludCBPVVQgIjwvdGQ+PHRkPjxjZW50ZXI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG9uQ2xpY2s9XCJUb2dnbGVEaXNwbGF5KHRoaXMsJ2J0XyR4Jyk7XCIgY2hlY2tlZC8+PC9jZW50ZXI+PC90ZD48L3RyPlxuIjsKKyAgICB9CisKKyAgIyBQcmludCBvdXQgdGhlIHRhYmxlIG9mIGVycm9ycy4KKworcHJpbnQgT1VUIDw8RU5EVEVYVDsKKzwvdGFibGU+Cis8aDI+UmVwb3J0czwvaDI+CisKKzx0YWJsZSBjbGFzcz0ic29ydGFibGUiIHN0eWxlPSJ0YWJsZS1sYXlvdXQ6YXV0b21hdGljIj4KKzx0aGVhZD48dHI+CisgIDx0ZD5CdWcgR3JvdXA8L3RkPgorICA8dGQgY2xhc3M9InNvcnR0YWJsZV9zb3J0ZWQiPkJ1ZyBUeXBlPHNwYW4gaWQ9InNvcnR0YWJsZV9zb3J0ZndkaW5kIj4mbmJzcDsmI3gyNUJFOzwvc3Bhbj48L3RkPgorICA8dGQ+RmlsZTwvdGQ+CisgIDx0ZD5GdW5jdGlvbi9NZXRob2Q8L3RkPgorICA8dGQgY2xhc3M9IlEiPkxpbmU8L3RkPgorICA8dGQgY2xhc3M9IlEiPlBhdGggTGVuZ3RoPC90ZD4KKyAgPHRkIGNsYXNzPSJzb3J0dGFibGVfbm9zb3J0Ij48L3RkPgorICA8IS0tIFJFUE9SVEJVR0NPTCAtLT4KKzwvdHI+PC90aGVhZD4KKzx0Ym9keT4KK0VORFRFWFQKKworICAgIG15ICRwcmVmaXggPSBHZXRQcmVmaXgoKTsKKyAgICBteSAkcmVnZXg7CisgICAgbXkgJEluRmlsZVJlZ2V4OworICAgIG15ICRJbkZpbGVQcmVmaXggPSAiRmlsZTo8L3RkPjx0ZD4iOworCisgICAgaWYgKGRlZmluZWQgJHByZWZpeCkgeworICAgICAgJHJlZ2V4ID0gcXIvXlxRJHByZWZpeFxFL2lzOworICAgICAgJEluRmlsZVJlZ2V4ID0gcXIvXFEkSW5GaWxlUHJlZml4JHByZWZpeFxFL2lzOworICAgIH0KKworICAgIGZvciBteSAkcm93ICggc29ydCB7ICRhLT5bMl0gY21wICRiLT5bMl0gfSBASW5kZXggKSB7CisgICAgICBteSAkeCA9ICIkcm93LT5bMV06JHJvdy0+WzJdIjsKKyAgICAgICR4ID0gbGMgJHg7CisgICAgICAkeCA9fiBzL1sgLCciOlwvKCldKy9fL2c7CisKKyAgICAgIG15ICRSZXBvcnRGaWxlID0gJHJvdy0+WzBdOworCisgICAgICBwcmludCBPVVQgIjx0ciBjbGFzcz1cImJ0XyR4XCI+IjsKKyAgICAgIHByaW50IE9VVCAiPHRkIGNsYXNzPVwiREVTQ1wiPiI7CisgICAgICBwcmludCBPVVQgJHJvdy0+WzFdOworICAgICAgcHJpbnQgT1VUICI8L3RkPiI7CisgICAgICBwcmludCBPVVQgIjx0ZCBjbGFzcz1cIkRFU0NcIj4iOworICAgICAgcHJpbnQgT1VUICRyb3ctPlsyXTsKKyAgICAgIHByaW50IE9VVCAiPC90ZD4iOworCisgICAgICAjIFVwZGF0ZSB0aGUgZmlsZSBwcmVmaXguCisgICAgICBteSAkZm5hbWUgPSAkcm93LT5bM107CisKKyAgICAgIGlmIChkZWZpbmVkICRyZWdleCkgeworICAgICAgICAkZm5hbWUgPX4gcy8kcmVnZXgvLzsKKyAgICAgICAgVXBkYXRlSW5GaWxlUGF0aCgiJERpci8kUmVwb3J0RmlsZSIsICRJbkZpbGVSZWdleCwgJEluRmlsZVByZWZpeCkKKyAgICAgIH0KKworICAgICAgcHJpbnQgT1VUICI8dGQ+IjsKKyAgICAgIG15IEBmbmFtZSA9IHNwbGl0IC9cLy8sJGZuYW1lOworICAgICAgaWYgKCQjZm5hbWUgPiAwKSB7CisgICAgICAgIHdoaWxlICgkI2ZuYW1lID49IDApIHsKKyAgICAgICAgICBteSAkeCA9IHNoaWZ0IEBmbmFtZTsKKyAgICAgICAgICBwcmludCBPVVQgJHg7CisgICAgICAgICAgaWYgKCQjZm5hbWUgPj0gMCkgeworICAgICAgICAgICAgcHJpbnQgT1VUICIvIjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBwcmludCBPVVQgJGZuYW1lOworICAgICAgfQorICAgICAgcHJpbnQgT1VUICI8L3RkPiI7CisKKyAgICAgIHByaW50IE9VVCAiPHRkIGNsYXNzPVwiREVTQ1wiPiI7CisgICAgICBwcmludCBPVVQgJHJvdy0+WzRdOworICAgICAgcHJpbnQgT1VUICI8L3RkPiI7CisKKyAgICAgICMgUHJpbnQgb3V0IHRoZSBxdWFudGl0aWVzLgorICAgICAgZm9yIG15ICRqICggNSAuLiA2ICkgeworICAgICAgICBwcmludCBPVVQgIjx0ZCBjbGFzcz1cIlFcIj4kcm93LT5bJGpdPC90ZD4iOworICAgICAgfQorCisgICAgICAjIFByaW50IHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zLgorICAgICAgZm9yIChteSAkaiA9IDc7ICRqIDw9ICQjeyRyb3d9OyArKyRqKSB7CisgICAgICAgIHByaW50IE9VVCAiPHRkPiRyb3ctPlskal08L3RkPiIKKyAgICAgIH0KKworICAgICAgIyBFbWl0IHRoZSAiVmlldyIgbGluay4KKyAgICAgIHByaW50IE9VVCAiPHRkPjxhIGhyZWY9XCIkUmVwb3J0RmlsZSNFbmRQYXRoXCI+VmlldyBSZXBvcnQ8L2E+PC90ZD4iOworCisgICAgICAjIEVtaXQgUkVQT1JUQlVHIG1hcmtlcnMuCisgICAgICBwcmludCBPVVQgIlxuPCEtLSBSRVBPUlRCVUcgaWQ9XCIkUmVwb3J0RmlsZVwiIC0tPlxuIjsKKworICAgICAgIyBFbmQgdGhlIHJvdy4KKyAgICAgIHByaW50IE9VVCAiPC90cj5cbiI7CisgICAgfQorCisgICAgcHJpbnQgT1VUICI8L3Rib2R5PlxuPC90YWJsZT5cblxuIjsKKyAgfQorCisgIGlmIChzY2FsYXIgKEBmYWlsdXJlcykgfHwgc2NhbGFyKEBhdHRyaWJ1dGVzX2lnbm9yZWQpKSB7CisgICAgcHJpbnQgT1VUICI8aDI+QW5hbHl6ZXIgRmFpbHVyZXM8L2gyPlxuIjsKKworICAgIGlmIChzY2FsYXIgQGF0dHJpYnV0ZXNfaWdub3JlZCkgeworICAgICAgcHJpbnQgT1VUICJUaGUgYW5hbHl6ZXIncyBwYXJzZXIgaWdub3JlZCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6PHA+XG4iOworICAgICAgcHJpbnQgT1VUICI8dGFibGU+XG4iOworICAgICAgcHJpbnQgT1VUICI8dGhlYWQ+PHRyPjx0ZD5BdHRyaWJ1dGU8L3RkPjx0ZD5Tb3VyY2UgRmlsZTwvdGQ+PHRkPlByZXByb2Nlc3NlZCBGaWxlPC90ZD48dGQ+U1RERVJSIE91dHB1dDwvdGQ+PC90cj48L3RoZWFkPlxuIjsKKyAgICAgIGZvcmVhY2ggbXkgJGZpbGUgKHNvcnQgQGF0dHJpYnV0ZXNfaWdub3JlZCkgeworICAgICAgICBkaWUgImNhbm5vdCBkZW1hbmdsZSBhdHRyaWJ1dGUgbmFtZVxuIiBpZiAoISAoJGZpbGUgPX4gL15hdHRyaWJ1dGVfaWdub3JlZF8oLispLnR4dC8pKTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZSA9ICQxOworICAgICAgICAjIE9wZW4gdGhlIGF0dHJpYnV0ZSBmaWxlIHRvIGdldCB0aGUgZmlyc3QgZmlsZSB0aGF0IGZhaWxlZC4KKyAgICAgICAgbmV4dCBpZiAoIW9wZW4gKEFUVFIsICIkRGlyL2ZhaWx1cmVzLyRmaWxlIikpOworICAgICAgICBteSAkcHBmaWxlID0gPEFUVFI+OworICAgICAgICBjaG9tcCAkcHBmaWxlOworICAgICAgICBjbG9zZSBBVFRSOworICAgICAgICBuZXh0IGlmICghIC1lICIkRGlyL2ZhaWx1cmVzLyRwcGZpbGUiKTsKKyAgICAgICAgIyBPcGVuIHRoZSBpbmZvIGZpbGUgYW5kIGdldCB0aGUgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUuCisgICAgICAgIG9wZW4gKElORk8sICIkRGlyL2ZhaWx1cmVzLyRwcGZpbGUuaW5mby50eHQiKSBvcgorICAgICAgICAgIGRpZSAiQ2Fubm90IG9wZW4gJERpci9mYWlsdXJlcy8kcHBmaWxlLmluZm8udHh0XG4iOworICAgICAgICBteSAkc3JjZmlsZSA9IDxJTkZPPjsKKyAgICAgICAgY2hvbXAgJHNyY2ZpbGU7CisgICAgICAgIGNsb3NlIChJTkZPKTsKKyAgICAgICAgIyBQcmludCB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHRhYmxlLgorICAgICAgICBteSAkcHJlZml4ID0gR2V0UHJlZml4KCk7CisgICAgICAgIGlmIChkZWZpbmVkICRwcmVmaXgpIHsgJHNyY2ZpbGUgPX4gcy9eXFEkcHJlZml4Ly87IH0KKyAgICAgICAgcHJpbnQgT1VUICI8dHI+PHRkPiRhdHRyaWJ1dGU8L3RkPjx0ZD4kc3JjZmlsZTwvdGQ+PHRkPjxhIGhyZWY9XCJmYWlsdXJlcy8kcHBmaWxlXCI+JHBwZmlsZTwvYT48L3RkPjx0ZD48YSBocmVmPVwiZmFpbHVyZXMvJHBwZmlsZS5zdGRlcnIudHh0XCI+JHBwZmlsZS5zdGRlcnIudHh0PC9hPjwvdGQ+PC90cj5cbiI7CisgICAgICAgIG15ICRwcGZpbGVfY2xhbmcgPSAkcHBmaWxlOworICAgICAgICAkcHBmaWxlX2NsYW5nID1+IHMvWy5dKC4rKSQvLmNsYW5nLiQxLzsKKyAgICAgICAgcHJpbnQgT1VUICIgIDwhLS0gUkVQT1JUUFJPQkxFTSBzcmM9XCIkc3JjZmlsZVwiIGZpbGU9XCJmYWlsdXJlcy8kcHBmaWxlXCIgY2xhbmdmaWxlPVwiZmFpbHVyZXMvJHBwZmlsZV9jbGFuZ1wiIHN0ZGVycj1cImZhaWx1cmVzLyRwcGZpbGUuc3RkZXJyLnR4dFwiIGluZm89XCJmYWlsdXJlcy8kcHBmaWxlLmluZm8udHh0XCIgLS0+XG4iOworICAgICAgfQorICAgICAgcHJpbnQgT1VUICI8L3RhYmxlPlxuIjsKKyAgICB9CisKKyAgICBpZiAoc2NhbGFyIEBmYWlsdXJlcykgeworICAgICAgcHJpbnQgT1VUICI8cD5UaGUgYW5hbHl6ZXIgaGFkIHByb2JsZW1zIHByb2Nlc3NpbmcgdGhlIGZvbGxvd2luZyBmaWxlczo8L3A+XG4iOworICAgICAgcHJpbnQgT1VUICI8dGFibGU+XG4iOworICAgICAgcHJpbnQgT1VUICI8dGhlYWQ+PHRyPjx0ZD5Qcm9ibGVtPC90ZD48dGQ+U291cmNlIEZpbGU8L3RkPjx0ZD5QcmVwcm9jZXNzZWQgRmlsZTwvdGQ+PHRkPlNUREVSUiBPdXRwdXQ8L3RkPjwvdHI+PC90aGVhZD5cbiI7CisgICAgICBmb3JlYWNoIG15ICRmaWxlIChzb3J0IEBmYWlsdXJlcykgeworICAgICAgICAkZmlsZSA9fiAvKC4rKS5pbmZvLnR4dCQvOworICAgICAgICAjIEdldCB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUuCisgICAgICAgIG15ICRwcGZpbGUgPSAkMTsKKyAgICAgICAgIyBPcGVuIHRoZSBpbmZvIGZpbGUgYW5kIGdldCB0aGUgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUuCisgICAgICAgIG9wZW4gKElORk8sICIkRGlyL2ZhaWx1cmVzLyRmaWxlIikgb3IKKyAgICAgICAgICBkaWUgIkNhbm5vdCBvcGVuICREaXIvZmFpbHVyZXMvJGZpbGVcbiI7CisgICAgICAgIG15ICRzcmNmaWxlID0gPElORk8+OworICAgICAgICBjaG9tcCAkc3JjZmlsZTsKKyAgICAgICAgbXkgJHByb2JsZW0gPSA8SU5GTz47CisgICAgICAgIGNob21wICRwcm9ibGVtOworICAgICAgICBjbG9zZSAoSU5GTyk7CisgICAgICAgICMgUHJpbnQgdGhlIGluZm9ybWF0aW9uIGluIHRoZSB0YWJsZS4KKyAgICAgICAgbXkgJHByZWZpeCA9IEdldFByZWZpeCgpOworICAgICAgICBpZiAoZGVmaW5lZCAkcHJlZml4KSB7ICRzcmNmaWxlID1+IHMvXlxRJHByZWZpeC8vOyB9CisgICAgICAgIHByaW50IE9VVCAiPHRyPjx0ZD4kcHJvYmxlbTwvdGQ+PHRkPiRzcmNmaWxlPC90ZD48dGQ+PGEgaHJlZj1cImZhaWx1cmVzLyRwcGZpbGVcIj4kcHBmaWxlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9XCJmYWlsdXJlcy8kcHBmaWxlLnN0ZGVyci50eHRcIj4kcHBmaWxlLnN0ZGVyci50eHQ8L2E+PC90ZD48L3RyPlxuIjsKKyAgICAgICAgbXkgJHBwZmlsZV9jbGFuZyA9ICRwcGZpbGU7CisgICAgICAgICRwcGZpbGVfY2xhbmcgPX4gcy9bLl0oLispJC8uY2xhbmcuJDEvOworICAgICAgICBwcmludCBPVVQgIiAgPCEtLSBSRVBPUlRQUk9CTEVNIHNyYz1cIiRzcmNmaWxlXCIgZmlsZT1cImZhaWx1cmVzLyRwcGZpbGVcIiBjbGFuZ2ZpbGU9XCJmYWlsdXJlcy8kcHBmaWxlX2NsYW5nXCIgc3RkZXJyPVwiZmFpbHVyZXMvJHBwZmlsZS5zdGRlcnIudHh0XCIgaW5mbz1cImZhaWx1cmVzLyRwcGZpbGUuaW5mby50eHRcIiAtLT5cbiI7CisgICAgICB9CisgICAgICBwcmludCBPVVQgIjwvdGFibGU+XG4iOworICAgIH0KKyAgICBwcmludCBPVVQgIjxwPlBsZWFzZSBjb25zaWRlciBzdWJtaXR0aW5nIHByZXByb2Nlc3NlZCBmaWxlcyBhcyA8YSBocmVmPVwiaHR0cDovL2NsYW5nLWFuYWx5emVyLmxsdm0ub3JnL2ZpbGluZ19idWdzLmh0bWxcIj5idWcgcmVwb3J0czwvYT4uIDwhLS0gUkVQT1JUQ1JBU0hFUyAtLT4gPC9wPlxuIjsKKyAgfQorCisgIHByaW50IE9VVCAiPC9ib2R5PjwvaHRtbD5cbiI7CisgIGNsb3NlKE9VVCk7CisgIENvcHlGaWxlcygkRGlyKTsKKworICAjIE1ha2Ugc3VyZSAkRGlyIGFuZCAkQmFzZURpciBhcmUgd29ybGQgcmVhZGFibGUvZXhlY3V0YWJsZS4KKyAgY2htb2QoMDc1NSwgJERpcik7CisgIGlmIChkZWZpbmVkICRCYXNlRGlyKSB7IGNobW9kKDA3NTUsICRCYXNlRGlyKTsgfQorCisgICMgUHJpbnQgc3RhdGlzdGljcworICBwcmludCBDYWxjU3RhdHMoXEBTdGF0cykgaWYgJEFuYWx5emVyU3RhdHM7CisKKyAgbXkgJE51bSA9IHNjYWxhcihASW5kZXgpOworICBpZiAoJE51bSA9PSAxKSB7CisgICAgRGlhZygiJE51bSBidWcgZm91bmQuXG4iKTsKKyAgfSBlbHNlIHsKKyAgICBEaWFnKCIkTnVtIGJ1Z3MgZm91bmQuXG4iKTsKKyAgfQorICBpZiAoJE51bSA+IDAgJiYgLXIgIiREaXIvaW5kZXguaHRtbCIpIHsKKyAgICBEaWFnKCJSdW4gJ3NjYW4tdmlldyAkRGlyJyB0byBleGFtaW5lIGJ1ZyByZXBvcnRzLlxuIik7CisgIH0KKworICBEaWFnQ3Jhc2hlcygkRGlyKSBpZiAoc2NhbGFyIEBmYWlsdXJlcyB8fCBzY2FsYXIgQGF0dHJpYnV0ZXNfaWdub3JlZCk7CisKKyAgcmV0dXJuICROdW07Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIFJ1bkJ1aWxkQ29tbWFuZCAtIFJ1biB0aGUgYnVpbGQgY29tbWFuZC4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBBZGRJZk5vdFByZXNlbnQgeworICBteSAkQXJncyA9IHNoaWZ0OworICBteSAkQXJnID0gc2hpZnQ7CisgIG15ICRmb3VuZCA9IDA7CisKKyAgZm9yZWFjaCBteSAkayAoQCRBcmdzKSB7CisgICAgaWYgKCRrIGVxICRBcmcpIHsKKyAgICAgICRmb3VuZCA9IDE7CisgICAgICBsYXN0OworICAgIH0KKyAgfQorCisgIGlmICgkZm91bmQgPT0gMCkgeworICAgIHB1c2ggQCRBcmdzLCAkQXJnOworICB9Cit9CisKK3N1YiBTZXRFbnYgeworICBteSAkRW52VmFycyA9IHNoaWZ0IEBfOworICBmb3JlYWNoIG15ICR2YXIgKCdDQycsICdDWFgnLCAnQ0xBTkcnLCAnQ0xBTkdfQ1hYJywKKyAgICAgICAgICAgICAgICAgICAnQ0NDX0FOQUxZWkVSX0FOQUxZU0lTJywgJ0NDQ19BTkFMWVpFUl9QTFVHSU5TJywKKyAgICAgICAgICAgICAgICAgICAnQ0NDX0FOQUxZWkVSX0NPTkZJRycpIHsKKyAgICBkaWUgIiR2YXIgaXMgdW5kZWZpbmVkXG4iIGlmICghZGVmaW5lZCAkdmFyKTsKKyAgICAkRU5WeyR2YXJ9ID0gJEVudlZhcnMtPnskdmFyfTsKKyAgfQorICBmb3JlYWNoIG15ICR2YXIgKCdDQ0NfQU5BTFlaRVJfU1RPUkVfTU9ERUwnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfQU5BTFlaRVJfQ09OU1RSQUlOVFNfTU9ERUwnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfQU5BTFlaRVJfSU5URVJOQUxfU1RBVFMnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfQU5BTFlaRVJfT1VUUFVUX0ZPUk1BVCcsCisgICAgICAgICAgICAgICAgICAgJ0NDQ19DQycsCisgICAgICAgICAgICAgICAgICAgJ0NDQ19DWFgnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfUkVQT1JUX0ZBSUxVUkVTJywKKyAgICAgICAgICAgICAgICAgICAnQ0xBTkdfQU5BTFlaRVJfVEFSR0VUJywKKyAgICAgICAgICAgICAgICAgICAnQ0NDX0FOQUxZWkVSX0ZPUkNFX0FOQUxZWkVfREVCVUdfQ09ERScpIHsKKyAgICBteSAkeCA9ICRFbnZWYXJzLT57JHZhcn07CisgICAgaWYgKGRlZmluZWQgJHgpIHsgJEVOVnskdmFyfSA9ICR4IH0KKyAgfQorICBteSAkVmVyYm9zZSA9ICRFbnZWYXJzLT57J1ZFUkJPU0UnfTsKKyAgaWYgKCRWZXJib3NlID49IDIpIHsKKyAgICAkRU5WeydDQ0NfQU5BTFlaRVJfVkVSQk9TRSd9ID0gMTsKKyAgfQorICBpZiAoJFZlcmJvc2UgPj0gMykgeworICAgICRFTlZ7J0NDQ19BTkFMWVpFUl9MT0cnfSA9IDE7CisgIH0KK30KKworc3ViIFJ1blhjb2RlYnVpbGQgeworICBteSAkQXJncyA9IHNoaWZ0OworICBteSAkSWdub3JlRXJyb3JzID0gc2hpZnQ7CisgIG15ICRDQ0FuYWx5emVyID0gc2hpZnQ7CisgIG15ICRDWFhBbmFseXplciA9IHNoaWZ0OworICBteSAkRW52VmFycyA9IHNoaWZ0OworCisgIGlmICgkSWdub3JlRXJyb3JzKSB7CisgICAgQWRkSWZOb3RQcmVzZW50KCRBcmdzLCItUEJYQnVpbGRzQ29udGludWVBZnRlckVycm9ycz1ZRVMiKTsKKyAgfQorCisgICMgRGV0ZWN0IHRoZSB2ZXJzaW9uIG9mIFhjb2RlLiAgSWYgWGNvZGUgNC42IG9yIGhpZ2hlciwgdXNlIG5ldworICAjIGluIHNpdHUgc3VwcG9ydCBmb3IgYW5hbHl6ZXIgaW50ZXJwb3NpdGlvbiB3aXRob3V0IG5lZWRlZCB0byBvdmVycmlkZQorICAjIHRoZSBjb21waWxlci4KKyAgb3BlbihERVRFQ1RfWENPREUsICItfCIsICRBcmdzLT5bMF0sICItdmVyc2lvbiIpIG9yCisgICAgZGllICJlcnJvcjogY2Fubm90IGRldGVjdCB2ZXJzaW9uIG9mIHhjb2RlYnVpbGRcbiI7CisKKyAgbXkgJG9sZEJlaGF2aW9yID0gMTsKKworICB3aGlsZSg8REVURUNUX1hDT0RFPikgeworICAgIGlmICgvXlhjb2RlICguKykkLykgeworICAgICAgbXkgJHZlciA9ICQxOworICAgICAgaWYgKCR2ZXIgPX4gL14oWzAtOV0rWy5dWzAtOV0rKVteMC05XT8vKSB7CisgICAgICAgIGlmICgkMSA+PSA0LjYpIHsKKyAgICAgICAgICAkb2xkQmVoYXZpb3IgPSAwOworICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgY2xvc2UoREVURUNUX1hDT0RFKTsKKworICAjIElmIC0tb3ZlcnJpZGUtY29tcGlsZXIgaXMgZXhwbGljaXRlbHkgcmVxdWVzdGVkLCByZXNvcnQgdG8gdGhlIG9sZAorICAjIGJlaGF2aW9yIHJlZ2FyZGxlc3Mgb2YgWGNvZGUgdmVyc2lvbi4KKyAgaWYgKCRPcHRpb25ze092ZXJyaWRlQ29tcGlsZXJ9KSB7CisgICAgJG9sZEJlaGF2aW9yID0gMTsKKyAgfQorCisgIGlmICgkb2xkQmVoYXZpb3IgPT0gMCkgeworICAgIG15ICRPdXRwdXREaXIgPSAkRW52VmFycy0+eyJPVVRQVVRfRElSIn07CisgICAgbXkgJENMQU5HID0gJEVudlZhcnMtPnsiQ0xBTkcifTsKKyAgICBteSAkT3RoZXJGbGFncyA9ICRFbnZWYXJzLT57IkNDQ19BTkFMWVpFUl9BTkFMWVNJUyJ9OworICAgIHB1c2ggQCRBcmdzLAorICAgICAgICAiUlVOX0NMQU5HX1NUQVRJQ19BTkFMWVpFUj1ZRVMiLAorICAgICAgICAiQ0xBTkdfQU5BTFlaRVJfT1VUUFVUPXBsaXN0LWh0bWwiLAorICAgICAgICAiQ0xBTkdfQU5BTFlaRVJfRVhFQz0kQ0xBTkciLAorICAgICAgICAiQ0xBTkdfQU5BTFlaRVJfT1VUUFVUX0RJUj0kT3V0cHV0RGlyIiwKKyAgICAgICAgIkNMQU5HX0FOQUxZWkVSX09USEVSX0ZMQUdTPSRPdGhlckZsYWdzIjsKKworICAgIHJldHVybiAoc3lzdGVtKEAkQXJncykgPj4gOCk7CisgIH0KKworICAjIERlZmF1bHQgdG8gb2xkIGJlaGF2aW9yIHdoZXJlIHdlIGluc2VydCBhIGJvZ3VzIGNvbXBpbGVyLgorICBTZXRFbnYoJEVudlZhcnMpOworCisgICMgQ2hlY2sgaWYgdXNpbmcgaVBob25lIFNESyAzLjAgKHNpbXVsYXRvcikuICBJZiBzbyB0aGUgY29tcGlsZXIgYmVpbmcKKyAgIyB1c2VkIHNob3VsZCBiZSBnY2MtNC4yLgorICBpZiAoIWRlZmluZWQgJEVOVnsiQ0NDX0NDIn0pIHsKKyAgICBmb3IgKG15ICRpID0gMCA7ICRpIDwgc2NhbGFyKEAkQXJncyk7ICsrJGkpIHsKKyAgICAgIGlmICgkQXJncy0+WyRpXSBlcSAiLXNkayIgJiYgJGkgKyAxIDwgc2NhbGFyKEAkQXJncykpIHsKKyAgICAgICAgaWYgKEAkQXJnc1skaSsxXSA9fiAvXmlwaG9uZXNpbXVsYXRvcjMvKSB7CisgICAgICAgICAgJEVOVnsiQ0NDX0NDIn0gPSAiZ2NjLTQuMiI7CisgICAgICAgICAgJEVOVnsiQ0NDX0NYWCJ9ID0gImcrKy00LjIiOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgIyBEaXNhYmxlIFBDSCBmaWxlcyB1bnRpbCBjbGFuZyBzdXBwb3J0cyB0aGVtLgorICBBZGRJZk5vdFByZXNlbnQoJEFyZ3MsIkdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVI9Tk8iKTsKKworICAjIFdoZW4gJ0NDJyBpcyBzZXQsIHhjb2RlYnVpbGQgdXNlcyBpdCB0byBkbyBhbGwgbGlua2luZywgZXZlbiBpZiB3ZSBhcmUKKyAgIyBsaW5raW5nIEMrKyBvYmplY3QgZmlsZXMuICBTZXQgJ0xEUExVU1BMVVMnIHNvIHRoYXQgeGNvZGVidWlsZCB1c2VzICdnKysnCisgICMgKHZpYSBjKystYW5hbHl6ZXIpIHdoZW4gbGlua2luZyBzdWNoIGZpbGVzLgorICAkRU5WeyJMRFBMVVNQTFVTIn0gPSAkQ1hYQW5hbHl6ZXI7CisKKyAgcmV0dXJuIChzeXN0ZW0oQCRBcmdzKSA+PiA4KTsKK30KKworc3ViIFJ1bkJ1aWxkQ29tbWFuZCB7CisgIG15ICRBcmdzID0gc2hpZnQ7CisgIG15ICRJZ25vcmVFcnJvcnMgPSBzaGlmdDsKKyAgbXkgJENtZCA9ICRBcmdzLT5bMF07CisgIG15ICRDQ0FuYWx5emVyID0gc2hpZnQ7CisgIG15ICRDWFhBbmFseXplciA9IHNoaWZ0OworICBteSAkRW52VmFycyA9IHNoaWZ0OworCisgIGlmICgkQ21kID1+IC9cYnhjb2RlYnVpbGQkLykgeworICAgIHJldHVybiBSdW5YY29kZWJ1aWxkKCRBcmdzLCAkSWdub3JlRXJyb3JzLCAkQ0NBbmFseXplciwgJENYWEFuYWx5emVyLCAkRW52VmFycyk7CisgIH0KKworICAjIFNldHVwIHRoZSBlbnZpcm9ubWVudC4KKyAgU2V0RW52KCRFbnZWYXJzKTsKKworICBpZiAoJENtZCA9fiAvKC4qXC8/Z2NjW15cL10qJCkvIG9yCisgICAgICAkQ21kID1+IC8oLipcLz9jY1teXC9dKiQpLyBvcgorICAgICAgJENtZCA9fiAvKC4qXC8/bGx2bS1nY2NbXlwvXSokKS8gb3IKKyAgICAgICRDbWQgPX4gLyguKlwvP2NsYW5nJCkvIG9yCisgICAgICAkQ21kID1+IC8oLipcLz9jY2MtYW5hbHl6ZXJbXlwvXSokKS8pIHsKKworICAgIGlmICghKCRDbWQgPX4gL2NjYy1hbmFseXplci8pIGFuZCAhZGVmaW5lZCAkRU5WeyJDQ0NfQ0MifSkgeworICAgICAgJEVOVnsiQ0NDX0NDIn0gPSAkMTsKKyAgICB9CisKKyAgICBzaGlmdCBAJEFyZ3M7CisgICAgdW5zaGlmdCBAJEFyZ3MsICRDQ0FuYWx5emVyOworICB9CisgIGVsc2lmICgkQ21kID1+IC8oLipcLz9nXCtcK1teXC9dKiQpLyBvcgorICAgICAgICAkQ21kID1+IC8oLipcLz9jXCtcK1teXC9dKiQpLyBvcgorICAgICAgICAkQ21kID1+IC8oLipcLz9sbHZtLWdcK1wrW15cL10qJCkvIG9yCisgICAgICAgICRDbWQgPX4gLyguKlwvP2NsYW5nXCtcKyQpLyBvcgorICAgICAgICAkQ21kID1+IC8oLipcLz9jXCtcKy1hbmFseXplclteXC9dKiQpLykgeworICAgIGlmICghKCRDbWQgPX4gL2NcK1wrLWFuYWx5emVyLykgYW5kICFkZWZpbmVkICRFTlZ7IkNDQ19DWFgifSkgeworICAgICAgJEVOVnsiQ0NDX0NYWCJ9ID0gJDE7CisgICAgfQorICAgIHNoaWZ0IEAkQXJnczsKKyAgICB1bnNoaWZ0IEAkQXJncywgJENYWEFuYWx5emVyOworICB9CisgIGVsc2lmICgkQ21kIGVxICJtYWtlIiBvciAkQ21kIGVxICJnbWFrZSIgb3IgJENtZCBlcSAibWluZ3czMi1tYWtlIikgeworICAgIEFkZElmTm90UHJlc2VudCgkQXJncywgIkNDPSRDQ0FuYWx5emVyIik7CisgICAgQWRkSWZOb3RQcmVzZW50KCRBcmdzLCAiQ1hYPSRDWFhBbmFseXplciIpOworICAgIGlmICgkSWdub3JlRXJyb3JzKSB7CisgICAgICBBZGRJZk5vdFByZXNlbnQoJEFyZ3MsIi1rIik7CisgICAgICBBZGRJZk5vdFByZXNlbnQoJEFyZ3MsIi1pIik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIChzeXN0ZW0oQCRBcmdzKSA+PiA4KTsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgRGlzcGxheUhlbHAgLSBVdGlsaXR5IGZ1bmN0aW9uIHRvIGRpc3BsYXkgYWxsIGhlbHAgb3B0aW9ucy4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBEaXNwbGF5SGVscCB7CisKKyAgbXkgJEFyZ0NsYW5nTm90Rm91bmRFcnJNc2cgPSBzaGlmdDsKK3ByaW50IDw8RU5EVEVYVDsKK1VTQUdFOiAkUHJvZyBbb3B0aW9uc10gPGJ1aWxkIGNvbW1hbmQ+IFtidWlsZCBvcHRpb25zXQorCitFTkRURVhUCisKKyAgaWYgKGRlZmluZWQgJEJ1aWxkTmFtZSkgeworICAgIHByaW50ICJBTkFMWVpFUiBCVUlMRDogJEJ1aWxkTmFtZSAoJEJ1aWxkRGF0ZSlcblxuIjsKKyAgfQorCitwcmludCA8PEVORFRFWFQ7CitPUFRJT05TOgorCisgLWFuYWx5emUtaGVhZGVycworCisgICBBbHNvIGFuYWx5emUgZnVuY3Rpb25zIGluICNpbmNsdWRlZCBmaWxlcy4gIEJ5IGRlZmF1bHQsIHN1Y2ggZnVuY3Rpb25zCisgICBhcmUgc2tpcHBlZCB1bmxlc3MgdGhleSBhcmUgY2FsbGVkIGJ5IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIG1haW4gc291cmNlIGZpbGUuCisKKyAtLWZvcmNlLWFuYWx5emUtZGVidWctY29kZQorCisgICBUZWxscyBhbmFseXplciB0byBlbmFibGUgYXNzZXJ0aW9ucyBpbiBjb2RlIGV2ZW4gaWYgdGhleSB3ZXJlIGRpc2FibGVkCisgICBkdXJpbmcgY29tcGlsYXRpb24gdG8gZW5hYmxlIG1vcmUgcHJlY2lzZSByZXN1bHRzLgorCisgLW8gPG91dHB1dCBsb2NhdGlvbj4KKworICAgU3BlY2lmaWVzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciBhbmFseXplciByZXBvcnRzLiBTdWJkaXJlY3RvcmllcyB3aWxsIGJlCisgICBjcmVhdGVkIGFzIG5lZWRlZCB0byByZXByZXNlbnQgc2VwYXJhdGUgInJ1bnMiIG9mIHRoZSBhbmFseXplci4gSWYgdGhpcworICAgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIGEgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgaW4gL3RtcCAoVE1QRElSIG9uIE1hYyBPUyBYKQorICAgdG8gc3RvcmUgdGhlIHJlcG9ydHMuCisKKyAtaAorIC0taGVscAorCisgICBEaXNwbGF5IHRoaXMgbWVzc2FnZS4KKworIC1rCisgLS1rZWVwLWdvaW5nCisKKyAgIEFkZCBhICJrZWVwIG9uIGdvaW5nIiBvcHRpb24gdG8gdGhlIHNwZWNpZmllZCBidWlsZCBjb21tYW5kLiBUaGlzIG9wdGlvbgorICAgY3VycmVudGx5IHN1cHBvcnRzIG1ha2UgYW5kIHhjb2RlYnVpbGQuIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBvcHRpb247IG9uZQorICAgY2FuIHNwZWNpZnkgdGhpcyBiZWhhdmlvciBkaXJlY3RseSB1c2luZyBidWlsZCBvcHRpb25zLgorCisgLS1odG1sLXRpdGxlIFt0aXRsZV0KKyAtLWh0bWwtdGl0bGU9W3RpdGxlXQorCisgICBTcGVjaWZ5IHRoZSB0aXRsZSB1c2VkIG9uIGdlbmVyYXRlZCBIVE1MIHBhZ2VzLiBJZiBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQKKyAgIHRpdGxlIHdpbGwgYmUgdXNlZC4KKworIC1wbGlzdAorCisgICBCeSBkZWZhdWx0IHRoZSBvdXRwdXQgb2Ygc2Nhbi1idWlsZCBpcyBhIHNldCBvZiBIVE1MIGZpbGVzLiBUaGlzIG9wdGlvbgorICAgb3V0cHV0cyB0aGUgcmVzdWx0cyBhcyBhIHNldCBvZiAucGxpc3QgZmlsZXMuCisKKyAtcGxpc3QtaHRtbAorCisgICBCeSBkZWZhdWx0IHRoZSBvdXRwdXQgb2Ygc2Nhbi1idWlsZCBpcyBhIHNldCBvZiBIVE1MIGZpbGVzLiBUaGlzIG9wdGlvbgorICAgb3V0cHV0cyB0aGUgcmVzdWx0cyBhcyBhIHNldCBvZiBIVE1MIGFuZCAucGxpc3QgZmlsZXMuCisKKyAtLXN0YXR1cy1idWdzCisKKyAgIEJ5IGRlZmF1bHQsIHRoZSBleGl0IHN0YXR1cyBvZiBzY2FuLWJ1aWxkIGlzIHRoZSBzYW1lIGFzIHRoZSBleGVjdXRlZCBidWlsZAorICAgY29tbWFuZC4gU3BlY2lmeWluZyB0aGlzIG9wdGlvbiBjYXVzZXMgdGhlIGV4aXQgc3RhdHVzIG9mIHNjYW4tYnVpbGQgdG8gYmUgMQorICAgaWYgaXQgZm91bmQgcG90ZW50aWFsIGJ1Z3MgYW5kIDAgb3RoZXJ3aXNlLgorCisgLS11c2UtY2MgW2NvbXBpbGVyIHBhdGhdCisgLS11c2UtY2M9W2NvbXBpbGVyIHBhdGhdCisKKyAgIHNjYW4tYnVpbGQgYW5hbHl6ZXMgYSBwcm9qZWN0IGJ5IGludGVycG9zaW5nIGEgImZha2UgY29tcGlsZXIiLCB3aGljaAorICAgZXhlY3V0ZXMgYSByZWFsIGNvbXBpbGVyIGZvciBjb21waWxhdGlvbiBhbmQgdGhlIHN0YXRpYyBhbmFseXplciBmb3IgYW5hbHlzaXMuCisgICBCZWNhdXNlIG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGludGVycG9zaXRpb24sIHNjYW4tYnVpbGQgZG9lcyBub3QKKyAgIGtub3cgd2hhdCBjb21waWxlciB5b3VyIHByb2plY3Qgbm9ybWFsbHkgdXNlcy4gIEluc3RlYWQsIGl0IHNpbXBseSBvdmVycmlkZXMKKyAgIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYW5kIGd1ZXNzZXMgeW91ciBkZWZhdWx0IGNvbXBpbGVyLgorCisgICBJbiB0aGUgZnV0dXJlLCB0aGlzIGludGVycG9zaXRpb24gbWVjaGFuaXNtIHRvIGJlIGltcHJvdmVkLCBidXQgaWYgeW91IG5lZWQKKyAgIHNjYW4tYnVpbGQgdG8gdXNlIGEgc3BlY2lmaWMgY29tcGlsZXIgZm9yICpjb21waWxhdGlvbiogdGhlbiB5b3UgY2FuIHVzZQorICAgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSBhIHBhdGggdG8gdGhhdCBjb21waWxlci4KKworICAgSWYgdGhlIGdpdmVuIGNvbXBpbGVyIGlzIGEgY3Jvc3MgY29tcGlsZXIsIHlvdSBtYXkgYWxzbyBuZWVkIHRvIHByb3ZpZGUKKyAgIC0tYW5hbHl6ZXItdGFyZ2V0IG9wdGlvbiB0byBwcm9wZXJseSBhbmFseXplIHRoZSBzb3VyY2UgY29kZSBiZWNhdXNlIHN0YXRpYworICAgYW5hbHl6ZXIgcnVucyBhcyBpZiB0aGUgY29kZSBpcyBjb21waWxlZCBmb3IgdGhlIGhvc3QgbWFjaGluZSBieSBkZWZhdWx0LgorCisgLS11c2UtYysrIFtjb21waWxlciBwYXRoXQorIC0tdXNlLWMrKz1bY29tcGlsZXIgcGF0aF0KKworICAgVGhpcyBpcyB0aGUgc2FtZSBhcyAiLS11c2UtY2MiIGJ1dCBmb3IgQysrIGNvZGUuCisKKyAtLWFuYWx5emVyLXRhcmdldCBbdGFyZ2V0IHRyaXBsZSBuYW1lIGZvciBhbmFseXNpc10KKyAtLWFuYWx5emVyLXRhcmdldD1bdGFyZ2V0IHRyaXBsZSBuYW1lIGZvciBhbmFseXNpc10KKworICAgVGhpcyBwcm92aWRlcyB0YXJnZXQgdHJpcGxlIGluZm9ybWF0aW9uIHRvIGNsYW5nIHN0YXRpYyBhbmFseXplci4KKyAgIEl0IG9ubHkgY2hhbmdlcyB0aGUgdGFyZ2V0IGZvciBhbmFseXNpcyBidXQgZG9lc24ndCBjaGFuZ2UgdGhlIHRhcmdldCBvZiBhCisgICByZWFsIGNvbXBpbGVyIGdpdmVuIGJ5IC0tdXNlLWNjIGFuZCAtLXVzZS1jKysgb3B0aW9ucy4KKworIC12CisKKyAgIEVuYWJsZSB2ZXJib3NlIG91dHB1dCBmcm9tIHNjYW4tYnVpbGQuIEEgc2Vjb25kIGFuZCB0aGlyZCAnLXYnIGluY3JlYXNlcworICAgdmVyYm9zaXR5LgorCisgLVYKKyAtLXZpZXcKKworICAgVmlldyBhbmFseXNpcyByZXN1bHRzIGluIGEgd2ViIGJyb3dzZXIgd2hlbiB0aGUgYnVpbGQgY29tcGxldGVzLgorCitBRFZBTkNFRCBPUFRJT05TOgorCisgLW5vLWZhaWx1cmUtcmVwb3J0cworCisgICBEbyBub3QgY3JlYXRlIGEgJ2ZhaWx1cmVzJyBzdWJkaXJlY3RvcnkgdGhhdCBpbmNsdWRlcyBhbmFseXplciBjcmFzaCByZXBvcnRzCisgICBhbmQgcHJlcHJvY2Vzc2VkIHNvdXJjZSBmaWxlcy4KKworIC1zdGF0cworCisgICBHZW5lcmF0ZXMgdmlzaXRhdGlvbiBzdGF0aXN0aWNzIGZvciB0aGUgcHJvamVjdCBiZWluZyBhbmFseXplZC4KKworIC1tYXhsb29wIDxsb29wIGNvdW50PgorCisgICBTcGVjaWZpeSB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgYmxvY2sgY2FuIGJlIHZpc2l0ZWQgYmVmb3JlIGdpdmluZyB1cC4KKyAgIERlZmF1bHQgaXMgNC4gSW5jcmVhc2UgZm9yIG1vcmUgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSBhdCBhIGNvc3Qgb2Ygc3BlZWQuCisKKyAtaW50ZXJuYWwtc3RhdHMKKworICAgR2VuZXJhdGUgaW50ZXJuYWwgYW5hbHl6ZXIgc3RhdGlzdGljcy4KKworIC0tdXNlLWFuYWx5emVyIFtYY29kZXxwYXRoIHRvIGNsYW5nXQorIC0tdXNlLWFuYWx5emVyPVtYY29kZXxwYXRoIHRvIGNsYW5nXQorCisgICBzY2FuLWJ1aWxkIHVzZXMgdGhlICdjbGFuZycgZXhlY3V0YWJsZSByZWxhdGl2ZSB0byBpdHNlbGYgZm9yIHN0YXRpYworICAgYW5hbHlzaXMuIE9uZSBjYW4gb3ZlcnJpZGUgdGhpcyBiZWhhdmlvciB3aXRoIHRoaXMgb3B0aW9uIGJ5IHVzaW5nIHRoZQorICAgJ2NsYW5nJyBwYWNrYWdlZCB3aXRoIFhjb2RlIChvbiBPUyBYKSBvciBmcm9tIHRoZSBQQVRILgorCisgLS1rZWVwLWVtcHR5CisKKyAgIERvbid0IHJlbW92ZSB0aGUgYnVpbGQgcmVzdWx0cyBkaXJlY3RvcnkgZXZlbiBpZiBubyBpc3N1ZXMgd2VyZSByZXBvcnRlZC4KKworIC0tb3ZlcnJpZGUtY29tcGlsZXIKKyAgIEFsd2F5cyByZXNvcnQgdG8gdGhlIGNjYy1hbmFseXplciBldmVuIHdoZW4gYmV0dGVyIGludGVycG9zaXRpb24gbWV0aG9kcworICAgYXJlIGF2YWlsYWJsZS4KKworIC1hbmFseXplci1jb25maWcgPG9wdGlvbnM+CisKKyAgIFByb3ZpZGUgb3B0aW9ucyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGFuYWx5emVyJ3MgLWFuYWx5emVyLWNvbmZpZyBmbGFnLgorICAgU2V2ZXJhbCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgd2l0aCBjb21tYTogJ2tleTE9dmFsMSxrZXkyPXZhbDInCisKKyAgIEF2YWlsYWJsZSBvcHRpb25zOgorICAgICAqIHN0YWJsZS1yZXBvcnQtZmlsZW5hbWU9dHJ1ZSBvciBmYWxzZSAoZGVmYXVsdCkKKyAgICAgICBTd2l0Y2ggdGhlIHBhZ2UgbmFtaW5nIHRvOgorICAgICAgIHJlcG9ydC08ZmlsZW5hbWU+LTxmdW5jdGlvbi9tZXRob2QgbmFtZT4tPGlkPi5odG1sCisgICAgICAgaW5zdGVhZCBvZiByZXBvcnQtWFhYWFhYLmh0bWwKKworQ09OVFJPTExJTkcgQ0hFQ0tFUlM6CisKKyBBIGRlZmF1bHQgZ3JvdXAgb2YgY2hlY2tlcnMgYXJlIGFsd2F5cyBydW4gdW5sZXNzIGV4cGxpY2l0bHkgZGlzYWJsZWQuCisgQ2hlY2tlcnMgbWF5IGJlIGVuYWJsZWQvZGlzYWJsZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisgLWVuYWJsZS1jaGVja2VyIFtjaGVja2VyIG5hbWVdCisgLWRpc2FibGUtY2hlY2tlciBbY2hlY2tlciBuYW1lXQorCitMT0FESU5HIENIRUNLRVJTOgorCisgTG9hZGluZyBleHRlcm5hbCBjaGVja2VycyB1c2luZyB0aGUgY2xhbmcgcGx1Z2luIGludGVyZmFjZToKKworIC1sb2FkLXBsdWdpbiBbcGx1Z2luIGxpYnJhcnldCitFTkRURVhUCisKKyAgaWYgKGRlZmluZWQgJENsYW5nICYmIC14ICRDbGFuZykgeworICAgICMgUXVlcnkgY2xhbmcgZm9yIGxpc3Qgb2YgY2hlY2tlcnMgdGhhdCBhcmUgZW5hYmxlZC4KKworICAgICMgY3JlYXRlIGEgbGlzdCB0byBsb2FkIHRoZSBwbHVnaW5zIHZpYSB0aGUgJ1hjbGFuZycgY29tbWFuZCBsaW5lCisgICAgIyBhcmd1bWVudAorICAgIG15IEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmVfeGNsYW5nOworICAgIGZvcmVhY2ggbXkgJHBhcmFtICggQHskT3B0aW9uc3tQbHVnaW5zVG9Mb2FkfX0gKSB7CisgICAgICBwdXNoICggQFBsdWdpbkxvYWRDb21tYW5kbGluZV94Y2xhbmcsICItWGNsYW5nIiApOworICAgICAgcHVzaCAoIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmVfeGNsYW5nLCAiLWxvYWQiICk7CisgICAgICBwdXNoICggQFBsdWdpbkxvYWRDb21tYW5kbGluZV94Y2xhbmcsICItWGNsYW5nIiApOworICAgICAgcHVzaCAoIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmVfeGNsYW5nLCAkcGFyYW0gKTsKKyAgICB9CisKKyAgICBteSAlRW5hYmxlZENoZWNrZXJzOworICAgIGZvcmVhY2ggbXkgJGxhbmcgKCJjIiwgIm9iamVjdGl2ZS1jIiwgIm9iamVjdGl2ZS1jKysiLCAiYysrIikgeworICAgICAgbXkgJEV4ZWNMaW5lID0gam9pbignICcsIHFxLyIkQ2xhbmciLywgQFBsdWdpbkxvYWRDb21tYW5kbGluZV94Y2xhbmcsICItLWFuYWx5emUiLCAiLXgiLCAkbGFuZywgIi0iLCAiLSMjIyIsICIyPiYxIiwgInwiKTsKKyAgICAgIG9wZW4oUFMsICRFeGVjTGluZSk7CisgICAgICB3aGlsZSAoPFBTPikgeworICAgICAgICBmb3JlYWNoIG15ICR2YWwgKHNwbGl0IC9ccysvKSB7CisgICAgICAgICAgJHZhbCA9fiBzL1wiLy9nOworICAgICAgICAgIGlmICgkdmFsID1+IC8tYW5hbHl6ZXItY2hlY2tlclw9KFteXHNdKykvKSB7CisgICAgICAgICAgICAkRW5hYmxlZENoZWNrZXJzeyQxfSA9IDE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgIyBRdWVyeSBjbGFuZyBmb3IgY29tcGxldGUgbGlzdCBvZiBjaGVja2Vycy4KKyAgICBteSBAUGx1Z2luTG9hZENvbW1hbmRsaW5lOworICAgIGZvcmVhY2ggbXkgJHBhcmFtICggQHskT3B0aW9uc3tQbHVnaW5zVG9Mb2FkfX0gKSB7CisgICAgICBwdXNoICggQFBsdWdpbkxvYWRDb21tYW5kbGluZSwgIi1sb2FkIiApOworICAgICAgcHVzaCAoIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmUsICRwYXJhbSApOworICAgIH0KKworICAgIG15ICRFeGVjTGluZSA9IGpvaW4oJyAnLCBxcS8iJENsYW5nIi8sICItY2MxIiwgQFBsdWdpbkxvYWRDb21tYW5kbGluZSwgIi1hbmFseXplci1jaGVja2VyLWhlbHAiLCAiMj4mMSIsICJ8Iik7CisgICAgb3BlbihQUywgJEV4ZWNMaW5lKTsKKyAgICBteSAkZm91bmRDaGVja2VycyA9IDA7CisgICAgd2hpbGUgKDxQUz4pIHsKKyAgICAgIGlmICgvQ0hFQ0tFUlM6LykgeworICAgICAgICAkZm91bmRDaGVja2VycyA9IDE7CisgICAgICAgIGxhc3Q7CisgICAgICB9CisgICAgfQorICAgIGlmICghJGZvdW5kQ2hlY2tlcnMpIHsKKyAgICAgIHByaW50ICIgICoqKiBDb3VsZCBub3QgcXVlcnkgQ2xhbmcgZm9yIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjaGVja2Vycy4iOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHByaW50KCJcbkFWQUlMQUJMRSBDSEVDS0VSUzpcblxuIik7CisgICAgICBteSAkc2tpcCA9IDA7CisgICAgICAgd2hpbGUoPFBTPikgeworICAgICAgICBpZiAoL2V4cGVyaW1lbnRhbC8pIHsKKyAgICAgICAgICAkc2tpcCA9IDE7CisgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICBpZiAoJHNraXApIHsKKyAgICAgICAgICBuZXh0IGlmICghL15cc1xzW15cc10vKTsKKyAgICAgICAgICAkc2tpcCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcy9eXHNccy8vOworICAgICAgICBpZiAoL14oW15cc10rKS8pIHsKKyAgICAgICAgICAjIElzIHRoZSBjaGVja2VyIGVuYWJsZWQ/CisgICAgICAgICAgbXkgJGNoZWNrZXIgPSAkMTsKKyAgICAgICAgICBteSAkZW5hYmxlZCA9IDA7CisgICAgICAgICAgbXkgJGFnZ3JlZ2F0ZSA9ICIiOworICAgICAgICAgIGZvcmVhY2ggbXkgJGRvbWFpbiAoc3BsaXQgL1wuLywgJGNoZWNrZXIpIHsKKyAgICAgICAgICAgICRhZ2dyZWdhdGUgLj0gJGRvbWFpbjsKKyAgICAgICAgICAgIGlmICgkRW5hYmxlZENoZWNrZXJzeyRhZ2dyZWdhdGV9KSB7CisgICAgICAgICAgICAgICRlbmFibGVkID0xOworICAgICAgICAgICAgICBsYXN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgIyBhcHBlbmQgYSBkb3QsIGlmIGFuIGFkZGl0aW9uYWwgZG9tYWluIGlzIGFkZGVkIGluIHRoZSBuZXh0IGl0ZXJhdGlvbgorICAgICAgICAgICAgJGFnZ3JlZ2F0ZSAuPSAiLiI7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCRlbmFibGVkKSB7CisgICAgICAgICAgICBwcmludCAiICsgIjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwcmludCAiICAgIjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgcHJpbnQgIiAgICI7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgJF87CisgICAgICB9CisgICAgICBwcmludCAiXG5OT1RFOiBcIitcIiBpbmRpY2F0ZXMgdGhhdCBhbiBhbmFseXNpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG4iOworICAgIH0KKyAgICBjbG9zZSBQUzsKKyAgfQorICBlbHNlIHsKKyAgICBwcmludCAiICAqKiogQ291bGQgbm90IHF1ZXJ5IENsYW5nIGZvciB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY2hlY2tlcnMuXG4iOworICAgIGlmIChkZWZpbmVkICAkQXJnQ2xhbmdOb3RGb3VuZEVyck1zZykgeworICAgICAgcHJpbnQgIiAgKioqIFJlYXNvbjogJEFyZ0NsYW5nTm90Rm91bmRFcnJNc2dcbiI7CisgICAgfQorICB9CisKK3ByaW50IDw8RU5EVEVYVAorCitCVUlMRCBPUFRJT05TCisKKyBZb3UgY2FuIHNwZWNpZnkgYW55IGJ1aWxkIG9wdGlvbiBhY2NlcHRhYmxlIHRvIHRoZSBidWlsZCBjb21tYW5kLgorCitFWEFNUExFCisKKyBzY2FuLWJ1aWxkIC1vIC90bXAvbXlodG1sZGlyIG1ha2UgLWo0CisKK1RoZSBhYm92ZSBleGFtcGxlIGNhdXNlcyBhbmFseXNpcyByZXBvcnRzIHRvIGJlIGRlcG9zaXRlZCBpbnRvIGEgc3ViZGlyZWN0b3J5CitvZiAiL3RtcC9teWh0bWxkaXIiIGFuZCB0byBydW4gIm1ha2UiIHdpdGggdGhlICItajQiIG9wdGlvbi4gQSBkaWZmZXJlbnQKK3N1YmRpcmVjdG9yeSBpcyBjcmVhdGVkIGVhY2ggdGltZSBzY2FuLWJ1aWxkIGFuYWx5emVzIGEgcHJvamVjdC4gVGhlIGFuYWx5emVyCitzaG91bGQgc3VwcG9ydCBtb3N0IHBhcmFsbGVsIGJ1aWxkcywgYnV0IG5vdCBkaXN0cmlidXRlZCBidWlsZHMuCisKK0VORFRFWFQKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgSHRtbEVzY2FwZSAtIEhUTUwgZW50aXR5IGVuY29kZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHNwZWNpYWwgaW4gSFRNTAorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIEh0bWxFc2NhcGUgeworICAjIGNvcHkgYXJndW1lbnQgdG8gbmV3IHZhcmlhYmxlIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIG9yaWdpbmFsCisgIG15ICRhcmcgPSBzaGlmdCB8fCAnJzsKKyAgbXkgJHRtcCA9ICRhcmc7CisgICR0bXAgPX4gcy8mLyZhbXA7L2c7CisgICR0bXAgPX4gcy88LyZsdDsvZzsKKyAgJHRtcCA9fiBzLz4vJmd0Oy9nOworICByZXR1cm4gJHRtcDsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgU2hlbGxFc2NhcGUgLSBiYWNrc2xhc2ggZXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBhcmUgc3BlY2lhbCB0byB0aGUgc2hlbGwKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBTaGVsbEVzY2FwZSB7CisgICMgY29weSBhcmd1bWVudCB0byBuZXcgdmFyaWFibGUgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgb3JpZ2luYWwKKyAgbXkgJGFyZyA9IHNoaWZ0IHx8ICcnOworICBpZiAoJGFyZyA9fiAvWyJcc10vKSB7IHJldHVybiAiJyIgLiAkYXJnIC4gIiciOyB9CisgIHJldHVybiAkYXJnOworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBGaW5kQ2xhbmcgLSBzZWFyY2hlcyBmb3IgJ2NsYW5nJyBleGVjdXRhYmxlLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIEZpbmRDbGFuZyB7CisgIGlmICghZGVmaW5lZCAkT3B0aW9uc3tBbmFseXplckRpc2NvdmVyeU1ldGhvZH0pIHsKKyAgICAkQ2xhbmcgPSBDd2Q6OnJlYWxwYXRoKCIkUmVhbEJpbi9iaW4vY2xhbmciKSBpZiAoLWYgIiRSZWFsQmluL2Jpbi9jbGFuZyIpOworICAgIGlmICghZGVmaW5lZCAkQ2xhbmcgfHwgISAteCAkQ2xhbmcpIHsKKyAgICAgICRDbGFuZyA9IEN3ZDo6cmVhbHBhdGgoIiRSZWFsQmluL2NsYW5nIikgaWYgKC1mICIkUmVhbEJpbi9jbGFuZyIpOworICAgIH0KKyAgICBpZiAoIWRlZmluZWQgJENsYW5nIHx8ICEgLXggJENsYW5nKSB7CisgICAgICByZXR1cm4gImVycm9yOiBDYW5ub3QgZmluZCBhbiBleGVjdXRhYmxlICdjbGFuZycgcmVsYXRpdmUgdG8iIC4KKyAgICAgICAgICAgICAiIHNjYW4tYnVpbGQuIENvbnNpZGVyIHVzaW5nIC0tdXNlLWFuYWx5emVyIHRvIHBpY2sgYSB2ZXJzaW9uIG9mIiAuCisgICAgICAgICAgICAgIiAnY2xhbmcnIHRvIHVzZSBmb3Igc3RhdGljIGFuYWx5c2lzLlxuIjsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaWYgKCRPcHRpb25ze0FuYWx5emVyRGlzY292ZXJ5TWV0aG9kfSA9fiAvXltYeF1jb2RlJC8pIHsKKyAgICAgIG15ICR4Y3J1biA9IGB3aGljaCB4Y3J1bmA7CisgICAgICBjaG9tcCAkeGNydW47CisgICAgICBpZiAoJHhjcnVuIGVxICIiKSB7CisgICAgICAgIHJldHVybiAiQ2Fubm90IGZpbmQgJ3hjcnVuJyB0byBmaW5kICdjbGFuZycgZm9yIGFuYWx5c2lzLlxuIjsKKyAgICAgIH0KKyAgICAgICRDbGFuZyA9IGAkeGNydW4gLXRvb2xjaGFpbiBYY29kZURlZmF1bHQgLWZpbmQgY2xhbmdgOworICAgICAgY2hvbXAgJENsYW5nOworICAgICAgaWYgKCRDbGFuZyBlcSAiIikgeworICAgICAgICByZXR1cm4gIk5vICdjbGFuZycgZXhlY3V0YWJsZSBmb3VuZCBieSAneGNydW4nXG4iOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICRDbGFuZyA9ICRPcHRpb25ze0FuYWx5emVyRGlzY292ZXJ5TWV0aG9kfTsKKyAgICAgIGlmICghZGVmaW5lZCAkQ2xhbmcgb3Igbm90IC14ICRDbGFuZykgeworICAgICAgICByZXR1cm4gIkNhbm5vdCBmaW5kIGFuIGV4ZWN1dGFibGUgY2xhbmcgYXQgJyRPcHRpb25ze0FuYWx5emVyRGlzY292ZXJ5TWV0aG9kfSdcbiI7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiB1bmRlZjsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgUHJvY2VzcyBjb21tYW5kLWxpbmUgYXJndW1lbnRzLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworbXkgJFJlcXVlc3REaXNwbGF5SGVscCA9IDA7CitteSAkRm9yY2VEaXNwbGF5SGVscCA9IDA7CisKK3N1YiBQcm9jZXNzQXJncyB7CisgIG15ICRBcmdzID0gc2hpZnQ7CisgIG15ICROdW1BcmdzID0gMDsKKworICB3aGlsZSAoQCRBcmdzKSB7CisKKyAgICAkTnVtQXJncysrOworCisgICAgIyBTY2FuIGZvciBvcHRpb25zIHdlIHJlY29nbml6ZS4KKworICAgIG15ICRhcmcgPSAkQXJncy0+WzBdOworCisgICAgaWYgKCRhcmcgZXEgIi1oIiBvciAkYXJnIGVxICItLWhlbHAiKSB7CisgICAgICAkUmVxdWVzdERpc3BsYXlIZWxwID0gMTsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgJy1hbmFseXplLWhlYWRlcnMnKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tBbmFseXplSGVhZGVyc30gPSAxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLW8iKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisKKyAgICAgIGlmICghQCRBcmdzKSB7CisgICAgICAgIERpZURpYWcoIictbycgb3B0aW9uIHJlcXVpcmVzIGEgdGFyZ2V0IGRpcmVjdG9yeSBuYW1lLlxuIik7CisgICAgICB9CisKKyAgICAgICMgQ29uc3RydWN0IGFuIGFic29sdXRlIHBhdGguICBVc2VzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAjIGFzIGEgYmFzZSBpZiB0aGUgb3JpZ2luYWwgcGF0aCB3YXMgbm90IGFic29sdXRlLgorICAgICAgbXkgJE91dERpciA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIG1rcGF0aCgkT3V0RGlyKSB1bmxlc3MgKC1lICRPdXREaXIpOyAgIyBhYnNfcGF0aCB3YW50cyBleGlzdGluZyBkaXIKKyAgICAgICRPcHRpb25ze091dHB1dERpcn0gPSBhYnNfcGF0aCgkT3V0RGlyKTsKKworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyA9fiAvXi0taHRtbC10aXRsZSg9KC4rKSk/JC8pIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKworICAgICAgaWYgKCFkZWZpbmVkICQyIHx8ICQyIGVxICcnKSB7CisgICAgICAgIGlmICghQCRBcmdzKSB7CisgICAgICAgICAgRGllRGlhZygiJy0taHRtbC10aXRsZScgb3B0aW9uIHJlcXVpcmVzIGEgc3RyaW5nLlxuIik7CisgICAgICAgIH0KKworICAgICAgICAkT3B0aW9uc3tIdG1sVGl0bGV9ID0gc2hpZnQgQCRBcmdzOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJE9wdGlvbnN7SHRtbFRpdGxlfSA9ICQyOworICAgICAgfQorCisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItayIgb3IgJGFyZyBlcSAiLS1rZWVwLWdvaW5nIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7SWdub3JlRXJyb3JzfSA9IDE7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnID1+IC9eLS11c2UtY2MoPSguKykpPyQvKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICBteSAkY2M7CisKKyAgICAgIGlmICghZGVmaW5lZCAkMiB8fCAkMiBlcSAiIikgeworICAgICAgICBpZiAoIUAkQXJncykgeworICAgICAgICAgIERpZURpYWcoIictLXVzZS1jYycgb3B0aW9uIHJlcXVpcmVzIGEgY29tcGlsZXIgZXhlY3V0YWJsZSBuYW1lLlxuIik7CisgICAgICAgIH0KKyAgICAgICAgJGNjID0gc2hpZnQgQCRBcmdzOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgICRjYyA9ICQyOworICAgICAgfQorCisgICAgICAkT3B0aW9uc3tVc2VDQ30gPSAkY2M7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnID1+IC9eLS11c2UtY1wrXCsoPSguKykpPyQvKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICBteSAkY3h4OworCisgICAgICBpZiAoIWRlZmluZWQgJDIgfHwgJDIgZXEgIiIpIHsKKyAgICAgICAgaWYgKCFAJEFyZ3MpIHsKKyAgICAgICAgICBEaWVEaWFnKCInLS11c2UtYysrJyBvcHRpb24gcmVxdWlyZXMgYSBjb21waWxlciBleGVjdXRhYmxlIG5hbWUuXG4iKTsKKyAgICAgICAgfQorICAgICAgICAkY3h4ID0gc2hpZnQgQCRBcmdzOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgICRjeHggPSAkMjsKKyAgICAgIH0KKworICAgICAgJE9wdGlvbnN7VXNlQ1hYfSA9ICRjeHg7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnID1+IC9eLS1hbmFseXplci10YXJnZXQoPSguKykpPyQvKSB7CisgICAgICBzaGlmdCBAQVJHVjsKKyAgICAgIG15ICRBbmFseXplclRhcmdldDsKKworICAgICAgaWYgKCFkZWZpbmVkICQyIHx8ICQyIGVxICIiKSB7CisgICAgICAgIGlmICghQEFSR1YpIHsKKyAgICAgICAgICBEaWVEaWFnKCInLS1hbmFseXplci10YXJnZXQnIG9wdGlvbiByZXF1aXJlcyBhIHRhcmdldCB0cmlwbGUgbmFtZS5cbiIpOworICAgICAgICB9CisgICAgICAgICRBbmFseXplclRhcmdldCA9IHNoaWZ0IEBBUkdWOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgICRBbmFseXplclRhcmdldCA9ICQyOworICAgICAgfQorCisgICAgICAkT3B0aW9uc3tBbmFseXplclRhcmdldH0gPSAkQW5hbHl6ZXJUYXJnZXQ7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItdiIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze1ZlcmJvc2V9Kys7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItViIgb3IgJGFyZyBlcSAiLS12aWV3IikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7Vmlld1Jlc3VsdHN9ID0gMTsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgIi0tc3RhdHVzLWJ1Z3MiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tFeGl0U3RhdHVzRm91bmRCdWdzfSA9IDE7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItc3RvcmUiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tTdG9yZU1vZGVsfSA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgIi1jb25zdHJhaW50cyIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze0NvbnN0cmFpbnRzTW9kZWx9ID0gc2hpZnQgQCRBcmdzOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLWludGVybmFsLXN0YXRzIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7SW50ZXJuYWxTdGF0c30gPSAxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLXBsaXN0IikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7T3V0cHV0Rm9ybWF0fSA9ICJwbGlzdCI7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItcGxpc3QtaHRtbCIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze091dHB1dEZvcm1hdH0gPSAicGxpc3QtaHRtbCI7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItYW5hbHl6ZXItY29uZmlnIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgcHVzaCBAeyRPcHRpb25ze0NvbmZpZ09wdGlvbnN9fSwgc2hpZnQgQCRBcmdzOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLW5vLWZhaWx1cmUtcmVwb3J0cyIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze1JlcG9ydEZhaWx1cmVzfSA9IDA7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItc3RhdHMiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tBbmFseXplclN0YXRzfSA9IDE7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItbWF4bG9vcCIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze01heExvb3B9ID0gc2hpZnQgQCRBcmdzOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLWVuYWJsZS1jaGVja2VyIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgbXkgJENoZWNrZXIgPSBzaGlmdCBAJEFyZ3M7CisgICAgICAjIFN0b3JlICROdW1BcmdzIHRvIHByZXNlcnZlIHRoZSBvcmRlciB0aGUgY2hlY2tlcnMgd2VyZSBlbmFibGVkLgorICAgICAgJE9wdGlvbnN7RW5hYmxlQ2hlY2tlcnN9eyRDaGVja2VyfSA9ICROdW1BcmdzOworICAgICAgZGVsZXRlICRPcHRpb25ze0Rpc2FibGVDaGVja2Vyc317JENoZWNrZXJ9OworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLWRpc2FibGUtY2hlY2tlciIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgIG15ICRDaGVja2VyID0gc2hpZnQgQCRBcmdzOworICAgICAgIyBTdG9yZSAkTnVtQXJncyB0byBwcmVzZXJ2ZSB0aGUgb3JkZXIgdGhlIGNoZWNrZXJzIHdlcmUgZGlzYWJsZWQuCisgICAgICAkT3B0aW9uc3tEaXNhYmxlQ2hlY2tlcnN9eyRDaGVja2VyfSA9ICROdW1BcmdzOworICAgICAgZGVsZXRlICRPcHRpb25ze0VuYWJsZUNoZWNrZXJzfXskQ2hlY2tlcn07CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItbG9hZC1wbHVnaW4iKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICBwdXNoIEB7JE9wdGlvbnN7UGx1Z2luc1RvTG9hZH19LCBzaGlmdCBAJEFyZ3M7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItLXVzZS1hbmFseXplciIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze0FuYWx5emVyRGlzY292ZXJ5TWV0aG9kfSA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgPX4gL14tLXVzZS1hbmFseXplcj0oLispJC8pIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze0FuYWx5emVyRGlzY292ZXJ5TWV0aG9kfSA9ICQxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLS1rZWVwLWVtcHR5IikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7S2VlcEVtcHR5fSA9IDE7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItLW92ZXJyaWRlLWNvbXBpbGVyIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7T3ZlcnJpZGVDb21waWxlcn0gPSAxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLS1mb3JjZS1hbmFseXplLWRlYnVnLWNvZGUiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tGb3JjZUFuYWx5emVEZWJ1Z0NvZGV9ID0gMTsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgRGllRGlhZygidW5yZWNvZ25pemVkIG9wdGlvbiAnJGFyZydcbiIpIGlmICgkYXJnID1+IC9eLS8pOworCisgICAgJE51bUFyZ3MtLTsKKyAgICBsYXN0OworICB9CisgIHJldHVybiAkTnVtQXJnczsKK30KKworaWYgKCFAQVJHVikgeworICAkRm9yY2VEaXNwbGF5SGVscCA9IDEKK30KKworUHJvY2Vzc0FyZ3MoXEBBUkdWKTsKKyMgQWxsIGFyZ3VtZW50cyBhcmUgbm93IHNoaWZ0ZWQgZnJvbSBAQVJHVi4gVGhlIHJlc3QgaXMgYSBidWlsZCBjb21tYW5kLCBpZiBhbnkuCisKK2lmICghQEFSR1YgYW5kICEkUmVxdWVzdERpc3BsYXlIZWxwKSB7CisgIEVycm9yRGlhZygiTm8gYnVpbGQgY29tbWFuZCBzcGVjaWZpZWQuXG5cbiIpOworICAkRm9yY2VEaXNwbGF5SGVscCA9IDE7Cit9CisKK215ICRDbGFuZ05vdEZvdW5kRXJyTXNnID0gRmluZENsYW5nKCk7CisKK2lmICgkRm9yY2VEaXNwbGF5SGVscCB8fCAkUmVxdWVzdERpc3BsYXlIZWxwKSB7CisgIERpc3BsYXlIZWxwKCRDbGFuZ05vdEZvdW5kRXJyTXNnKTsKKyAgZXhpdCAkRm9yY2VEaXNwbGF5SGVscDsKK30KKworRGllRGlhZygkQ2xhbmdOb3RGb3VuZEVyck1zZykgaWYgKGRlZmluZWQgJENsYW5nTm90Rm91bmRFcnJNc2cpOworCiskQ2xhbmdDWFggPSAkQ2xhbmc7CitpZiAoJENsYW5nICF+IC9cK1wrKFwuZXhlKT8kLykgeworICAjIElmICRDbGFuZyBob2xkcyB0aGUgbmFtZSBvZiB0aGUgY2xhbmcrKyBleGVjdXRhYmxlIHRoZW4gd2UgbGVhdmUKKyAgIyAkQ2xhbmdDWFggYW5kICRDbGFuZyBlcXVhbCwgb3RoZXJ3aXNlIGNvbnN0cnVjdCB0aGUgbmFtZSBvZiB0aGUgY2xhbmcrKworICAjIGV4ZWN1dGFibGUgZnJvbSB0aGUgY2xhbmcgZXhlY3V0YWJsZSBuYW1lLgorCisgICMgRGV0ZXJtaW5lIG9wZXJhdGluZyBzeXN0ZW0gdW5kZXIgd2hpY2ggdGhpcyBjb3B5IG9mIFBlcmwgd2FzIGJ1aWx0LgorICBteSAkSXNXaW5CdWlsZCA9ICgkXk8gPX4vbXN5c3xjeWd3aW58TVNXaW4zMi8pOworICBpZigkSXNXaW5CdWlsZCkgeworICAgICRDbGFuZ0NYWCA9fiBzLy5leGUkLysrLmV4ZS87CisgIH0KKyAgZWxzZSB7CisgICAgJENsYW5nQ1hYID1+IHMvXC1cZCtcLlxkKyQvLzsKKyAgICAkQ2xhbmdDWFggLj0gIisrIjsKKyAgfQorfQorCisjIE1ha2Ugc3VyZSB0byB1c2UgIiIgdG8gaGFuZGxlIHBhdGhzIHdpdGggc3BhY2VzLgorJENsYW5nVmVyc2lvbiA9IEh0bWxFc2NhcGUoYCIkQ2xhbmciIC0tdmVyc2lvbmApOworCisjIERldGVybWluZSB3aGVyZSByZXN1bHRzIGdvLgorJENtZEFyZ3MgPSBIdG1sRXNjYXBlKGpvaW4oJyAnLCBtYXAoU2hlbGxFc2NhcGUoJF8pLCBAQVJHVikpKTsKKworIyBEZXRlcm1pbmUgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBIVE1MIHJlcG9ydHMuCitteSAkQmFzZURpciA9ICRPcHRpb25ze091dHB1dERpcn07CiskT3B0aW9uc3tPdXRwdXREaXJ9ID0gR2V0SFRNTFJ1bkRpcigkT3B0aW9uc3tPdXRwdXREaXJ9KTsKKworIyBEZXRlcm1pbmUgdGhlIGxvY2F0aW9uIG9mIGNjYy1hbmFseXplci4KK215ICRBYnNSZWFsQmluID0gQ3dkOjpyZWFscGF0aCgkUmVhbEJpbik7CitteSAkQ21kID0gIiRBYnNSZWFsQmluLy4uL2xpYmV4ZWMvY2NjLWFuYWx5emVyIjsKK215ICRDbWRDWFggPSAiJEFic1JlYWxCaW4vLi4vbGliZXhlYy9jKystYW5hbHl6ZXIiOworCisjIFBvcnRhYmlsaXR5OiB1c2UgbGVzcyBzdHJpY3QgYnV0IHBvcnRhYmxlIGNoZWNrIC1lIChmaWxlIGV4aXN0cykgaW5zdGVhZCBvZgorIyBub24tcG9ydGFibGUgLXggKGZpbGUgaXMgZXhlY3V0YWJsZSkuIE9uIHNvbWUgd2luZG93cyBwb3J0cyAteCBqdXN0IGNoZWNrcworIyBmaWxlIGV4dGVuc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBmaWxlIGlzIGV4ZWN1dGFibGUgKHNlZSBQZXJsIGxhbmd1YWdlCisjIHJlZmVyZW5jZSwgcGVybHBvcnQpCitpZiAoIWRlZmluZWQgJENtZCB8fCAhIC1lICRDbWQpIHsKKyAgJENtZCA9ICIkQWJzUmVhbEJpbi9jY2MtYW5hbHl6ZXIiOworICBEaWVEaWFnKCInY2NjLWFuYWx5emVyJyBkb2VzIG5vdCBleGlzdCBhdCAnJENtZCdcbiIpIGlmKCEgLWUgJENtZCk7Cit9CitpZiAoIWRlZmluZWQgJENtZENYWCB8fCAhIC1lICRDbWRDWFgpIHsKKyAgJENtZENYWCA9ICIkQWJzUmVhbEJpbi9jKystYW5hbHl6ZXIiOworICBEaWVEaWFnKCInYysrLWFuYWx5emVyJyBkb2VzIG5vdCBleGlzdCBhdCAnJENtZENYWCdcbiIpIGlmKCEgLWUgJENtZENYWCk7Cit9CisKK0RpYWcoIlVzaW5nICckQ2xhbmcnIGZvciBzdGF0aWMgYW5hbHlzaXNcbiIpOworCitTZXRIdG1sRW52KFxAQVJHViwgJE9wdGlvbnN7T3V0cHV0RGlyfSk7CisKK215IEBBbmFseXNlc1RvUnVuOworZm9yZWFjaCAoc29ydCB7ICRPcHRpb25ze0VuYWJsZUNoZWNrZXJzfXskYX0gPD0+ICRPcHRpb25ze0VuYWJsZUNoZWNrZXJzfXskYn0gfSAKKyAgICAgICAgIGtleXMgJXskT3B0aW9uc3tFbmFibGVDaGVja2Vyc319KSB7IAorICAjIFB1c2ggY2hlY2tlcnMgaW4gb3JkZXIgdGhleSB3ZXJlIGVuYWJsZWQuCisgIHB1c2ggQEFuYWx5c2VzVG9SdW4sICItYW5hbHl6ZXItY2hlY2tlciIsICRfOworfQorZm9yZWFjaCAoc29ydCB7ICRPcHRpb25ze0Rpc2FibGVDaGVja2Vyc317JGF9IDw9PiAkT3B0aW9uc3tEaXNhYmxlQ2hlY2tlcnN9eyRifSB9IAorICAgICAgICAga2V5cyAleyRPcHRpb25ze0Rpc2FibGVDaGVja2Vyc319KSB7IAorICAjIFB1c2ggY2hlY2tlcnMgaW4gb3JkZXIgdGhleSB3ZXJlIGRpc2FibGVkLgorICBwdXNoIEBBbmFseXNlc1RvUnVuLCAiLWFuYWx5emVyLWRpc2FibGUtY2hlY2tlciIsICRfOworfQoraWYgKCRPcHRpb25ze0FuYWx5emVIZWFkZXJzfSkgeyBwdXNoIEBBbmFseXNlc1RvUnVuLCAiLWFuYWx5emVyLW9wdC1hbmFseXplLWhlYWRlcnMiOyB9CitpZiAoJE9wdGlvbnN7QW5hbHl6ZXJTdGF0c30pIHsgcHVzaCBAQW5hbHlzZXNUb1J1biwgJy1hbmFseXplci1jaGVja2VyPWRlYnVnLlN0YXRzJzsgfQoraWYgKCRPcHRpb25ze01heExvb3B9ID4gMCkgeyBwdXNoIEBBbmFseXNlc1RvUnVuLCAiLWFuYWx5emVyLW1heC1sb29wICRPcHRpb25ze01heExvb3B9IjsgfQorCisjIERlbGF5IHNldHRpbmcgdXAgb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGNhc2Ugd2UgY2FuIGRvIHRydWUKKyMgaW50ZXJwb3NpdGlvbi4KK215ICRDQ0NfQU5BTFlaRVJfQU5BTFlTSVMgPSBqb2luICcgJywgQEFuYWx5c2VzVG9SdW47CitteSAkQ0NDX0FOQUxZWkVSX1BMVUdJTlMgPSBqb2luICcgJywgbWFwIHsgIi1sb2FkICIuJF8gfSBAeyRPcHRpb25ze1BsdWdpbnNUb0xvYWR9fTsKK215ICRDQ0NfQU5BTFlaRVJfQ09ORklHID0gam9pbiAnICcsIG1hcCB7ICItYW5hbHl6ZXItY29uZmlnICIuJF8gfSBAeyRPcHRpb25ze0NvbmZpZ09wdGlvbnN9fTsKK215ICVFbnZWYXJzID0gKAorICAnQ0MnID0+ICRDbWQsCisgICdDWFgnID0+ICRDbWRDWFgsCisgICdDTEFORycgPT4gJENsYW5nLAorICAnQ0xBTkdfQ1hYJyA9PiAkQ2xhbmdDWFgsCisgICdWRVJCT1NFJyA9PiAkT3B0aW9uc3tWZXJib3NlfSwKKyAgJ0NDQ19BTkFMWVpFUl9BTkFMWVNJUycgPT4gJENDQ19BTkFMWVpFUl9BTkFMWVNJUywKKyAgJ0NDQ19BTkFMWVpFUl9QTFVHSU5TJyA9PiAkQ0NDX0FOQUxZWkVSX1BMVUdJTlMsCisgICdDQ0NfQU5BTFlaRVJfQ09ORklHJyA9PiAkQ0NDX0FOQUxZWkVSX0NPTkZJRywKKyAgJ09VVFBVVF9ESVInID0+ICRPcHRpb25ze091dHB1dERpcn0sCisgICdDQ0NfQ0MnID0+ICRPcHRpb25ze1VzZUNDfSwKKyAgJ0NDQ19DWFgnID0+ICRPcHRpb25ze1VzZUNYWH0sCisgICdDQ0NfUkVQT1JUX0ZBSUxVUkVTJyA9PiAkT3B0aW9uc3tSZXBvcnRGYWlsdXJlc30sCisgICdDQ0NfQU5BTFlaRVJfU1RPUkVfTU9ERUwnID0+ICRPcHRpb25ze1N0b3JlTW9kZWx9LAorICAnQ0NDX0FOQUxZWkVSX0NPTlNUUkFJTlRTX01PREVMJyA9PiAkT3B0aW9uc3tDb25zdHJhaW50c01vZGVsfSwKKyAgJ0NDQ19BTkFMWVpFUl9JTlRFUk5BTF9TVEFUUycgPT4gJE9wdGlvbnN7SW50ZXJuYWxTdGF0c30sCisgICdDQ0NfQU5BTFlaRVJfT1VUUFVUX0ZPUk1BVCcgPT4gJE9wdGlvbnN7T3V0cHV0Rm9ybWF0fSwKKyAgJ0NMQU5HX0FOQUxZWkVSX1RBUkdFVCcgPT4gJE9wdGlvbnN7QW5hbHl6ZXJUYXJnZXR9LAorICAnQ0NDX0FOQUxZWkVSX0ZPUkNFX0FOQUxZWkVfREVCVUdfQ09ERScgPT4gJE9wdGlvbnN7Rm9yY2VBbmFseXplRGVidWdDb2RlfQorKTsKKworIyBSdW4gdGhlIGJ1aWxkLgorbXkgJEV4aXRTdGF0dXMgPSBSdW5CdWlsZENvbW1hbmQoXEBBUkdWLCAkT3B0aW9uc3tJZ25vcmVFcnJvcnN9LCAkQ21kLCAkQ21kQ1hYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJUVudlZhcnMpOworCitpZiAoZGVmaW5lZCAkT3B0aW9uc3tPdXRwdXRGb3JtYXR9KSB7CisgIGlmICgkT3B0aW9uc3tPdXRwdXRGb3JtYXR9ID1+IC9wbGlzdC8pIHsKKyAgICBEaWFnICJBbmFseXNpcyBydW4gY29tcGxldGUuXG4iOworICAgIERpYWcgIkFuYWx5c2lzIHJlc3VsdHMgKHBsaXN0IGZpbGVzKSBkZXBvc2l0ZWQgaW4gJyRPcHRpb25ze091dHB1dERpcn0nXG4iOworICB9CisgIGlmICgkT3B0aW9uc3tPdXRwdXRGb3JtYXR9ID1+IC9odG1sLykgeworICAgICMgUG9zdHByb2Nlc3MgdGhlIEhUTUwgZGlyZWN0b3J5LgorICAgIG15ICROdW1CdWdzID0gUG9zdHByb2Nlc3MoJE9wdGlvbnN7T3V0cHV0RGlyfSwgJEJhc2VEaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uc3tBbmFseXplclN0YXRzfSwgJE9wdGlvbnN7S2VlcEVtcHR5fSk7CisKKyAgICBpZiAoJE9wdGlvbnN7Vmlld1Jlc3VsdHN9IGFuZCAtciAiJE9wdGlvbnN7T3V0cHV0RGlyfS9pbmRleC5odG1sIikgeworICAgICAgRGlhZyAiQW5hbHlzaXMgcnVuIGNvbXBsZXRlLlxuIjsKKyAgICAgIERpYWcgIlZpZXdpbmcgYW5hbHlzaXMgcmVzdWx0cyBpbiAnJE9wdGlvbnN7T3V0cHV0RGlyfScgdXNpbmcgc2Nhbi12aWV3LlxuIjsKKyAgICAgIG15ICRTY2FuVmlldyA9IEN3ZDo6cmVhbHBhdGgoIiRSZWFsQmluL3NjYW4tdmlldyIpOworICAgICAgaWYgKCEgLXggJFNjYW5WaWV3KSB7ICRTY2FuVmlldyA9ICJzY2FuLXZpZXciOyB9CisgICAgICBpZiAoISAteCAkU2NhblZpZXcpIHsgJFNjYW5WaWV3ID0gQ3dkOjpyZWFscGF0aCgiJFJlYWxCaW4vLi4vLi4vc2Nhbi12aWV3L2Jpbi9zY2FuLXZpZXciKTsgfQorICAgICAgZXhlYyAkU2NhblZpZXcsICIkT3B0aW9uc3tPdXRwdXREaXJ9IjsKKyAgICB9CisKKyAgICBpZiAoJE9wdGlvbnN7RXhpdFN0YXR1c0ZvdW5kQnVnc30pIHsKKyAgICAgIGV4aXQgMSBpZiAoJE51bUJ1Z3MgPiAwKTsKKyAgICAgIGV4aXQgMDsKKyAgICB9CisgIH0KK30KKworZXhpdCAkRXhpdFN0YXR1czsKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2Nhbi1idWlsZC5iYXQgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NjYW4tYnVpbGQuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NjVmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NjYW4tYnVpbGQuYmF0CkBAIC0wLDAgKzEgQEAKK3BlcmwgLVMgc2Nhbi1idWlsZCAlKgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLWJ1aWxkL2Jpbi9zZXQteGNvZGUtYW5hbHl6ZXIgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NldC14Y29kZS1hbmFseXplcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTY3NDgyCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLWJ1aWxkL2Jpbi9zZXQteGNvZGUtYW5hbHl6ZXIKQEAgLTAsMCArMSwxMTQgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgW1BSIDExNjYxXSBOb3RlIHRoYXQgd2UgaGFyZHdpcmUgdG8gL3Vzci9iaW4vcHl0aG9uIGJlY2F1c2Ugd2UKKyMgd2FudCB0byB0aGUgdXNlIHRoZSBzeXN0ZW0gdmVyc2lvbiBvZiBQeXRob24gb24gTWFjIE9TIFguCisjIFRoaXMgb25lIGhhcyB0aGUgc2NyaXB0aW5nIGJyaWRnZSBlbmFibGVkLgorCitpbXBvcnQgc3lzCitpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcpOgorICAgIHByaW50ICJzZXQteGNvZGUtYW5hbHl6ZXIgcmVxdWlyZXMgUHl0aG9uIDIuNyBvciBsYXRlciIKKyAgICBzeXMuZXhpdCgxKQorCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcmUKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN0YXQKK2Zyb20gQXBwS2l0IGltcG9ydCAqCisKK2RlZiBGaW5kQ2xhbmdTcGVjcyhwYXRoKToKKyAgcHJpbnQgIigrKSBTZWFyY2hpbmcgZm9yIHhjc3BlYyBmaWxlIGluOiAiLCBwYXRoCisgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgaWYgZi5lbmRzd2l0aCgiLnhjc3BlYyIpIGFuZCBmLnN0YXJ0c3dpdGgoIkNsYW5nIExMVk0iKToKKyAgICAgICAgeWllbGQgb3MucGF0aC5qb2luKHJvb3QsIGYpCisKK2RlZiBNb2RpZnlTcGVjKHBhdGgsIGlzQnVpbHRpbkFuYWx5emVyLCBwYXRoVG9DaGVja2VyKToKKyAgdCA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpCisgIGZvdW5kQW5hbHl6ZXIgPSBGYWxzZQorICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKKyAgICBpZiBpc0J1aWx0aW5BbmFseXplcjoKKyAgICAgICMgRmlyc3Qgc2VhcmNoIGZvciBDTEFOR19BTkFMWVpFUl9FWEVDLiAgTmV3ZXIKKyAgICAgICMgdmVyc2lvbnMgb2YgWGNvZGUgc2V0IEVYRUNfUEFUSCB0byBiZSBDTEFOR19BTkFMWVpFUl9FWEVDLgorICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGYyOgorICAgICAgICBmb3IgbGluZSBpbiBmMjoKKyAgICAgICAgICBpZiBsaW5lLmZpbmQoIkNMQU5HX0FOQUxZWkVSX0VYRUMiKSA+PSAwOgorICAgICAgICAgICAgcGF0aFRvQ2hlY2tlciA9ICIkKENMQU5HX0FOQUxZWkVSX0VYRUMpIgorICAgICAgICAgICAgYnJlYWsKKyAgICAjIE5vdyBjcmVhdGUgYSBuZXcgZmlsZS4KKyAgICBmb3IgbGluZSBpbiBmOgorICAgICAgaWYgbm90IGZvdW5kQW5hbHl6ZXI6CisgICAgICAgIGlmIGxpbmUuZmluZCgiU3RhdGljIEFuYWx5emVyIikgPj0gMDoKKyAgICAgICAgICBmb3VuZEFuYWx5emVyID0gVHJ1ZQorICAgICAgZWxzZToKKyAgICAgICAgbSA9IHJlLnNlYXJjaCgnXihccypFeGVjUGF0aFxzKj1ccyoiKScsIGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgbGluZSA9ICIiLmpvaW4oW20uZ3JvdXAoMCksIHBhdGhUb0NoZWNrZXIsICciO1xuJ10pCisgICAgICAgICAgIyBEbyBub3QgbW9kaWZ5IGZ1cnRoZXIgRXhlY1BhdGgncyBsYXRlciBpbiB0aGUgeGNzcGVjLgorICAgICAgICAgIGZvdW5kQW5hbHl6ZXIgPSBGYWxzZQorICAgICAgdC53cml0ZShsaW5lKQorICB0LmNsb3NlKCkKKyAgcHJpbnQgIigrKSBwcm9jZXNzaW5nOiIsIHBhdGgKKyAgdHJ5OgorICAgIHNodXRpbC5jb3B5KHQubmFtZSwgcGF0aCkKKyAgICBvcy5jaG1vZChwYXRoLCBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVdVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEgpCisgIGV4Y2VwdCBJT0Vycm9yLCB3aHk6CisgICAgcHJpbnQgIiAgICAoLSkgQ2Fubm90IHVwZGF0ZSBmaWxlOiIsIHdoeSwgIlxuIgorICBleGNlcHQgT1NFcnJvciwgd2h5OgorICAgIHByaW50ICIgICAgKC0pIENhbm5vdCB1cGRhdGUgZmlsZToiLCB3aHksICJcbiIKKyAgb3MudW5saW5rKHQubmFtZSkKKworZGVmIG1haW4oKToKKyAgZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCisgIHBhcnNlciA9IE9wdGlvblBhcnNlcigndXNhZ2U6ICVwcm9nIFtvcHRpb25zXScpCisgIHBhcnNlci5zZXRfZGVzY3JpcHRpb24oX19kb2NfXykKKyAgcGFyc2VyLmFkZF9vcHRpb24oIi0tdXNlLWNoZWNrZXItYnVpbGQiLCBkZXN0PSJwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgaGVscD0iVXNlIHRoZSBDbGFuZyBsb2NhdGVkIGF0IHRoZSBwcm92aWRlZCBhYnNvbHV0ZSBwYXRoLCBlLmcuIC9Vc2Vycy9mb28vY2hlY2tlci0xIikKKyAgcGFyc2VyLmFkZF9vcHRpb24oIi0tdXNlLXhjb2RlLWNsYW5nIiwgYWN0aW9uPSJzdG9yZV9jb25zdCIsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0PSIkKENMQU5HKSIsIGRlc3Q9ImRlZmF1bHQiLAorICAgICAgICAgICAgICAgICAgICBoZWxwPSJVc2UgdGhlIENsYW5nIGJ1bmRsZWQgd2l0aCBYY29kZSIpCisgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgaWYgb3B0aW9ucy5wYXRoIGlzIE5vbmUgYW5kIG9wdGlvbnMuZGVmYXVsdCBpcyBOb25lOgorICAgIHBhcnNlci5lcnJvcigiWW91IG11c3Qgc3BlY2lmeSBhIHZlcnNpb24gb2YgQ2xhbmcgdG8gdXNlIGZvciBzdGF0aWMgYW5hbHlzaXMuICBTcGVjaWZ5ICctaCcgZm9yIGRldGFpbHMiKQorCisgICMgZGV0ZXJtaW5lIGlmIFhjb2RlIGlzIHJ1bm5pbmcKKyAgZm9yIHggaW4gTlNXb3Jrc3BhY2Uuc2hhcmVkV29ya3NwYWNlKCkucnVubmluZ0FwcGxpY2F0aW9ucygpOgorICAgIGlmIHgubG9jYWxpemVkTmFtZSgpLmZpbmQoIlhjb2RlIikgPj0gMDoKKyAgICAgIHByaW50ICIoLSkgWW91IG11c3QgcXVpdCBYY29kZSBmaXJzdCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBjb25maWd1cmF0aW9uIGZpbGVzLiIKKyAgICAgIHN5cy5leGl0KDEpCisKKyAgaXNCdWlsdGluQW5hbHl6ZXIgPSBGYWxzZQorICBpZiBvcHRpb25zLnBhdGg6CisgICAgIyBFeHBhbmQgdGlsZGVzLgorICAgIHBhdGggPSBvcy5wYXRoLmV4cGFuZHVzZXIob3B0aW9ucy5wYXRoKQorICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKCJjbGFuZyIpOgorICAgICAgcHJpbnQgIigrKSBVc2luZyBDbGFuZyBidW5kbGVkIHdpdGggY2hlY2tlciBidWlsZDoiLCBwYXRoCisgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICJiaW4iLCAiY2xhbmciKTsKKyAgICBlbHNlOgorICAgICAgcHJpbnQgIigrKSBVc2luZyBDbGFuZyBsb2NhdGVkIGF0OiIsIHBhdGgKKyAgZWxzZToKKyAgICBwcmludCAiKCspIFVzaW5nIHRoZSBDbGFuZyBidW5kbGVkIHdpdGggWGNvZGUiCisgICAgcGF0aCA9IG9wdGlvbnMuZGVmYXVsdAorICAgIGlzQnVpbHRpbkFuYWx5emVyID0gVHJ1ZQorCisgIHRyeToKKyAgICB4Y29kZV9wYXRoID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJ4Y29kZS1zZWxlY3QiLCAiLXByaW50LXBhdGgiXSkKKyAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICMgRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb24gd2hlbiB1c2luZyBQeXRob24gPCAyLjcuMAorICAgIHhjb2RlX3BhdGggPSAiL0RldmVsb3BlciIKKyAgaWYgKHhjb2RlX3BhdGguZmluZCgiLmFwcC8iKSAhPSAtMSk6CisgICAgIyBDdXQgb2ZmIHRoZSAnRGV2ZWxvcGVyJyBkaXIsIGFzIHRoZSB4Y3NwZWMgbGllcyBpbiBhbm90aGVyIHBhcnQKKyAgICAjIG9mIHRoZSBYY29kZS5hcHAgc3VidHJlZS4KKyAgICB4Y29kZV9wYXRoID0geGNvZGVfcGF0aC5yc3BsaXQoJy9EZXZlbG9wZXInLCAxKVswXQorCisgIGZvdW5kU3BlYyA9IEZhbHNlCisgIGZvciB4IGluIEZpbmRDbGFuZ1NwZWNzKHhjb2RlX3BhdGgpOgorICAgIGZvdW5kU3BlYyA9IFRydWUKKyAgICBNb2RpZnlTcGVjKHgsIGlzQnVpbHRpbkFuYWx5emVyLCBwYXRoKQorCisgIGlmIGZvdW5kU3BlYyA9PSBGYWxzZToKKyAgICAgIHByaW50ICIoLSkgTm8gY29tcGlsZXIgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBmb3VuZC4gIFhjb2RlJ3MgYW5hbHl6ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZWQuIgorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICBtYWluKCkKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2MrKy1hbmFseXplciBiL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2MrKy1hbmFseXplcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZGE1ZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvYysrLWFuYWx5emVyCkBAIC0wLDAgKzEsOCBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCit1c2UgQ3dkIHF3LyBhYnNfcGF0aCAvOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3LyBkaXJuYW1lIC87CisjIEFkZCBzY2FuLWJ1aWxkIGRpciB0byB0aGUgbGlzdCBvZiBwbGFjZXMgd2hlcmUgcGVybCBsb29rcyBmb3IgbW9kdWxlcy4KK3VzZSBsaWIgZGlybmFtZShhYnNfcGF0aCgkMCkpOworCitkbyAnY2NjLWFuYWx5emVyJzsKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2MrKy1hbmFseXplci5iYXQgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jKystYW5hbHl6ZXIuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYzcxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jKystYW5hbHl6ZXIuYmF0CkBAIC0wLDAgKzEgQEAKK3BlcmwgLVMgYysrLWFuYWx5emVyICUqCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jY2MtYW5hbHl6ZXIgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jY2MtYW5hbHl6ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmZkYTFkMwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2NjYy1hbmFseXplcgpAQCAtMCwwICsxLDc4NSBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIworIyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisjCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorIyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisjCisjIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIworIworIyAgQSBzY3JpcHQgZGVzaWduZWQgdG8gaW50ZXJwb3NlIGJldHdlZW4gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgZ2NjLiAgSXQgaW52b2tlcworIyAgYm90aCBnY2MgYW5kIHRoZSBzdGF0aWMgYW5hbHl6ZXIuCisjCisjIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEZpbmRCaW47Cit1c2UgQ3dkIHF3LyBnZXRjd2QgYWJzX3BhdGggLzsKK3VzZSBGaWxlOjpUZW1wIHF3LyB0ZW1wZmlsZSAvOwordXNlIEZpbGU6OlBhdGggcXcgLyBta3BhdGggLzsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBUZXh0OjpQYXJzZVdvcmRzOworCisjIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIworIyBMaXN0IGZvcm0gJ3N5c3RlbScgd2l0aCBTVERPVVQgYW5kIFNUREVSUiBjYXB0dXJlZC4KKyMjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMjCisKK3N1YiBzaWxlbnRfc3lzdGVtIHsKKyAgbXkgJEh0bWxEaXIgPSBzaGlmdDsKKyAgbXkgJENvbW1hbmQgPSBzaGlmdDsKKworICAjIFNhdmUgU1RET1VUIGFuZCBTVERFUlIgYW5kIHJlZGlyZWN0IHRvIGEgdGVtcG9yYXJ5IGZpbGUuCisgIG9wZW4gT0xET1VULCAiPiYiLCBcKlNURE9VVDsKKyAgb3BlbiBPTERFUlIsICI+JiIsIFwqU1RERVJSOworICBteSAoJFRtcEZILCAkVG1wRmlsZSkgPSB0ZW1wZmlsZSgidGVtcF9idWZfWFhYWFhYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElSID0+ICRIdG1sRGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTkxJTksgPT4gMSk7CisgIG9wZW4oU1RET1VULCAiPiRUbXBGaWxlIik7CisgIG9wZW4oU1RERVJSLCAiPiYiLCBcKlNURE9VVCk7CisKKyAgIyBJbnZva2UgJ3N5c3RlbScsIFNURE9VVCBhbmQgU1RERVJSIGFyZSBvdXRwdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZS4KKyAgc3lzdGVtICRDb21tYW5kLCBAXzsKKworICAjIFJlc3RvcmUgU1RET1VUIGFuZCBTVERFUlIuCisgIG9wZW4gU1RET1VULCAiPiYiLCBcKk9MRE9VVDsKKyAgb3BlbiBTVERFUlIsICI+JiIsIFwqT0xERVJSOworCisgIHJldHVybiAkVG1wRkg7Cit9CisKKyMjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMjCisjIENvbXBpbGVyIGNvbW1hbmQgc2V0dXAuCisjIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIworCisjIFNlYXJjaCBpbiB0aGUgUEFUSCBpZiB0aGUgY29tcGlsZXIgZXhpc3RzCitzdWIgU2VhcmNoSW5QYXRoIHsKKyAgICBteSAkZmlsZSA9IHNoaWZ0OworICAgIGZvcmVhY2ggbXkgJGRpciAoc3BsaXQgKCc6JywgJEVOVntQQVRIfSkpIHsKKyAgICAgICAgaWYgKC14ICIkZGlyLyRmaWxlIikgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK215ICRDb21waWxlcjsKK215ICRDbGFuZzsKK215ICREZWZhdWx0Q0NvbXBpbGVyOworbXkgJERlZmF1bHRDWFhDb21waWxlcjsKK215ICRJc0NYWDsKK215ICRBbmFseXplclRhcmdldDsKKworIyBJZiBvbiBPU1gsIHVzZSB4Y3J1biB0byBkZXRlcm1pbmUgdGhlIFNESyByb290LgorbXkgJFVzZVhDUlVOID0gMDsKKworaWYgKGB1bmFtZSAtYWAgPX4gbS9EYXJ3aW4vKSB7CisgICREZWZhdWx0Q0NvbXBpbGVyID0gJ2NsYW5nJzsKKyAgJERlZmF1bHRDWFhDb21waWxlciA9ICdjbGFuZysrJzsKKyAgIyBPbGRlciB2ZXJzaW9ucyBvZiBPU1ggZG8gbm90IGhhdmUgeGNydW4gdG8KKyAgIyBxdWVyeSB0aGUgU0RLIGxvY2F0aW9uLgorICBpZiAoLXggIi91c3IvYmluL3hjcnVuIikgeworICAgICRVc2VYQ1JVTiA9IDE7CisgIH0KK30gZWxzZSB7CisgICREZWZhdWx0Q0NvbXBpbGVyID0gJ2djYyc7CisgICREZWZhdWx0Q1hYQ29tcGlsZXIgPSAnZysrJzsKK30KKworaWYgKCRGaW5kQmluOjpTY3JpcHQgPX4gL2NcK1wrLWFuYWx5emVyLykgeworICAkQ29tcGlsZXIgPSAkRU5WeydDQ0NfQ1hYJ307CisgIGlmICghZGVmaW5lZCAkQ29tcGlsZXIgfHwgKCEgLXggJENvbXBpbGVyICYmICEgU2VhcmNoSW5QYXRoKCRDb21waWxlcikpKSB7ICRDb21waWxlciA9ICREZWZhdWx0Q1hYQ29tcGlsZXI7IH0KKworICAkQ2xhbmcgPSAkRU5WeydDTEFOR19DWFgnfTsKKyAgaWYgKCFkZWZpbmVkICRDbGFuZyB8fCAhIC14ICRDbGFuZykgeyAkQ2xhbmcgPSAnY2xhbmcrKyc7IH0KKworICAkSXNDWFggPSAxCit9CitlbHNlIHsKKyAgJENvbXBpbGVyID0gJEVOVnsnQ0NDX0NDJ307CisgIGlmICghZGVmaW5lZCAkQ29tcGlsZXIgfHwgKCEgLXggJENvbXBpbGVyICYmICEgU2VhcmNoSW5QYXRoKCRDb21waWxlcikpKSB7ICRDb21waWxlciA9ICREZWZhdWx0Q0NvbXBpbGVyOyB9CisKKyAgJENsYW5nID0gJEVOVnsnQ0xBTkcnfTsKKyAgaWYgKCFkZWZpbmVkICRDbGFuZyB8fCAhIC14ICRDbGFuZykgeyAkQ2xhbmcgPSAnY2xhbmcnOyB9CisKKyAgJElzQ1hYID0gMAorfQorCiskQW5hbHl6ZXJUYXJnZXQgPSAkRU5WeydDTEFOR19BTkFMWVpFUl9UQVJHRVQnfTsKKworIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKyMgQ2xlYW51cC4KKyMjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMjCisKK215ICRSZXBvcnRGYWlsdXJlcyA9ICRFTlZ7J0NDQ19SRVBPUlRfRkFJTFVSRVMnfTsKK2lmICghZGVmaW5lZCAkUmVwb3J0RmFpbHVyZXMpIHsgJFJlcG9ydEZhaWx1cmVzID0gMTsgfQorCitteSAkQ2xlYW51cEZpbGU7CitteSAkUmVzdWx0RmlsZTsKKworIyBSZW1vdmUgYW55IHN0YWxlIGZpbGVzIGF0IGV4aXQuCitFTkQgeworICBpZiAoZGVmaW5lZCAkUmVzdWx0RmlsZSAmJiAteiAkUmVzdWx0RmlsZSkgeworICAgIHVubGluaygkUmVzdWx0RmlsZSk7CisgIH0KKyAgaWYgKGRlZmluZWQgJENsZWFudXBGaWxlKSB7CisgICAgdW5saW5rKCRDbGVhbnVwRmlsZSk7CisgIH0KK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgIFByb2Nlc3MgQ2xhbmcgQ3Jhc2hlcy4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBHZXRQUEV4dCB7CisgIG15ICRMYW5nID0gc2hpZnQ7CisgIGlmICgkTGFuZyA9fiAvb2JqZWN0aXZlLWNcK1wrLykgeyByZXR1cm4gIi5taWkiIH07CisgIGlmICgkTGFuZyA9fiAvb2JqZWN0aXZlLWMvKSB7IHJldHVybiAiLm1pIjsgfQorICBpZiAoJExhbmcgPX4gL2NcK1wrLykgeyByZXR1cm4gIi5paSI7IH0KKyAgcmV0dXJuICIuaSI7Cit9CisKKyMgU2V0IHRoaXMgdG8gMSBpZiB3ZSB3YW50IHRvIGluY2x1ZGUgJ3BhcnNlciByZWplY3RzJyBmaWxlcy4KK215ICRJbmNsdWRlUGFyc2VyUmVqZWN0cyA9IDA7CitteSAkUGFyc2VyUmVqZWN0cyA9ICJQYXJzZXIgUmVqZWN0cyI7CitteSAkQXR0cmlidXRlSWdub3JlZCA9ICJBdHRyaWJ1dGUgSWdub3JlZCI7CitteSAkT3RoZXJFcnJvciA9ICJPdGhlciBFcnJvciI7CisKK3N1YiBQcm9jZXNzQ2xhbmdGYWlsdXJlIHsKKyAgbXkgKCRDbGFuZywgJExhbmcsICRmaWxlLCAkQXJncywgJEh0bWxEaXIsICRFcnJvclR5cGUsICRvZmlsZSkgPSBAXzsKKyAgbXkgJERpciA9ICIkSHRtbERpci9mYWlsdXJlcyI7CisgIG1rcGF0aCAkRGlyOworCisgIG15ICRwcmVmaXggPSAiY2xhbmdfY3Jhc2giOworICBpZiAoJEVycm9yVHlwZSBlcSAkUGFyc2VyUmVqZWN0cykgeworICAgICRwcmVmaXggPSAiY2xhbmdfcGFyc2VyX3JlamVjdHMiOworICB9CisgIGVsc2lmICgkRXJyb3JUeXBlIGVxICRBdHRyaWJ1dGVJZ25vcmVkKSB7CisgICAgJHByZWZpeCA9ICJjbGFuZ19hdHRyaWJ1dGVfaWdub3JlZCI7CisgIH0KKyAgZWxzaWYgKCRFcnJvclR5cGUgZXEgJE90aGVyRXJyb3IpIHsKKyAgICAkcHJlZml4ID0gImNsYW5nX290aGVyX2Vycm9yIjsKKyAgfQorCisgICMgR2VuZXJhdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHdpdGggQ2xhbmcuCisgIG15ICgkUFBILCAkUFBGaWxlKSA9IHRlbXBmaWxlKCAkcHJlZml4IC4gIl9YWFhYWFgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VGRklYID0+IEdldFBQRXh0KCRMYW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJUiA9PiAkRGlyKTsKKyAgY2xvc2UgKCRQUEgpOworICBzeXN0ZW0gJENsYW5nLCBAJEFyZ3MsICItRSIsICItbyIsICRQUEZpbGU7CisKKyAgIyBDcmVhdGUgdGhlIGluZm8gZmlsZS4KKyAgb3BlbiAoT1VULCAiPiIsICIkUFBGaWxlLmluZm8udHh0Iikgb3IgZGllICJDYW5ub3Qgb3BlbiAkUFBGaWxlLmluZm8udHh0XG4iOworICBwcmludCBPVVQgYWJzX3BhdGgoJGZpbGUpLCAiXG4iOworICBwcmludCBPVVQgIiRFcnJvclR5cGVcbiI7CisgIHByaW50IE9VVCAiQCRBcmdzXG4iOworICBjbG9zZSBPVVQ7CisgIGB1bmFtZSAtYSA+PiAkUFBGaWxlLmluZm8udHh0IDI+JjFgOworICBgIiRDb21waWxlciIgLXYgPj4gJFBQRmlsZS5pbmZvLnR4dCAyPiYxYDsKKyAgcmVuYW1lKCRvZmlsZSwgIiRQUEZpbGUuc3RkZXJyLnR4dCIpOworICByZXR1cm4gKGJhc2VuYW1lICRQUEZpbGUpOworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyAgUnVubmluZyB0aGUgYW5hbHl6ZXIuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgR2V0Q0NBcmdzIHsKKyAgbXkgJEh0bWxEaXIgPSBzaGlmdDsKKyAgbXkgJG1vZGUgPSBzaGlmdDsKKyAgbXkgJEFyZ3MgPSBzaGlmdDsKKyAgbXkgJGxpbmU7CisgIG15ICRPdXRwdXRTdHJlYW0gPSBzaWxlbnRfc3lzdGVtKCRIdG1sRGlyLCAkQ2xhbmcsICItIyMjIiwgJG1vZGUsIEAkQXJncyk7CisgIHdoaWxlICg8JE91dHB1dFN0cmVhbT4pIHsKKyAgICBuZXh0IGlmICghL1xzIj8tY2MxIj9ccy8pOworICAgICRsaW5lID0gJF87CisgIH0KKyAgZGllICJjb3VsZCBub3QgZmluZCBjbGFuZyBsaW5lXG4iIGlmICghZGVmaW5lZCAkbGluZSk7CisgICMgU3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgorICAkbGluZSA9fiBzL15ccyt8XHMrJC8vZzsKKyAgbXkgQGl0ZW1zID0gcXVvdGV3b3JkcygnXHMrJywgMCwgJGxpbmUpOworICBteSAkY21kID0gc2hpZnQgQGl0ZW1zOworICBkaWUgImNhbm5vdCBmaW5kICdjbGFuZycgaW4gJ2NsYW5nJyBjb21tYW5kXG4iIGlmICghKCRjbWQgPX4gL2NsYW5nLykpOworICByZXR1cm4gXEBpdGVtczsKK30KKworc3ViIEFuYWx5emUgeworICBteSAoJENsYW5nLCAkT3JpZ2luYWxBcmdzLCAkQW5hbHl6ZUFyZ3MsICRMYW5nLCAkT3V0cHV0LCAkVmVyYm9zZSwgJEh0bWxEaXIsCisgICAgICAkZmlsZSkgPSBAXzsKKworICBteSBAQXJncyA9IEAkT3JpZ2luYWxBcmdzOworICBteSAkQ21kOworICBteSBAQ21kQXJnczsKKyAgbXkgQENtZEFyZ3NTYW5zQW5hbHlzZXM7CisKKyAgaWYgKCRMYW5nID1+IC9oZWFkZXIvKSB7CisgICAgZXhpdCAwIGlmICghZGVmaW5lZCAoJE91dHB1dCkpOworICAgICRDbWQgPSAnY3AnOworICAgIHB1c2ggQENtZEFyZ3MsICRmaWxlOworICAgICMgUmVtb3ZlIHRoZSBQQ0ggZXh0ZW5zaW9uLgorICAgICRPdXRwdXQgPX4gcy9bLl1nY2gkLy87CisgICAgcHVzaCBAQ21kQXJncywgJE91dHB1dDsKKyAgICBAQ21kQXJnc1NhbnNBbmFseXNlcyA9IEBDbWRBcmdzOworICB9CisgIGVsc2UgeworICAgICRDbWQgPSAkQ2xhbmc7CisKKyAgICAjIENyZWF0ZSBhcmd1bWVudHMgZm9yIGRvaW5nIHJlZ3VsYXIgcGFyc2luZy4KKyAgICBteSAkU3ludGF4QXJncyA9IEdldENDQXJncygkSHRtbERpciwgIi1mc3ludGF4LW9ubHkiLCBcQEFyZ3MpOworICAgIEBDbWRBcmdzU2Fuc0FuYWx5c2VzID0gQCRTeW50YXhBcmdzOworCisgICAgIyBDcmVhdGUgYXJndW1lbnRzIGZvciBkb2luZyBzdGF0aWMgYW5hbHlzaXMuCisgICAgaWYgKGRlZmluZWQgJFJlc3VsdEZpbGUpIHsKKyAgICAgIHB1c2ggQEFyZ3MsICctbycsICRSZXN1bHRGaWxlOworICAgIH0KKyAgICBlbHNpZiAoZGVmaW5lZCAkSHRtbERpcikgeworICAgICAgcHVzaCBAQXJncywgJy1vJywgJEh0bWxEaXI7CisgICAgfQorICAgIGlmICgkVmVyYm9zZSkgeworICAgICAgcHVzaCBAQXJncywgIi1YY2xhbmciLCAiLWFuYWx5emVyLWRpc3BsYXktcHJvZ3Jlc3MiOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJGFyZyAoQCRBbmFseXplQXJncykgeworICAgICAgcHVzaCBAQXJncywgIi1YY2xhbmciLCAkYXJnOworICAgIH0KKworICAgICMgRGlzcGxheSBVYml2aXogZ3JhcGg/CisgICAgaWYgKGRlZmluZWQgJEVOVnsnQ0NDX1VCSSd9KSB7CisgICAgICBwdXNoIEBBcmdzLCAiLVhjbGFuZyIsICItYW5hbHl6ZXItdml6LWVncmFwaC11YmlncmFwaCI7CisgICAgfQorCisgICAgaWYgKGRlZmluZWQgJEFuYWx5emVyVGFyZ2V0KSB7CisgICAgICBwdXNoIEBBcmdzLCAiLXRhcmdldCIsICRBbmFseXplclRhcmdldDsKKyAgICB9CisKKyAgICBteSAkQW5hbHlzaXNBcmdzID0gR2V0Q0NBcmdzKCRIdG1sRGlyLCAiLS1hbmFseXplIiwgXEBBcmdzKTsKKyAgICBAQ21kQXJncyA9IEAkQW5hbHlzaXNBcmdzOworICB9CisKKyAgbXkgQFByaW50QXJnczsKKyAgbXkgJGRpcjsKKworICBpZiAoJFZlcmJvc2UpIHsKKyAgICAkZGlyID0gZ2V0Y3dkKCk7CisgICAgcHJpbnQgU1RERVJSICJcbltMT0NBVElPTl06ICRkaXJcbiI7CisgICAgcHVzaCBAUHJpbnRBcmdzLCInJENtZCciOworICAgIGZvcmVhY2ggbXkgJGFyZyAoQENtZEFyZ3MpIHsKKyAgICAgICAgcHVzaCBAUHJpbnRBcmdzLCJcJyRhcmdcJyI7CisgICAgfQorICB9CisgIGlmICgkVmVyYm9zZSA9PSAxKSB7CisgICAgIyBXZSBNVVNUIHByaW50IHRvIHN0ZGVyci4gIFNvbWUgY2xpZW50cyB1c2UgdGhlIHN0ZG91dCBvdXRwdXQgb2YKKyAgICAjIGdjYyBmb3IgdmFyaW91cyBwdXJwb3Nlcy4KKyAgICBwcmludCBTVERFUlIgam9pbignICcsIEBQcmludEFyZ3MpOworICAgIHByaW50IFNUREVSUiAiXG4iOworICB9CisgIGVsc2lmICgkVmVyYm9zZSA9PSAyKSB7CisgICAgcHJpbnQgU1RERVJSICIjU0hFTEwgKGNkICckZGlyJyAmJiBAUHJpbnRBcmdzKVxuIjsKKyAgfQorCisgICMgU2F2ZSBTVERPVVQgYW5kIFNUREVSUiBvZiBjbGFuZyB0byBhIHRlbXBvcmFyeSBmaWxlIGFuZCByZXJvdXRlCisgICMgYWxsIGNsYW5nIG91dHB1dCB0byBjY2MtYW5hbHl6ZXIncyBTVERFUlIuCisgICMgV2Ugc2F2ZSB0aGUgb3V0cHV0IGZpbGUgaW4gdGhlICdjcmFzaGVzJyBkaXJlY3RvcnkgaWYgY2xhbmcgZW5jb3VudGVycworICAjIGFueSBwcm9ibGVtcyB3aXRoIHRoZSBmaWxlLgorICBteSAoJG9maCwgJG9maWxlKSA9IHRlbXBmaWxlKCJjbGFuZ19vdXRwdXRfWFhYWFhYIiwgRElSID0+ICRIdG1sRGlyKTsKKworICBteSAkT3V0cHV0U3RyZWFtID0gc2lsZW50X3N5c3RlbSgkSHRtbERpciwgJENtZCwgQENtZEFyZ3MpOworICB3aGlsZSAoIDwkT3V0cHV0U3RyZWFtPiApIHsKKyAgICBwcmludCAkb2ZoICRfOworICAgIHByaW50IFNUREVSUiAkXzsKKyAgfQorICBteSAkUmVzdWx0ID0gJD87CisgIGNsb3NlICRvZmg7CisKKyAgIyBEaWQgdGhlIGNvbW1hbmQgZGllIGJlY2F1c2Ugb2YgYSBzaWduYWw/CisgIGlmICgkUmVwb3J0RmFpbHVyZXMpIHsKKyAgICBpZiAoJFJlc3VsdCAmIDEyNyBhbmQgJENtZCBlcSAkQ2xhbmcgYW5kIGRlZmluZWQgJEh0bWxEaXIpIHsKKyAgICAgIFByb2Nlc3NDbGFuZ0ZhaWx1cmUoJENsYW5nLCAkTGFuZywgJGZpbGUsIFxAQ21kQXJnc1NhbnNBbmFseXNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJEh0bWxEaXIsICJDcmFzaCIsICRvZmlsZSk7CisgICAgfQorICAgIGVsc2lmICgkUmVzdWx0KSB7CisgICAgICBpZiAoJEluY2x1ZGVQYXJzZXJSZWplY3RzICYmICEoJGZpbGUgPX4vY29uZnRlc3QvKSkgeworICAgICAgICBQcm9jZXNzQ2xhbmdGYWlsdXJlKCRDbGFuZywgJExhbmcsICRmaWxlLCBcQENtZEFyZ3NTYW5zQW5hbHlzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEh0bWxEaXIsICRQYXJzZXJSZWplY3RzLCAkb2ZpbGUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgUHJvY2Vzc0NsYW5nRmFpbHVyZSgkQ2xhbmcsICRMYW5nLCAkZmlsZSwgXEBDbWRBcmdzU2Fuc0FuYWx5c2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRIdG1sRGlyLCAkT3RoZXJFcnJvciwgJG9maWxlKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAjIENoZWNrIGlmIHRoZXJlIHdlcmUgYW55IHVuaGFuZGxlZCBhdHRyaWJ1dGVzLgorICAgICAgaWYgKG9wZW4oQ0hJTEQsICRvZmlsZSkpIHsKKyAgICAgICAgbXkgJWF0dHJpYnV0ZXNfbm90X2hhbmRsZWQ7CisKKyAgICAgICAgIyBEb24ndCBmbGFnIHdhcm5pbmdzIGFib3V0IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyB0aGF0IHdlCisgICAgICAgICMga25vdyBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgYnkgQ2xhbmcuCisgICAgICAgICRhdHRyaWJ1dGVzX25vdF9oYW5kbGVkeyJjZGVjbCJ9ID0gMTsKKworICAgICAgICBteSAkcHBmaWxlOworICAgICAgICB3aGlsZSAoPENISUxEPikgeworICAgICAgICAgIG5leHQgaWYgKCEgL3dhcm5pbmc6ICcoW15cJ10rKScgYXR0cmlidXRlIGlnbm9yZWQvKTsKKworICAgICAgICAgICMgSGF2ZSB3ZSBhbHJlYWR5IHNwb3R0ZWQgdGhpcyB1bmhhbmRsZWQgYXR0cmlidXRlPworICAgICAgICAgIG5leHQgaWYgKGRlZmluZWQgJGF0dHJpYnV0ZXNfbm90X2hhbmRsZWR7JDF9KTsKKyAgICAgICAgICAkYXR0cmlidXRlc19ub3RfaGFuZGxlZHskMX0gPSAxOworCisgICAgICAgICAgIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBmaWxlLgorICAgICAgICAgIG15ICRkaXIgPSAiJEh0bWxEaXIvZmFpbHVyZXMiOworICAgICAgICAgIG15ICRhZmlsZSA9ICIkZGlyL2F0dHJpYnV0ZV9pZ25vcmVkXyQxLnR4dCI7CisKKyAgICAgICAgICAjIE9ubHkgY3JlYXRlIGFub3RoZXIgcHJlcHJvY2Vzc2VkIGZpbGUgaWYgdGhlIGF0dHJpYnV0ZSBmaWxlCisgICAgICAgICAgIyBkb2Vzbid0IGV4aXN0IHlldC4KKyAgICAgICAgICBuZXh0IGlmICgtZSAkYWZpbGUpOworCisgICAgICAgICAgIyBBZGQgdGhpcyBmaWxlIHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgY29udGFpbmVkIHRoaXMgYXR0cmlidXRlLgorICAgICAgICAgICMgR2VuZXJhdGUgYSBwcmVwcm9jZXNzZWQgZmlsZSBpZiB3ZSBoYXZlbid0IGFscmVhZHkuCisgICAgICAgICAgaWYgKCEoZGVmaW5lZCAkcHBmaWxlKSkgeworICAgICAgICAgICAgJHBwZmlsZSA9IFByb2Nlc3NDbGFuZ0ZhaWx1cmUoJENsYW5nLCAkTGFuZywgJGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcQENtZEFyZ3NTYW5zQW5hbHlzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSHRtbERpciwgJEF0dHJpYnV0ZUlnbm9yZWQsICRvZmlsZSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgbWtwYXRoICRkaXI7CisgICAgICAgICAgb3BlbihBRklMRSwgIj4kYWZpbGUiKTsKKyAgICAgICAgICBwcmludCBBRklMRSAiJHBwZmlsZVxuIjsKKyAgICAgICAgICBjbG9zZShBRklMRSk7CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UgQ0hJTEQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgdW5saW5rKCRvZmlsZSk7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjICBMb29rdXAgdGFibGVzLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworbXkgJUNvbXBpbGVPcHRpb25NYXAgPSAoCisgICctbm9zdGRpbmMnID0+IDAsCisgICctaW5jbHVkZScgPT4gMSwKKyAgJy1pZGlyYWZ0ZXInID0+IDEsCisgICctaW1hY3JvcycgPT4gMSwKKyAgJy1pcHJlZml4JyA9PiAxLAorICAnLWlxdW90ZScgPT4gMSwKKyAgJy1pd2l0aHByZWZpeCcgPT4gMSwKKyAgJy1pd2l0aHByZWZpeGJlZm9yZScgPT4gMQorKTsKKworbXkgJUxpbmtlck9wdGlvbk1hcCA9ICgKKyAgJy1mcmFtZXdvcmsnID0+IDEsCisgICctZm9iamMtbGluay1ydW50aW1lJyA9PiAwCispOworCitteSAlQ29tcGlsZXJMaW5rZXJPcHRpb25NYXAgPSAoCisgICctV3dyaXRlLXN0cmluZ3MnID0+IDAsCisgICctZnRyYXB2LWhhbmRsZXInID0+IDEsICMgc3BlY2lmaWNhbGx5IGNhbGwgb3V0IHNlcGFyYXRlZCAtZiBmbGFnCisgICctbWlvcy1zaW11bGF0b3ItdmVyc2lvbi1taW4nID0+IDAsICMgVGhpcyByZWFsbHkgaGFzIDEgYXJndW1lbnQsIGJ1dCBhbHdheXMgaGFzICc9JworICAnLWlzeXNyb290JyA9PiAxLAorICAnLWFyY2gnID0+IDEsCisgICctbTMyJyA9PiAwLAorICAnLW02NCcgPT4gMCwKKyAgJy1zdGRsaWInID0+IDAsICMgVGhpcyBpcyByZWFsbHkgYSAxIGFyZ3VtZW50LCBidXQgYWx3YXlzIGhhcyAnPScKKyAgJy0tc3lzcm9vdCcgPT4gMSwKKyAgJy10YXJnZXQnID0+IDEsCisgICctdicgPT4gMCwKKyAgJy1tbWFjb3N4LXZlcnNpb24tbWluJyA9PiAwLCAjIFRoaXMgaXMgcmVhbGx5IGEgMSBhcmd1bWVudCwgYnV0IGFsd2F5cyBoYXMgJz0nCisgICctbWlwaG9uZW9zLXZlcnNpb24tbWluJyA9PiAwICMgVGhpcyBpcyByZWFsbHkgYSAxIGFyZ3VtZW50LCBidXQgYWx3YXlzIGhhcyAnPScKKyk7CisKK215ICVJZ25vcmVkT3B0aW9uTWFwID0gKAorICAnLU1UJyA9PiAxLCAgIyBJZ25vcmUgdGhlc2UgcHJlcHJvY2Vzc29yIG9wdGlvbnMuCisgICctTUYnID0+IDEsCisKKyAgJy1mc3ludGF4LW9ubHknID0+IDAsCisgICctc2F2ZS10ZW1wcycgPT4gMCwKKyAgJy1pbnN0YWxsX25hbWUnID0+IDEsCisgICctZXhwb3J0ZWRfc3ltYm9sc19saXN0JyA9PiAxLAorICAnLWN1cnJlbnRfdmVyc2lvbicgPT4gMSwKKyAgJy1jb21wYXRpYmlsaXR5X3ZlcnNpb24nID0+IDEsCisgICctaW5pdCcgPT4gMSwKKyAgJy1lJyA9PiAxLAorICAnLXNlZzFhZGRyJyA9PiAxLAorICAnLWJ1bmRsZV9sb2FkZXInID0+IDEsCisgICctbXVsdGlwbHlfZGVmaW5lZCcgPT4gMSwKKyAgJy1zZWN0b3JkZXInID0+IDMsCisgICctLXBhcmFtJyA9PiAxLAorICAnLXUnID0+IDEsCisgICctLXNlcmlhbGl6ZS1kaWFnbm9zdGljcycgPT4gMQorKTsKKworbXkgJUxhbmdNYXAgPSAoCisgICdjJyAgID0+ICRJc0NYWCA/ICdjKysnIDogJ2MnLAorICAnY3AnICA9PiAnYysrJywKKyAgJ2NwcCcgPT4gJ2MrKycsCisgICdjeHgnID0+ICdjKysnLAorICAndHh4JyA9PiAnYysrJywKKyAgJ2NjJyAgPT4gJ2MrKycsCisgICdDJyAgID0+ICdjKysnLAorICAnaWknICA9PiAnYysrLWNwcC1vdXRwdXQnLAorICAnaScgICA9PiAkSXNDWFggPyAnYysrLWNwcC1vdXRwdXQnIDogJ2MtY3BwLW91dHB1dCcsCisgICdtJyAgID0+ICdvYmplY3RpdmUtYycsCisgICdtaScgID0+ICdvYmplY3RpdmUtYy1jcHAtb3V0cHV0JywKKyAgJ21tJyAgPT4gJ29iamVjdGl2ZS1jKysnLAorICAnbWlpJyA9PiAnb2JqZWN0aXZlLWMrKy1jcHAtb3V0cHV0JywKKyk7CisKK215ICVVbmlxdWVPcHRpb25zID0gKAorICAnLWlzeXNyb290JyA9PiAwCispOworCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBMYW5ndWFnZXMgYWNjZXB0ZWQuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitteSAlTGFuZ3NBY2NlcHRlZCA9ICgKKyAgIm9iamVjdGl2ZS1jIiA9PiAxLAorICAiYyIgPT4gMSwKKyAgImMrKyIgPT4gMSwKKyAgIm9iamVjdGl2ZS1jKysiID0+IDEsCisgICJjLWNwcC1vdXRwdXQiID0+IDEsCisgICJvYmplY3RpdmUtYy1jcHAtb3V0cHV0IiA9PiAxLAorICAiYysrLWNwcC1vdXRwdXQiID0+IDEKKyk7CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjICBNYWluIExvZ2ljLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworbXkgJEFjdGlvbiA9ICdsaW5rJzsKK215IEBDb21waWxlT3B0czsKK215IEBMaW5rT3B0czsKK215IEBGaWxlczsKK215ICRMYW5nOworbXkgJE91dHB1dDsKK215ICVVbmlxdWVkOworCisjIEZvcndhcmQgYXJndW1lbnRzIHRvIGdjYy4KK215ICRTdGF0dXMgPSBzeXN0ZW0oJENvbXBpbGVyLEBBUkdWKTsKK2lmIChkZWZpbmVkICRFTlZ7J0NDQ19BTkFMWVpFUl9MT0cnfSkgeworICBwcmludCBTVERFUlIgIiRDb21waWxlciBAQVJHVlxuIjsKK30KK2lmICgkU3RhdHVzKSB7IGV4aXQoJFN0YXR1cyA+PiA4KTsgfQorCisjIEdldCB0aGUgYW5hbHlzaXMgb3B0aW9ucy4KK215ICRBbmFseXNlcyA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9BTkFMWVNJUyd9OworCisjIEdldCB0aGUgcGx1Z2lucyB0byBsb2FkLgorbXkgJFBsdWdpbnMgPSAkRU5WeydDQ0NfQU5BTFlaRVJfUExVR0lOUyd9OworCisjIEdldCB0aGUgc3RvcmUgbW9kZWwuCitteSAkU3RvcmVNb2RlbCA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9TVE9SRV9NT0RFTCd9OworCisjIEdldCB0aGUgY29uc3RyYWludHMgZW5naW5lLgorbXkgJENvbnN0cmFpbnRzTW9kZWwgPSAkRU5WeydDQ0NfQU5BTFlaRVJfQ09OU1RSQUlOVFNfTU9ERUwnfTsKKworI0dldCB0aGUgaW50ZXJuYWwgc3RhdHMgc2V0dGluZy4KK215ICRJbnRlcm5hbFN0YXRzID0gJEVOVnsnQ0NDX0FOQUxZWkVSX0lOVEVSTkFMX1NUQVRTJ307CisKKyMgR2V0IHRoZSBvdXRwdXQgZm9ybWF0LgorbXkgJE91dHB1dEZvcm1hdCA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9PVVRQVVRfRk9STUFUJ307CitpZiAoIWRlZmluZWQgJE91dHB1dEZvcm1hdCkgeyAkT3V0cHV0Rm9ybWF0ID0gImh0bWwiOyB9CisKKyMgR2V0IHRoZSBjb25maWcgb3B0aW9ucy4KK215ICRDb25maWdPcHRpb25zID0gJEVOVnsnQ0NDX0FOQUxZWkVSX0NPTkZJRyd9OworCisjIERldGVybWluZSB0aGUgbGV2ZWwgb2YgdmVyYm9zaXR5LgorbXkgJFZlcmJvc2UgPSAwOworaWYgKGRlZmluZWQgJEVOVnsnQ0NDX0FOQUxZWkVSX1ZFUkJPU0UnfSkgeyAkVmVyYm9zZSA9IDE7IH0KK2lmIChkZWZpbmVkICRFTlZ7J0NDQ19BTkFMWVpFUl9MT0cnfSkgeyAkVmVyYm9zZSA9IDI7IH0KKworIyBHZXQgdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeS4KK215ICRIdG1sRGlyID0gJEVOVnsnQ0NDX0FOQUxZWkVSX0hUTUwnfTsKKworIyBHZXQgZm9yY2UtYW5hbHl6ZS1kZWJ1Zy1jb2RlIG9wdGlvbi4KK215ICRGb3JjZUFuYWx5emVEZWJ1Z0NvZGUgPSAkRU5WeydDQ0NfQU5BTFlaRVJfRk9SQ0VfQU5BTFlaRV9ERUJVR19DT0RFJ307CisKK215ICVEaXNhYmxlZEFyY2hzID0gKCdwcGMnID0+IDEsICdwcGM2NCcgPT4gMSk7CitteSAlQXJjaHNTZWVuOworbXkgJEhhZEFyY2ggPSAwOworbXkgJEhhc1NESyA9IDA7CisKKyMgUHJvY2VzcyB0aGUgYXJndW1lbnRzLgorZm9yZWFjaCAobXkgJGkgPSAwOyAkaSA8IHNjYWxhcihAQVJHVik7ICsrJGkpIHsKKyAgbXkgJEFyZyA9ICRBUkdWWyRpXTsKKyAgbXkgKCRBcmdLZXkpID0gc3BsaXQgLz0vLCRBcmcsMjsKKworICAjIEJlIGZyaWVuZGx5IHRvICIiIGluIHRoZSBhcmd1bWVudCBsaXN0LgorICBpZiAoIWRlZmluZWQoJEFyZ0tleSkpIHsKKyAgICBuZXh0OworICB9CisKKyAgIyBNb2RlcyBjY2MtYW5hbHl6ZXIgc3VwcG9ydHMKKyAgaWYgKCRBcmcgPX4gL14tKEV8TU0/KSQvKSB7ICRBY3Rpb24gPSAncHJlcHJvY2Vzcyc7IH0KKyAgZWxzaWYgKCRBcmcgZXEgJy1jJykgeyAkQWN0aW9uID0gJ2NvbXBpbGUnOyB9CisgIGVsc2lmICgkQXJnID1+IC9eLXByaW50LXByb2ctbmFtZS8pIHsgZXhpdCAwOyB9CisKKyAgIyBTcGVjaWFsbHkgaGFuZGxlIGR1cGxpY2F0ZSBjYXNlcyBvZiAtYXJjaAorICBpZiAoJEFyZyBlcSAiLWFyY2giKSB7CisgICAgbXkgJGFyY2ggPSAkQVJHVlskaSsxXTsKKyAgICAjIFdlIGRvbid0IHdhbnQgdG8gcHJvY2VzcyAncHBjJyBiZWNhdXNlIG9mIENsYW5nJ3MgbGFjayBvZiBzdXBwb3J0CisgICAgIyBmb3IgQWx0aXZlYyAoYWxzbyBzb21lICNkZWZpbmVzIHdvbid0IGxpa2VseSBiZSBkZWZpbmVkIGNvcnJlY3RseSwgZXRjLikKKyAgICBpZiAoIShkZWZpbmVkICREaXNhYmxlZEFyY2hzeyRhcmNofSkpIHsgJEFyY2hzU2VlbnskYXJjaH0gPSAxOyB9CisgICAgJEhhZEFyY2ggPSAxOworICAgICsrJGk7CisgICAgbmV4dDsKKyAgfQorCisgICMgT24gT1NYL2lPUywgcmVjb3JkIGlmIGFuIFNESyBwYXRoIHdhcyBzcGVjaWZpZWQuICBUaGlzCisgICMgaXMgaW5ub2N1b3VzIGZvciBvdGhlciBwbGF0Zm9ybXMsIHNvIHRoZSBjaGVjayBqdXN0IGhhcHBlbnMuCisgIGlmICgkQXJnID1+IC9eLWlzeXNyb290LykgeworICAgICRIYXNTREsgPSAxOworICB9CisKKyAgIyBPcHRpb25zIHdpdGggcG9zc2libGUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIHBhc3MgdGhyb3VnaCB0byBjb21waWxlci4KKyAgaWYgKGRlZmluZWQgJENvbXBpbGVPcHRpb25NYXB7JEFyZ0tleX0pIHsKKyAgICBteSAkQ250ID0gJENvbXBpbGVPcHRpb25NYXB7JEFyZ0tleX07CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsKKyAgICB3aGlsZSAoJENudCA+IDApIHsgKyskaTsgLS0kQ250OyBwdXNoIEBDb21waWxlT3B0cywgJEFSR1ZbJGldOyB9CisgICAgbmV4dDsKKyAgfQorICAjIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpc24ndCBhIHNwYWNlIGFmdGVyIC1pcXVvdGUKKyAgaWYgKCRBcmcgPX4gL14taXF1b3RlLiovKSB7CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsKKyAgICBuZXh0OworICB9CisKKyAgIyBPcHRpb25zIHdpdGggcG9zc2libGUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIHBhc3MgdGhyb3VnaCB0byBsaW5rZXIuCisgIGlmIChkZWZpbmVkICRMaW5rZXJPcHRpb25NYXB7JEFyZ0tleX0pIHsKKyAgICBteSAkQ250ID0gJExpbmtlck9wdGlvbk1hcHskQXJnS2V5fTsKKyAgICBwdXNoIEBMaW5rT3B0cywkQXJnOworICAgIHdoaWxlICgkQ250ID4gMCkgeyArKyRpOyAtLSRDbnQ7IHB1c2ggQExpbmtPcHRzLCAkQVJHVlskaV07IH0KKyAgICBuZXh0OworICB9CisKKyAgIyBPcHRpb25zIHdpdGggcG9zc2libGUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIHBhc3MgdGhyb3VnaCB0byBib3RoIGNvbXBpbGVyCisgICMgYW5kIHRoZSBsaW5rZXIuCisgIGlmIChkZWZpbmVkICRDb21waWxlckxpbmtlck9wdGlvbk1hcHskQXJnS2V5fSkgeworICAgIG15ICRDbnQgPSAkQ29tcGlsZXJMaW5rZXJPcHRpb25NYXB7JEFyZ0tleX07CisKKyAgICAjIENoZWNrIGlmIHRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgc2hvdWxkIGhhdmUgYSB1bmlxdWUgdmFsdWUsIGFuZCBpZiBzbworICAgICMgZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSB3YXMgY2hlY2tlZCBiZWZvcmUuCisgICAgaWYgKCRVbmlxdWVPcHRpb25zeyRBcmd9KSB7CisgICAgICBpZiAoZGVmaW5lZCAkVW5pcXVlZHskQXJnfSkgeworICAgICAgICAkaSArPSAkQ250OworICAgICAgICBuZXh0OworICAgICAgfQorICAgICAgJFVuaXF1ZWR7JEFyZ30gPSAxOworICAgIH0KKworICAgIHB1c2ggQENvbXBpbGVPcHRzLCRBcmc7CisgICAgcHVzaCBATGlua09wdHMsJEFyZzsKKworICAgIHdoaWxlICgkQ250ID4gMCkgeworICAgICAgKyskaTsgLS0kQ250OworICAgICAgcHVzaCBAQ29tcGlsZU9wdHMsICRBUkdWWyRpXTsKKyAgICAgIHB1c2ggQExpbmtPcHRzLCAkQVJHVlskaV07CisgICAgfQorICAgIG5leHQ7CisgIH0KKworICAjIElnbm9yZWQgb3B0aW9ucy4KKyAgaWYgKGRlZmluZWQgJElnbm9yZWRPcHRpb25NYXB7JEFyZ0tleX0pIHsKKyAgICBteSAkQ250ID0gJElnbm9yZWRPcHRpb25NYXB7JEFyZ0tleX07CisgICAgd2hpbGUgKCRDbnQgPiAwKSB7CisgICAgICArKyRpOyAtLSRDbnQ7CisgICAgfQorICAgIG5leHQ7CisgIH0KKworICAjIENvbXBpbGUgbW9kZSBmbGFncy4KKyAgaWYgKCRBcmcgPX4gL14tKD86W0RJVV18aXN5c3RlbSkoLiopJC8pIHsKKyAgICBteSAkVG1wID0gJEFyZzsKKyAgICBpZiAoJDEgZXEgJycpIHsKKyAgICAgICMgRklYTUU6IENoZWNrIGlmIHdlIGFyZSBnb2luZyBvZmYgdGhlIGVuZC4KKyAgICAgICsrJGk7CisgICAgICAkVG1wID0gJEFyZyAuICRBUkdWWyRpXTsKKyAgICB9CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsJFRtcDsKKyAgICBuZXh0OworICB9CisKKyAgaWYgKCRBcmcgPX4gL14tbS4qLykgeworICAgIHB1c2ggQENvbXBpbGVPcHRzLCRBcmc7CisgICAgbmV4dDsKKyAgfQorCisgICMgTGFuZ3VhZ2UuCisgIGlmICgkQXJnIGVxICcteCcpIHsKKyAgICAkTGFuZyA9ICRBUkdWWyRpKzFdOworICAgICsrJGk7IG5leHQ7CisgIH0KKworICAjIE91dHB1dCBmaWxlLgorICBpZiAoJEFyZyBlcSAnLW8nKSB7CisgICAgKyskaTsKKyAgICAkT3V0cHV0ID0gJEFSR1ZbJGldOworICAgIG5leHQ7CisgIH0KKworICAjIEdldCB0aGUgbGluayBtb2RlLgorICBpZiAoJEFyZyA9fiAvXi1bbCxMLE9dLykgeworICAgIGlmICgkQXJnIGVxICctTycpIHsgcHVzaCBATGlua09wdHMsJy1PMSc7IH0KKyAgICBlbHNpZiAoJEFyZyBlcSAnLU9zJykgeyBwdXNoIEBMaW5rT3B0cywnLU8yJzsgfQorICAgIGVsc2UgeyBwdXNoIEBMaW5rT3B0cywkQXJnOyB9CisKKyAgICAjIE11c3QgcGFzcyB0aGlzIGFsb25nIGZvciB0aGUgX19PUFRJTUlaRV9fIG1hY3JvCisgICAgaWYgKCRBcmcgPX4gL14tTy8pIHsgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsgfQorICAgIG5leHQ7CisgIH0KKworICBpZiAoJEFyZyA9fiAvXi1zdGQ9LykgeworICAgIHB1c2ggQENvbXBpbGVPcHRzLCRBcmc7CisgICAgbmV4dDsKKyAgfQorCisgICMgR2V0IHRoZSBjb21waWxlci9saW5rIG1vZGUuCisgIGlmICgkQXJnID1+IC9eLUYoLispJC8pIHsKKyAgICBteSAkVG1wID0gJEFyZzsKKyAgICBpZiAoJDEgZXEgJycpIHsKKyAgICAgICMgRklYTUU6IENoZWNrIGlmIHdlIGFyZSBnb2luZyBvZmYgdGhlIGVuZC4KKyAgICAgICsrJGk7CisgICAgICAkVG1wID0gJEFyZyAuICRBUkdWWyRpXTsKKyAgICB9CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsJFRtcDsKKyAgICBwdXNoIEBMaW5rT3B0cywkVG1wOworICAgIG5leHQ7CisgIH0KKworICAjIElucHV0IGZpbGVzLgorICBpZiAoJEFyZyBlcSAnLWZpbGVsaXN0JykgeworICAgICMgRklYTUU6IE1ha2Ugc3VyZSB3ZSBhcmVuJ3Qgd2Fsa2luZyBvZmYgdGhlIGVuZC4KKyAgICBvcGVuKElOLCAkQVJHVlskaSsxXSk7CisgICAgd2hpbGUgKDxJTj4pIHsgcy9cMDE1P1wwMTIvLzsgcHVzaCBARmlsZXMsJF87IH0KKyAgICBjbG9zZShJTik7CisgICAgKyskaTsKKyAgICBuZXh0OworICB9CisKKyAgaWYgKCRBcmcgPX4gL14tZi8pIHsKKyAgICBwdXNoIEBDb21waWxlT3B0cywkQXJnOworICAgIHB1c2ggQExpbmtPcHRzLCRBcmc7CisgICAgbmV4dDsKKyAgfQorCisgICMgSGFuZGxlIC1Xbm8tLiAgV2UgZG9uJ3QgY2FyZSBhYm91dCBleHRyYSB3YXJuaW5ncywgYnV0CisgICMgd2Ugc2hvdWxkIHN1cHByZXNzIG9uZXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHNlZS4KKyAgaWYgKCRBcmcgPX4gL14tV25vLS8pIHsKKyAgICBwdXNoIEBDb21waWxlT3B0cywgJEFyZzsKKyAgICBuZXh0OworICB9CisKKyAgIyBIYW5kbGUgLVhjbGFuZyBzb21lLWFyZy4gQWRkIGJvdGggYXJndW1lbnRzIHRvIHRoZSBjb21waWxlciBvcHRpb25zLgorICBpZiAoJEFyZyA9fiAvXi1YY2xhbmckLykgeworICAgICMgRklYTUU6IENoZWNrIGlmIHdlIGFyZSBnb2luZyBvZmYgdGhlIGVuZC4KKyAgICArKyRpOworICAgIHB1c2ggQENvbXBpbGVPcHRzLCAkQXJnOworICAgIHB1c2ggQENvbXBpbGVPcHRzLCAkQVJHVlskaV07CisgICAgbmV4dDsKKyAgfQorCisgIGlmICghKCRBcmcgPX4gL14tLykpIHsKKyAgICBwdXNoIEBGaWxlcywgJEFyZzsKKyAgICBuZXh0OworICB9Cit9CisKKyMgRm9yY2VkbHkgZW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQgYnkgdXNlci4KK2lmICgkRm9yY2VBbmFseXplRGVidWdDb2RlKSB7CisgIHB1c2ggQENvbXBpbGVPcHRzLCAnLVVOREVCVUcnOworfQorCisjIElmIHdlIGFyZSBvbiBPU1ggYW5kIGhhdmUgYW4gaW5zdGFsbGF0aW9uIHdoZXJlIHRoZQorIyBkZWZhdWx0IFNESyBpcyBpbmZlcnJlZCBieSB4Y3J1biB1c2UgeGNydW4gdG8gaW5mZXIKKyMgdGhlIFNESy4KK2lmIChub3QgJEhhc1NESyBhbmQgJFVzZVhDUlVOKSB7CisgIG15ICRzZGsgPSBgL3Vzci9iaW4veGNydW4gLS1zaG93LXNkay1wYXRoIC1zZGsgbWFjb3N4YDsKKyAgY2hvbXAgJHNkazsKKyAgcHVzaCBAQ29tcGlsZU9wdHMsICItaXN5c3Jvb3QiLCAkc2RrOworfQorCitpZiAoJEFjdGlvbiBlcSAnY29tcGlsZScgb3IgJEFjdGlvbiBlcSAnbGluaycpIHsKKyAgbXkgQEFyY2hzID0ga2V5cyAlQXJjaHNTZWVuOworICAjIFNraXAgdGhlIGZpbGUgaWYgd2UgZG9uJ3Qgc3VwcG9ydCB0aGUgYXJjaGl0ZWN0dXJlcyBzcGVjaWZpZWQuCisgIGV4aXQgMCBpZiAoJEhhZEFyY2ggJiYgc2NhbGFyKEBBcmNocykgPT0gMCk7CisKKyAgZm9yZWFjaCBteSAkZmlsZSAoQEZpbGVzKSB7CisgICAgIyBEZXRlcm1pbmUgdGhlIGxhbmd1YWdlIGZvciB0aGUgZmlsZS4KKyAgICBteSAkRmlsZUxhbmcgPSAkTGFuZzsKKworICAgIGlmICghZGVmaW5lZCgkRmlsZUxhbmcpKSB7CisgICAgICAjIEluZmVyIHRoZSBsYW5ndWFnZSBmcm9tIHRoZSBleHRlbnNpb24uCisgICAgICBpZiAoJGZpbGUgPX4gL1suXShbXi5dKykkLykgeworICAgICAgICAkRmlsZUxhbmcgPSAkTGFuZ01hcHskMX07CisgICAgICB9CisgICAgfQorCisgICAgIyBGaWxlTGFuZyBzdGlsbCBub3QgZGVmaW5lZD8gIFNraXAgdGhlIGZpbGUuCisgICAgbmV4dCBpZiAoIWRlZmluZWQgJEZpbGVMYW5nKTsKKworICAgICMgTGFuZ3VhZ2Ugbm90IGFjY2VwdGVkPworICAgIG5leHQgaWYgKCFkZWZpbmVkICRMYW5nc0FjY2VwdGVkeyRGaWxlTGFuZ30pOworCisgICAgbXkgQENtZEFyZ3M7CisgICAgbXkgQEFuYWx5emVBcmdzOworCisgICAgaWYgKCRGaWxlTGFuZyBuZSAndW5rbm93bicpIHsKKyAgICAgIHB1c2ggQENtZEFyZ3MsICcteCcsICRGaWxlTGFuZzsKKyAgICB9CisKKyAgICBpZiAoZGVmaW5lZCAkU3RvcmVNb2RlbCkgeworICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsICItYW5hbHl6ZXItc3RvcmU9JFN0b3JlTW9kZWwiOworICAgIH0KKworICAgIGlmIChkZWZpbmVkICRDb25zdHJhaW50c01vZGVsKSB7CisgICAgICBwdXNoIEBBbmFseXplQXJncywgIi1hbmFseXplci1jb25zdHJhaW50cz0kQ29uc3RyYWludHNNb2RlbCI7CisgICAgfQorCisgICAgaWYgKGRlZmluZWQgJEludGVybmFsU3RhdHMpIHsKKyAgICAgIHB1c2ggQEFuYWx5emVBcmdzLCAiLWFuYWx5emVyLXN0YXRzIjsKKyAgICB9CisKKyAgICBpZiAoZGVmaW5lZCAkQW5hbHlzZXMpIHsKKyAgICAgIHB1c2ggQEFuYWx5emVBcmdzLCBzcGxpdCAnXHMrJywgJEFuYWx5c2VzOworICAgIH0KKworICAgIGlmIChkZWZpbmVkICRQbHVnaW5zKSB7CisgICAgICBwdXNoIEBBbmFseXplQXJncywgc3BsaXQgJ1xzKycsICRQbHVnaW5zOworICAgIH0KKworICAgIGlmIChkZWZpbmVkICRPdXRwdXRGb3JtYXQpIHsKKyAgICAgIHB1c2ggQEFuYWx5emVBcmdzLCAiLWFuYWx5emVyLW91dHB1dD0iIC4gJE91dHB1dEZvcm1hdDsKKyAgICAgIGlmICgkT3V0cHV0Rm9ybWF0ID1+IC9wbGlzdC8pIHsKKyAgICAgICAgIyBDaGFuZ2UgIk91dHB1dCIgdG8gYmUgYSBmaWxlLgorICAgICAgICBteSAoJGgsICRmKSA9IHRlbXBmaWxlKCJyZXBvcnQtWFhYWFhYIiwgU1VGRklYID0+ICIucGxpc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJUiA9PiAkSHRtbERpcik7CisgICAgICAgICRSZXN1bHRGaWxlID0gJGY7CisgICAgICAgICMgSWYgdGhlIEh0bWxEaXIgaXMgbm90IHNldCwgd2Ugc2hvdWxkIGNsZWFuIHVwIHRoZSBwbGlzdCBmaWxlcy4KKyAgICAgICAgaWYgKCFkZWZpbmVkICRIdG1sRGlyIHx8IC16ICRIdG1sRGlyKSB7CisgICAgICAgICAgJENsZWFudXBGaWxlID0gJGY7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGRlZmluZWQgJENvbmZpZ09wdGlvbnMpIHsKKyAgICAgIHB1c2ggQEFuYWx5emVBcmdzLCBzcGxpdCAnXHMrJywgJENvbmZpZ09wdGlvbnM7CisgICAgfQorCisgICAgcHVzaCBAQ21kQXJncywgQENvbXBpbGVPcHRzOworICAgIHB1c2ggQENtZEFyZ3MsICRmaWxlOworCisgICAgaWYgKHNjYWxhciBAQXJjaHMpIHsKKyAgICAgIGZvcmVhY2ggbXkgJGFyY2ggKEBBcmNocykgeworICAgICAgICBteSBATmV3QXJnczsKKyAgICAgICAgcHVzaCBATmV3QXJncywgJy1hcmNoJywgJGFyY2g7CisgICAgICAgIHB1c2ggQE5ld0FyZ3MsIEBDbWRBcmdzOworICAgICAgICBBbmFseXplKCRDbGFuZywgXEBOZXdBcmdzLCBcQEFuYWx5emVBcmdzLCAkRmlsZUxhbmcsICRPdXRwdXQsCisgICAgICAgICAgICAgICAgJFZlcmJvc2UsICRIdG1sRGlyLCAkZmlsZSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgQW5hbHl6ZSgkQ2xhbmcsIFxAQ21kQXJncywgXEBBbmFseXplQXJncywgJEZpbGVMYW5nLCAkT3V0cHV0LAorICAgICAgICAgICAgICAkVmVyYm9zZSwgJEh0bWxEaXIsICRmaWxlKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2NjYy1hbmFseXplci5iYXQgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jY2MtYW5hbHl6ZXIuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZDM2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jY2MtYW5hbHl6ZXIuYmF0CkBAIC0wLDAgKzEgQEAKK3BlcmwgLVMgY2NjLWFuYWx5emVyICUqCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvbWFuL3NjYW4tYnVpbGQuMSBiL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi1idWlsZC9tYW4vc2Nhbi1idWlsZC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkM2E5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvbWFuL3NjYW4tYnVpbGQuMQpAQCAtMCwwICsxLDM0OSBAQAorLlwiIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLlwiIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy5cIiAkSWQkCisuRGQgTWF5IDI1LCAyMDEyCisuRHQgU0NBTi1CVUlMRCAxCisuT3MgImNsYW5nIiAiMy41IgorLlNoIE5BTUUKKy5ObSBzY2FuLWJ1aWxkCisuTmQgQ2xhbmcgc3RhdGljIGFuYWx5emVyCisuU2ggU1lOT1BTSVMKKy5ObQorLk9wIEZsIG9oa3ZWCisuT3AgRmwgYW5hbHl6ZS1oZWFkZXJzCisuT3AgRmwgZW5hYmxlLWNoZWNrZXIgT3AgQXIgY2hlY2tlcl9uYW1lCisuT3AgRmwgZGlzYWJsZS1jaGVja2VyIE9wIEFyIGNoZWNrZXJfbmFtZQorLk9wIEZsIEZsIGhlbHAKKy5PcCBGbCBGbCBoZWxwLWNoZWNrZXJzCisuT3AgRmwgRmwgaHRtbC10aXRsZSBPcCBBciA9dGl0bGUKKy5PcCBGbCBGbCBrZWVwLWdvaW5nCisuT3AgRmwgcGxpc3QKKy5PcCBGbCBwbGlzdC1odG1sCisuT3AgRmwgRmwgc3RhdHVzLWJ1Z3MKKy5PcCBGbCBGbCB1c2UtYysrIE9wIEFyID1jb21waWxlcl9wYXRoCisuT3AgRmwgRmwgdXNlLWNjIE9wIEFyID1jb21waWxlcl9wYXRoCisuT3AgRmwgRmwgdmlldworLk9wIEZsIGNvbnN0cmFpbnRzIE9wIEFyIG1vZGVsCisuT3AgRmwgbWF4bG9vcCBBciBOCisuT3AgRmwgbm8tZmFpbHVyZS1yZXBvcnRzCisuT3AgRmwgc3RhdHMKKy5PcCBGbCBzdG9yZSBPcCBBciBtb2RlbAorLkFyIGJ1aWxkX2NvbW1hbmQKKy5PcCBidWlsZF9vcHRpb25zCisuXCIKKy5cIiBTaCBERVNDUklQVElPTgorLlNoIERFU0NSSVBUSU9OCisuTm0KK2lzIGEgUGVybCBzY3JpcHQgdGhhdCBpbnZva2VzIHRoZSBDbGFuZyBzdGF0aWMgYW5hbHl6ZXIuICBPcHRpb25zIHVzZWQgYnkKKy5ObQorb3IgYnkgdGhlIGFuYWx5emVyIGFwcGVhciBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlCisuQXIgYnVpbGRfY29tbWFuZAorYW5kIGFueQorLkFyIGJ1aWxkX29wdGlvbnMKK25vcm1hbGx5IHVzZWQgdG8gYnVpbGQgdGhlIHRhcmdldCBzeXN0ZW0uCisuUHAKK1RoZSBzdGF0aWMgYW5hbHl6ZXIgZW1wbG95cyBhIGxvbmcgbGlzdCBvZiBjaGVja2luZyBhbGdvcml0aG1zLCBzZWUKKy5TeCBDSEVDS0VSUyAuCitPdXRwdXQgY2FuIGJlIHdyaXR0ZW4gaW4gc3RhbmRhcmQKKy5MaSAucGxpc3QKK2FuZC9vciBIVE1MIGZvcm1hdC4KKy5QcAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisuQmwgLXRhZyAtd2lkdGggaW5kZW50CisuSXQgRmwgYW5hbHl6ZS1oZWFkZXJzCitBbHNvIGFuYWx5emUgZnVuY3Rpb25zIGluICNpbmNsdWRlZCBmaWxlcy4KKy5JdCBGbCBlbmFibGUtY2hlY2tlciBBciBjaGVja2VyX25hbWUgLCBGbCBkaXNhYmxlLWNoZWNrZXIgQXIgY2hlY2tlcl9uYW1lCitFbmFibGUvZGlzYWJsZQorLkFyIGNoZWNrZXJfbmFtZSAuCitTZWUKKy5TeCBDSEVDS0VSUyAuCisuSXQgRmwgaCAsIEZsIEZsIGhlbHAKK0Rpc3BsYXkgdGhpcyBtZXNzYWdlLgorLkl0IEZsIEZsIGhlbHAtY2hlY2tlcnMKK0xpc3QgZGVmYXVsdCBjaGVja2Vycywgc2VlCisuU3ggQ0hFQ0tFUlMgLgorLkl0IEZsIEZsIGh0bWwtdGl0bGUgTnMgT3AgPSBOcyBBciB0aXRsZQorU3BlY2lmeSB0aGUgdGl0bGUgdXNlZCBvbiBnZW5lcmF0ZWQgSFRNTCBwYWdlcy4KK0EgZGVmYXVsdCB0aXRsZSBpcyBnZW5lcmF0ZWQgaWYKKy5BciB0aXRsZQoraXMgbm90IHNwZWNpZmllZC4KKy5JdCBGbCBrICwgRmwgRmwga2VlcC1nb2luZworQWRkIGEKKy5EcSBrZWVwIG9uIGdvaW5nCitvcHRpb24gdG8KKy5BciBidWlsZF9jb21tYW5kIC4KK0N1cnJlbnRseSBzdXBwb3J0cyBtYWtlIGFuZCB4Y29kZWJ1aWxkLiBUaGlzIGlzIGEgY29udmVuaWVuY2Ugb3B0aW9uOworb25lIGNhbiBzcGVjaWZ5IHRoaXMgYmVoYXZpb3IgZGlyZWN0bHkgdXNpbmcgYnVpbGQgb3B0aW9ucy4KKy5JdCBGbCBvCitUYXJnZXQgZGlyZWN0b3J5IGZvciBIVE1MIHJlcG9ydCBmaWxlcy4gIFN1YmRpcmVjdG9yaWVzIHdpbGwgYmUKK2NyZWF0ZWQgYXMgbmVlZGVkIHRvIHJlcHJlc2VudCBzZXBhcmF0ZSBpbnZvY2F0aW9ucworb2YgdGhlIGFuYWx5emVyLiAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgYSBkaXJlY3RvcnkgaXMKK2NyZWF0ZWQgaW4gL3RtcCAoVE1QRElSIG9uIE1hYyBPUyBYKSB0byBzdG9yZSB0aGUgcmVwb3J0cy4KKy5JdCBGbCBwbGlzdAorT3V0cHV0IHRoZSByZXN1bHRzIGFzIGEgc2V0IG9mCisuTGkgLnBsaXN0CitmaWxlcy4gKEJ5IGRlZmF1bHQgdGhlIG91dHB1dCBvZgorLk5tCitpcyBhIHNldCBvZiBIVE1MIGZpbGVzLikKKy5JdCBGbCBwbGlzdC1odG1sCitPdXRwdXQgdGhlIHJlc3VsdHMgYXMgYSBzZXQgb2YgSFRNTCBhbmQgLnBsaXN0IGZpbGVzCisuSXQgRmwgRmwgc3RhdHVzLWJ1Z3MKK1NldCBleGl0IHN0YXR1cyB0byAxIGlmIGl0IGZvdW5kIHBvdGVudGlhbCBidWdzIGFuZCAwIG90aGVyd2lzZS4gQnkKK2RlZmF1bHQgdGhlIGV4aXQgc3RhdHVzIG9mCisuTm0KK2lzIHRoYXQgcmV0dXJuZWQgYnkKKy5BciBidWlsZF9jb21tYW5kIC4KKy5JdCBGbCBGbCB1c2UtYysrIE5zIE9wID0gTnMgQXIgY29tcGlsZXJfcGF0aAorR3Vlc3MgdGhlIGRlZmF1bHQgY29tcGlsZXIgZm9yIHlvdXIgQysrIGFuZCBPYmplY3RpdmUtQysrIGNvZGUuIFVzZSB0aGlzCitvcHRpb24gdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGUgY29tcGlsZXIuCisuSXQgRmwgRmwgdXNlLWNjIE5zIE9wID0gTnMgQXIgY29tcGlsZXJfcGF0aAorR3Vlc3MgdGhlIGRlZmF1bHQgY29tcGlsZXIgZm9yIHlvdXIgQyBhbmQgT2JqZWN0aXZlLUMgY29kZS4gVXNlIHRoaXMKK29wdGlvbiB0byBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBjb21waWxlci4KKy5JdCBGbCB2CitWZXJib3NlIG91dHB1dCBmcm9tCisuTm0KK2FuZCB0aGUgYW5hbHl6ZXIuIEEgc2Vjb25kIGFuZAordGhpcmQKKy5BciB2CitpbmNyZWFzZXMgdmVyYm9zaXR5LgorLkl0IEZsIFYgLCBGbCBGbCB2aWV3CitWaWV3IGFuYWx5c2lzIHJlc3VsdHMgaW4gYSB3ZWIgYnJvd3NlciB3aGVuIHRoZSBidWlsZCBjb21wbGV0ZXMuCisuSXQgRmwgY29uc3RyYWludHMgT3AgQXIgbW9kZWwKK1NwZWNpZnkgdGhlIGNvbnRyYWludCBlbmdpbmUgdXNlZCBieSB0aGUgYW5hbHl6ZXIuICBCeSBkZWZhdWx0IHRoZQorLlFsIHJhbmdlCittb2RlbCBpcyB1c2VkLiAgU3BlY2lmeWluZworLlFsIGJhc2ljCit1c2VzIGEgc2ltcGxlciwgbGVzcyBwb3dlcmZ1bCBjb25zdHJhaW50IG1vZGVsIHVzZWQgYnkgY2hlY2tlci0wLjE2MAorYW5kIGVhcmxpZXIuCisuSXQgRmwgbWF4bG9vcCBBciBOCitTcGVjaWZpeSB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgYmxvY2sgY2FuIGJlIHZpc2l0ZWQgYmVmb3JlIGdpdmluZwordXAuIERlZmF1bHQgaXMgNC4gSW5jcmVhc2UgZm9yIG1vcmUgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSBhdCBhCitjb3N0IG9mIHNwZWVkLgorLkl0IEZsIG5vLWZhaWx1cmUtcmVwb3J0cworRG8gbm90IGNyZWF0ZSBhCisuUWwgZmFpbHVyZXMKK3N1YmRpcmVjdG9yeSB0aGF0IGluY2x1ZGVzIGFuYWx5emVyIGNyYXNoIHJlcG9ydHMgYW5kIHByZXByb2Nlc3NlZAorc291cmNlIGZpbGVzLgorLkl0IEZsIHN0YXRzCitHZW5lcmF0ZXMgdmlzaXRhdGlvbiBzdGF0aXN0aWNzIGZvciB0aGUgcHJvamVjdCBiZWluZyBhbmFseXplZC4KKy5JdCBGbCBzdG9yZSBPcCBBciBtb2RlbAorU3BlY2lmeSB0aGUgc3RvcmUgbW9kZWwgdXNlZCBieSB0aGUgYW5hbHl6ZXIuIEJ5IGRlZmF1bHQsIHRoZQorLlFsIHJlZ2lvbgorc3RvcmUgbW9kZWwgaXMgdXNlZC4KKy5RbCByZWdpb24KK3NwZWNpZmllcyBhIGZpZWxkLQorc2Vuc2l0aXZlIHN0b3JlIG1vZGVsLiBVc2VycyBjYW4gYWxzbyBzcGVjaWZ5CisuUWwgYmFzaWMKK3doaWNoIGlzIGZhciBsZXNzIHByZWNpc2UgYnV0IGNhbiBtb3JlIHF1aWNrbHkgYW5hbHl6ZSBjb2RlLgorLlFsIGJhc2ljCit3YXMgdGhlIGRlZmF1bHQgc3RvcmUgbW9kZWwgZm9yIGNoZWNrZXItMC4yMjEgYW5kIGVhcmxpZXIuCisuXCIKKy5FbAorLlNoIEVYSVQgU1RBVFVTCisuTm0KK3JldHVybnMgdGhlIHZhbHVlIHJldHVybmVkIGJ5CisuQXIgYnVpbGRfY29tbWFuZAordW5sZXNzCisuRmwgRmwgc3RhdHVzLWJ1Z3MKK29yCisuRmwgRmwga2VlcC1nb2luZworaXMgdXNlZC4KKy5cIgorLlwiIE90aGVyIHNlY3Rpb25zIG5vdCB5ZXQgdXNlZCAuLi4KKy5cIiAuU2ggRU5WSVJPTk1FTlQKKy5cIiAuU2ggRklMRVMKKy5cIiAuU2ggRElBR05PU1RJQ1MKKy5cIiAuU2ggQ09NUEFUSUJJTElUWQorLlwiIC5TaCBISVNUT1JZCisuXCIgLlNoIEJVR1MKKy5cIgorLlNoIENIRUNLRVJTCitUaGUgY2hlY2tlcnMgbGlzdGVkIGJlbG93IG1heSBiZSBlbmFibGVkL2Rpc2FibGVkIHVzaW5nIHRoZQorLkZsIGVuYWJsZS1jaGVja2VyCithbmQKKy5GbCBkaXNhYmxlLWNoZWNrZXIKK29wdGlvbnMuCitBIGRlZmF1bHQgZ3JvdXAgb2YgY2hlY2tlcnMgaXMgcnVuIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkLgorRXhhY3RseSB3aGljaCBjaGVja2VycyBjb25zdGl0dXRlIHRoZSBkZWZhdWx0IGdyb3VwIGlzIGEgZnVuY3Rpb24KK29mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGluIHVzZTsgdGhleSBhcmUgbGlzdGVkIHdpdGgKKy5GbCBGbCBoZWxwLWNoZWNrZXJzIC4KKy5CbCAtdGFnIC13aWR0aCBpbmRlbnQuCisuSXQgY29yZS5BZGp1c3RlZFJldHVyblZhbHVlCitDaGVjayB0byBzZWUgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGNhbGwgaXMgZGlmZmVyZW50IHRoYW4KK3RoZSBjYWxsZXIgZXhwZWN0cyAoZS5nLiwgZnJvbSBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzKS4KKy5JdCBjb3JlLkF0dHJpYnV0ZU5vbk51bGwKK0NoZWNrIGZvciBudWxsIHBvaW50ZXJzIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiB3aG9zZSBhcmd1bWVudHMgYXJlIG1hcmtlZCB3aXRoIHRoZQorLlFsIG5vbm51bGwKK2F0dHJpYnV0ZS4KKy5JdCBjb3JlLkNhbGxBbmRNZXNzYWdlCitDaGVjayBmb3IgbG9naWNhbCBlcnJvcnMgZm9yIGZ1bmN0aW9uIGNhbGxzIGFuZCBPYmplY3RpdmUtQyBtZXNzYWdlIGV4cHJlc3Npb25zIChlLmcuLCB1bmluaXRpYWxpemVkIGFyZ3VtZW50cywgbnVsbCBmdW5jdGlvbiBwb2ludGVycykuCisuSXQgY29yZS5EaXZpZGVaZXJvCitDaGVjayBmb3IgZGl2aXNpb24gYnkgemVyby4KKy5JdCBjb3JlLk51bGxEZXJlZmVyZW5jZQorQ2hlY2sgZm9yIGRlcmVmZXJlbmNlcyBvZiBudWxsIHBvaW50ZXJzLgorLkl0IGNvcmUuU3RhY2tBZGRyZXNzRXNjYXBlCitDaGVjayB0aGF0IGFkZHJlc3NlcyB0byBzdGFjayBtZW1vcnkgZG8gbm90IGVzY2FwZSB0aGUgZnVuY3Rpb24uCisuSXQgY29yZS5VbmRlZmluZWRCaW5hcnlPcGVyYXRvclJlc3VsdAorQ2hlY2sgZm9yIHVuZGVmaW5lZCByZXN1bHRzIG9mIGJpbmFyeSBvcGVyYXRvcnMuCisuSXQgY29yZS5WTEFTaXplCitDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIFZMQSBvZiB1bmRlZmluZWQgb3IgemVybyBzaXplLgorLkl0IGNvcmUuYnVpbHRpbi5CdWlsdGluRnVuY3Rpb25zCitFdmFsdWF0ZSBjb21waWxlciBidWlsdGluIGZ1bmN0aW9ucywgZS5nLgorLkZuIGFsbG9jYSAuCisuSXQgY29yZS5idWlsdGluLk5vUmV0dXJuRnVuY3Rpb25zCitFdmFsdWF0ZQorLlFsIHBhbmljCitmdW5jdGlvbnMgdGhhdCBhcmUga25vd24gdG8gbm90IHJldHVybiB0byB0aGUgY2FsbGVyLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5BcnJheVN1YnNjcmlwdAorQ2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHVzZWQgYXMgYXJyYXkgc3Vic2NyaXB0cy4KKy5JdCBjb3JlLnVuaW5pdGlhbGl6ZWQuQXNzaWduCitDaGVjayBmb3IgYXNzaWduaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5CcmFuY2gKK0NoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VkIGFzIGJyYW5jaCBjb25kaXRpb25zLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5DYXB0dXJlZEJsb2NrVmFyaWFibGUKK0NoZWNrIGZvciBibG9ja3MgdGhhdCBjYXB0dXJlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5VbmRlZlJldHVybgorQ2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGJlaW5nIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisuSXQgZGVhZGNvZGUuRGVhZFN0b3JlcworQ2hlY2sgZm9yIHZhbHVlcyBzdG9yZWQgdG8gdmFyaWFibGVzIHRoYXQgYXJlIG5ldmVyIHJlYWQgYWZ0ZXJ3YXJkcy4KKy5JdCBkZWJ1Zy5EdW1wQ0ZHCitEaXNwbGF5IENvbnRyb2wtRmxvdyBHcmFwaHMuCisuSXQgZGVidWcuRHVtcENhbGxHcmFwaAorRGlzcGxheSBDYWxsIEdyYXBoLgorLkl0IGRlYnVnLkR1bXBEb21pbmF0b3JzCitQcmludCB0aGUgZG9taW5hbmNlIHRyZWUgZm9yIGEgZ2l2ZW4gQ29udHJvbC1GbG93IEdyYXBoLgorLkl0IGRlYnVnLkR1bXBMaXZlVmFycworUHJpbnQgcmVzdWx0cyBvZiBsaXZlIHZhcmlhYmxlIGFuYWx5c2lzLgorLkl0IGRlYnVnLlN0YXRzCitFbWl0IHdhcm5pbmdzIHdpdGggYW5hbHl6ZXIgc3RhdGlzdGljcy4KKy5JdCBkZWJ1Zy5UYWludFRlc3QKK01hcmsgdGFpbnRlZCBzeW1ib2xzIGFzIHN1Y2guCisuSXQgZGVidWcuVmlld0NGRworVmlldyBDb250cm9sLUZsb3cgR3JhcGhzIHVzaW5nCisuSWMgR3JhcGhWaXogLgorLkl0IGRlYnVnLlZpZXdDYWxsR3JhcGgKK1ZpZXcgQ2FsbCBHcmFwaCB1c2luZworLkljIEdyYXBoVml6IC4KKy5JdCBsbHZtLkNvbnZlbnRpb25zCitDaGVjayBjb2RlIGZvciBMTFZNIGNvZGViYXNlIGNvbnZlbnRpb25zLgorLkl0IG9zeC5BUEkKK0NoZWNrIGZvciBwcm9wZXIgdXNlcyBvZiB2YXJpb3VzIE1hYyBPUyBYIEFQSXMuCisuSXQgb3N4LkF0b21pY0NBUworRXZhbHVhdGUgY2FsbHMgdG8KKy5WdCBPU0F0b21pYworZnVuY3Rpb25zLgorLkl0IG9zeC5TZWNLZXljaGFpbkFQSQorQ2hlY2sgZm9yIHByb3BlciB1c2VzIG9mIFNlY3VyZSBLZXljaGFpbiBBUElzLgorLkl0IG9zeC5jb2NvYS5BdFN5bmMKK0NoZWNrIGZvciBudWxsIHBvaW50ZXJzIHVzZWQgYXMgbXV0ZXhlcyBmb3IgQHN5bmNocm9uaXplZC4KKy5JdCBvc3guY29jb2EuQ2xhc3NSZWxlYXNlCitDaGVjayBmb3Igc2VuZGluZworLlFsIHJldGFpbiAsCisuUWwgcmVsZWFzZSwKK29yCisuUWwgYXV0b3JlbGVhc2UKK2RpcmVjdGx5IHRvIGEgQ2xhc3MuCisuSXQgb3N4LmNvY29hLkluY29tcGF0aWJsZU1ldGhvZFR5cGVzCitXYXJuIGFib3V0IE9iamVjdGl2ZS1DIG1ldGhvZCBzaWduYXR1cmVzIHdpdGggdHlwZSBpbmNvbXBhdGliaWxpdGllcy4KKy5JdCBvc3guY29jb2EuTlNBdXRvcmVsZWFzZVBvb2wKK1dhcm4gZm9yIHN1Ym9wdGltYWwgdXNlcyBvZgorLlZ0IE5TQXV0b3JlbGVhc2VQb29sCitpbiBPYmplY3RpdmUtQyBHQyBtb2RlLgorLkl0IG9zeC5jb2NvYS5OU0Vycm9yCitDaGVjayB1c2FnZSBvZiBOU0Vycm9yKiogcGFyYW1ldGVycy4KKy5JdCBvc3guY29jb2EuTmlsQXJnCitDaGVjayBmb3IgcHJvaGliaXRlZCBuaWwgYXJndW1lbnRzIHRvIE9iamVjdGl2ZS1DIG1ldGhvZCBjYWxscy4KKy5JdCBvc3guY29jb2EuUmV0YWluQ291bnQKK0NoZWNrIGZvciBsZWFrcyBhbmQgaW1wcm9wZXIgcmVmZXJlbmNlIGNvdW50IG1hbmFnZW1lbnQuCisuSXQgb3N4LmNvY29hLlNlbGZJbml0CitDaGVjayB0aGF0CisuUWwgc2VsZgoraXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW5zaWRlIGFuIGluaXRpYWxpemVyIG1ldGhvZC4KKy5JdCBvc3guY29jb2EuVW51c2VkSXZhcnMKK1dhcm4gYWJvdXQgcHJpdmF0ZSBpdmFycyB0aGF0IGFyZSBuZXZlciB1c2VkLgorLkl0IG9zeC5jb2NvYS5WYXJpYWRpY01ldGhvZFR5cGVzCitDaGVjayBmb3IgcGFzc2luZyBub24tT2JqZWN0aXZlLUMgdHlwZXMgdG8gdmFyaWFkaWMgbWV0aG9kcyB0aGF0IGV4cGVjdCBvbmx5IE9iamVjdGl2ZS1DIHR5cGVzLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5DRkVycm9yCitDaGVjayB1c2FnZSBvZiBDRkVycm9yUmVmKiBwYXJhbWV0ZXJzLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5DRk51bWJlcgorQ2hlY2sgZm9yIHByb3BlciB1c2VzIG9mCisuRm4gQ0ZOdW1iZXJDcmVhdGUgLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5DRlJldGFpblJlbGVhc2UKK0NoZWNrIGZvciBudWxsIGFyZ3VtZW50cyB0bworLkZuIENGUmV0YWluICwKKy5GbiBDRlJlbGVhc2UgLAorYW5kCisuRm4gQ0ZNYWtlQ29sbGVjdGFibGUgLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5jb250YWluZXJzLk91dE9mQm91bmRzCitDaGVja3MgZm9yIGluZGV4IG91dC1vZi1ib3VuZHMgd2hlbiB1c2luZyB0aGUKKy5WdCBDRkFycmF5CitBUEkuCisuSXQgb3N4LmNvcmVGb3VuZGF0aW9uLmNvbnRhaW5lcnMuUG9pbnRlclNpemVkVmFsdWVzCitXYXJucyBpZgorLlZ0IENGQXJyYXkgLAorLlZ0IENGRGljdGlvbmFyeSAsCitvcgorLlZ0IENGU2V0CithcmUgY3JlYXRlZCB3aXRoIG5vbi1wb2ludGVyLXNpemUgdmFsdWVzLgorLkl0IHNlY3VyaXR5LkZsb2F0TG9vcENvdW50ZXIKK1dhcm4gb24gdXNpbmcgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBhcyBhIGxvb3AgY291bnRlciAoQ0VSVDogRkxQMzAtQywgRkxQMzAtQ1BQKS4KKy5JdCBzZWN1cml0eS5pbnNlY3VyZUFQSS5VbmNoZWNrZWRSZXR1cm4KK1dhcm4gb24gdXNlcyBvZiBmdW5jdGlvbnMgd2hvc2UgcmV0dXJuIHZhbHVlcyBtdXN0IGJlIGFsd2F5cyBjaGVja2VkLgorLkl0IHNlY3VyaXR5Lmluc2VjdXJlQVBJLmdldHB3CitXYXJuIG9uIHVzZXMgb2YKKy5GbiBnZXRwdyAuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkuZ2V0cworV2FybiBvbiB1c2VzIG9mCisuRm4gZ2V0cyAuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkubWtzdGVtcAorV2FybiB3aGVuCisuRm4gbWtzdGVtcAoraXMgcGFzc2VkIGZld2VyIHRoYW4gNiBYJ3MgaW4gdGhlIGZvcm1hdCBzdHJpbmcuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkubWt0ZW1wCitXYXJuIG9uIHVzZXMgb2YKKy5GbiBta3RlbXAgLgorLkl0IHNlY3VyaXR5Lmluc2VjdXJlQVBJLnJhbmQKK1dhcm4gb24gdXNlcyBvZgorLkZuIHJhbmQgLAorLkZuIHJhbmRvbSAsCithbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkuc3RyY3B5CitXYXJuIG9uIHVzZXMgb2YKKy5GbiBzdHJjcHkKK2FuZAorLkZuIHN0cmNhdCAuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkudmZvcmsKK1dhcm4gb24gdXNlcyBvZgorLkZuIHZmb3JrIC4KKy5JdCB1bml4LkFQSQorQ2hlY2sgY2FsbHMgdG8gdmFyaW91cyBVTklYL1Bvc2l4IGZ1bmN0aW9ucy4KKy5JdCB1bml4Lk1hbGxvYworQ2hlY2sgZm9yIG1lbW9yeSBsZWFrcywgZG91YmxlIGZyZWUsIGFuZCB1c2UtYWZ0ZXItZnJlZS4KKy5JdCB1bml4LmNzdHJpbmcuQmFkU2l6ZUFyZworQ2hlY2sgdGhlIHNpemUgYXJndW1lbnQgcGFzc2VkIGludG8gQyBzdHJpbmcgZnVuY3Rpb25zIGZvciBjb21tb24KK2Vycm9uZW91cyBwYXR0ZXJucy4KKy5JdCB1bml4LmNzdHJpbmcuTnVsbEFyZworQ2hlY2sgZm9yIG51bGwgcG9pbnRlcnMgYmVpbmcgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBDIHN0cmluZyBmdW5jdGlvbnMuCisuRWwKKy5cIgorLlNoIEVYQU1QTEUKKy5JYyBzY2FuLWJ1aWxkIC1vIC90bXAvbXlodG1sZGlyIG1ha2UgLWo0CisuUHAKK1RoZSBhYm92ZSBleGFtcGxlIGNhdXNlcyBhbmFseXNpcyByZXBvcnRzIHRvIGJlIGRlcG9zaXRlZCBpbnRvCithIHN1YmRpcmVjdG9yeSBvZgorLlBhIC90bXAvbXlodG1sZGlyCithbmQgdG8gcnVuCisuSWMgbWFrZQord2l0aCB0aGUKKy5GbCBqNAorb3B0aW9uLgorQSBkaWZmZXJlbnQgc3ViZGlyZWN0b3J5IGlzIGNyZWF0ZWQgZWFjaCB0aW1lCisuTm0KK2FuYWx5emVzIGEgcHJvamVjdC4KK1RoZSBhbmFseXplciBzaG91bGQgc3VwcG9ydCBtb3N0IHBhcmFsbGVsIGJ1aWxkcywgYnV0IG5vdCBkaXN0cmlidXRlZCBidWlsZHMuCisuU2ggQVVUSE9SUworLk5tCit3YXMgd3JpdHRlbiBieQorLkFuICJUZWQgS3JlbWVuZWsiIC4KK0RvY3VtZW50YXRpb24gY29udHJpYnV0ZWQgYnkKKy5BbiAiSmFtZXMgSy4gTG93ZGVuIiBBcSBqa2xvd2RlbkBzY2hlbWFtYW5pYS5vcmcgLgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLWJ1aWxkL3NoYXJlL3NjYW4tYnVpbGQvc2NhbnZpZXcuY3NzIGIvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLWJ1aWxkL3NoYXJlL3NjYW4tYnVpbGQvc2NhbnZpZXcuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOGE1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zY2Fudmlldy5jc3MKQEAgLTAsMCArMSw2MiBAQAorYm9keSB7IGNvbG9yOiMwMDAwMDA7IGJhY2tncm91bmQtY29sb3I6I2ZmZmZmZiB9Citib2R5IHsgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjlwdCB9CitoMSB7IGZvbnQtc2l6ZTogMTRwdDsgfQoraDIgeyBmb250LXNpemU6IDEycHQ7IH0KK3RhYmxlIHsgZm9udC1zaXplOjlwdCB9Cit0YWJsZSB7IGJvcmRlci1zcGFjaW5nOiAwcHg7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIH0KK3RoLCB0YWJsZSB0aGVhZCB7CisgIGJhY2tncm91bmQtY29sb3I6I2VlZTsgY29sb3I6IzY2NjY2NjsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7IGN1cnNvcjogZGVmYXVsdDsKKyAgdGV4dC1hbGlnbjpjZW50ZXI7CisgIGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LWZhbWlseTogVmVyZGFuYTsKKyAgd2hpdGUtc3BhY2U6bm93cmFwOworfQorLlcgeyBmb250LXNpemU6MHB4IH0KK3RoLCB0ZCB7IHBhZGRpbmc6NXB4OyBwYWRkaW5nLWxlZnQ6OHB4OyB0ZXh0LWFsaWduOmxlZnQgfQordGQuU1VNTV9ERVNDIHsgcGFkZGluZy1sZWZ0OjEycHggfQordGQuREVTQyB7IHdoaXRlLXNwYWNlOnByZSB9Cit0ZC5RIHsgdGV4dC1hbGlnbjpyaWdodCB9Cit0ZCB7IHRleHQtYWxpZ246bGVmdCB9Cit0Ym9keS5zY3JvbGxDb250ZW50IHsgb3ZlcmZsb3c6YXV0byB9CisKK3RhYmxlLmZvcm1fZ3JvdXAgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKKyAgICBwYWRkaW5nOiAycHg7Cit9CisKK3RhYmxlLmZvcm1faW5uZXJfZ3JvdXAgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKKyAgICBwYWRkaW5nOiAwcHg7Cit9CisKK3RhYmxlLmZvcm0geworICAgIGJhY2tncm91bmQtY29sb3I6ICM5OTk7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKKyAgICBwYWRkaW5nOiAycHg7Cit9CisKK3RkLmZvcm1fbGFiZWwgeworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisvKiBGb3Igb25lIGxpbmUgZW50aXJlcyAqLwordGQuZm9ybV9jbGFiZWwgeworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHZlcnRpY2FsLWFsaWduOiBjZW50ZXI7Cit9Cit0ZC5mb3JtX3ZhbHVlIHsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9Cit0ZC5mb3JtX3N1Ym1pdCB7CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworaDEuU3VibWl0RmFpbCB7CisgICAgY29sb3I6ICNmMDA7Cit9CitoMS5TdWJtaXRPayB7Cit9CmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zb3J0dGFibGUuanMgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zb3J0dGFibGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmYWEwNwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi1idWlsZC9zaGFyZS9zY2FuLWJ1aWxkL3NvcnR0YWJsZS5qcwpAQCAtMCwwICsxLDQ5MiBAQAorLyoKKyAgU29ydFRhYmxlCisgIHZlcnNpb24gMgorICA3dGggQXByaWwgMjAwNworICBTdHVhcnQgTGFuZ3JpZGdlLCBodHRwOi8vd3d3LmtyeW9nZW5peC5vcmcvY29kZS9icm93c2VyL3NvcnR0YWJsZS8KKworICBJbnN0cnVjdGlvbnM6CisgIERvd25sb2FkIHRoaXMgZmlsZQorICBBZGQgPHNjcmlwdCBzcmM9InNvcnR0YWJsZS5qcyI+PC9zY3JpcHQ+IHRvIHlvdXIgSFRNTAorICBBZGQgY2xhc3M9InNvcnRhYmxlIiB0byBhbnkgdGFibGUgeW91J2QgbGlrZSB0byBtYWtlIHNvcnRhYmxlCisgIENsaWNrIG9uIHRoZSBoZWFkZXJzIHRvIHNvcnQKKworICBUaGFua3MgdG8gbWFueSwgbWFueSBwZW9wbGUgZm9yIGNvbnRyaWJ1dGlvbnMgYW5kIHN1Z2dlc3Rpb25zLgorICBMaWNlbmNlZCBhcyBYMTE6IGh0dHA6Ly93d3cua3J5b2dlbml4Lm9yZy9jb2RlL2Jyb3dzZXIvbGljZW5jZS5odG1sCisgIFRoaXMgYmFzaWNhbGx5IG1lYW5zOiBkbyB3aGF0IHlvdSB3YW50IHdpdGggaXQuCisqLworCisKK3ZhciBzdElzSUUgPSAvKkBjY19vbiFAKi9mYWxzZTsKKworc29ydHRhYmxlID0geworICBpbml0OiBmdW5jdGlvbigpIHsKKyAgICAvLyBxdWl0IGlmIHRoaXMgZnVuY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKKyAgICBpZiAoYXJndW1lbnRzLmNhbGxlZS5kb25lKSByZXR1cm47CisgICAgLy8gZmxhZyB0aGlzIGZ1bmN0aW9uIHNvIHdlIGRvbid0IGRvIHRoZSBzYW1lIHRoaW5nIHR3aWNlCisgICAgYXJndW1lbnRzLmNhbGxlZS5kb25lID0gdHJ1ZTsKKyAgICAvLyBraWxsIHRoZSB0aW1lcgorICAgIGlmIChfdGltZXIpIGNsZWFySW50ZXJ2YWwoX3RpbWVyKTsKKworICAgIGlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpIHJldHVybjsKKworICAgIHNvcnR0YWJsZS5EQVRFX1JFID0gL14oXGRcZD8pW1wvXC4tXShcZFxkPylbXC9cLi1dKChcZFxkKT9cZFxkKSQvOworCisgICAgZm9yRWFjaChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGFibGUnKSwgZnVuY3Rpb24odGFibGUpIHsKKyAgICAgIGlmICh0YWJsZS5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnRhYmxlXGIvKSAhPSAtMSkgeworICAgICAgICBzb3J0dGFibGUubWFrZVNvcnRhYmxlKHRhYmxlKTsKKyAgICAgIH0KKyAgICB9KTsKKworICB9LAorCisgIG1ha2VTb3J0YWJsZTogZnVuY3Rpb24odGFibGUpIHsKKyAgICBpZiAodGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoZWFkJykubGVuZ3RoID09IDApIHsKKyAgICAgIC8vIHRhYmxlIGRvZXNuJ3QgaGF2ZSBhIHRIZWFkLiBTaW5jZSBpdCBzaG91bGQgaGF2ZSwgY3JlYXRlIG9uZSBhbmQKKyAgICAgIC8vIHB1dCB0aGUgZmlyc3QgdGFibGUgcm93IGluIGl0LgorICAgICAgdGhlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGhlYWQnKTsKKyAgICAgIHRoZS5hcHBlbmRDaGlsZCh0YWJsZS5yb3dzWzBdKTsKKyAgICAgIHRhYmxlLmluc2VydEJlZm9yZSh0aGUsdGFibGUuZmlyc3RDaGlsZCk7CisgICAgfQorICAgIC8vIFNhZmFyaSBkb2Vzbid0IHN1cHBvcnQgdGFibGUudEhlYWQsIHNpZ2gKKyAgICBpZiAodGFibGUudEhlYWQgPT0gbnVsbCkgdGFibGUudEhlYWQgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGhlYWQnKVswXTsKKworICAgIGlmICh0YWJsZS50SGVhZC5yb3dzLmxlbmd0aCAhPSAxKSByZXR1cm47IC8vIGNhbid0IGNvcGUgd2l0aCB0d28gaGVhZGVyIHJvd3MKKworICAgIC8vIFNvcnR0YWJsZSB2MSBwdXQgcm93cyB3aXRoIGEgY2xhc3Mgb2YgInNvcnRib3R0b20iIGF0IHRoZSBib3R0b20gKGFzCisgICAgLy8gInRvdGFsIiByb3dzLCBmb3IgZXhhbXBsZSkuIFRoaXMgaXMgQiZSLCBzaW5jZSB3aGF0IHlvdSdyZSBzdXBwb3NlZAorICAgIC8vIHRvIGRvIGlzIHB1dCB0aGVtIGluIGEgdGZvb3QuIFNvLCBpZiB0aGVyZSBhcmUgc29ydGJvdHRvbSByb3dzLAorICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBtb3ZlIHRoZW0gdG8gdGZvb3QgKGNyZWF0aW5nIGl0IGlmIG5lZWRlZCkuCisgICAgc29ydGJvdHRvbXJvd3MgPSBbXTsKKyAgICBmb3IgKHZhciBpPTA7IGk8dGFibGUucm93cy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKHRhYmxlLnJvd3NbaV0uY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0Ym90dG9tXGIvKSAhPSAtMSkgeworICAgICAgICBzb3J0Ym90dG9tcm93c1tzb3J0Ym90dG9tcm93cy5sZW5ndGhdID0gdGFibGUucm93c1tpXTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHNvcnRib3R0b21yb3dzKSB7CisgICAgICBpZiAodGFibGUudEZvb3QgPT0gbnVsbCkgeworICAgICAgICAvLyB0YWJsZSBkb2Vzbid0IGhhdmUgYSB0Zm9vdC4gQ3JlYXRlIG9uZS4KKyAgICAgICAgdGZvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGZvb3QnKTsKKyAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodGZvKTsKKyAgICAgIH0KKyAgICAgIGZvciAodmFyIGk9MDsgaTxzb3J0Ym90dG9tcm93cy5sZW5ndGg7IGkrKykgeworICAgICAgICB0Zm8uYXBwZW5kQ2hpbGQoc29ydGJvdHRvbXJvd3NbaV0pOworICAgICAgfQorICAgICAgZGVsZXRlIHNvcnRib3R0b21yb3dzOworICAgIH0KKworICAgIC8vIHdvcmsgdGhyb3VnaCBlYWNoIGNvbHVtbiBhbmQgY2FsY3VsYXRlIGl0cyB0eXBlCisgICAgaGVhZHJvdyA9IHRhYmxlLnRIZWFkLnJvd3NbMF0uY2VsbHM7CisgICAgZm9yICh2YXIgaT0wOyBpPGhlYWRyb3cubGVuZ3RoOyBpKyspIHsKKyAgICAgIC8vIG1hbnVhbGx5IG92ZXJyaWRlIHRoZSB0eXBlIHdpdGggYSBzb3J0dGFibGVfdHlwZSBhdHRyaWJ1dGUKKyAgICAgIGlmICghaGVhZHJvd1tpXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlX25vc29ydFxiLykpIHsgLy8gc2tpcCB0aGlzIGNvbAorICAgICAgICBtdGNoID0gaGVhZHJvd1tpXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlXyhbYS16MC05XSspXGIvKTsKKyAgICAgICAgaWYgKG10Y2gpIHsgb3ZlcnJpZGUgPSBtdGNoWzFdOyB9CisJICAgICAgaWYgKG10Y2ggJiYgdHlwZW9mIHNvcnR0YWJsZVsic29ydF8iK292ZXJyaWRlXSA9PSAnZnVuY3Rpb24nKSB7CisJICAgICAgICBoZWFkcm93W2ldLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24gPSBzb3J0dGFibGVbInNvcnRfIitvdmVycmlkZV07CisJICAgICAgfSBlbHNlIHsKKwkgICAgICAgIGhlYWRyb3dbaV0uc29ydHRhYmxlX3NvcnRmdW5jdGlvbiA9IHNvcnR0YWJsZS5ndWVzc1R5cGUodGFibGUsaSk7CisJICAgICAgfQorCSAgICAgIC8vIG1ha2UgaXQgY2xpY2thYmxlIHRvIHNvcnQKKwkgICAgICBoZWFkcm93W2ldLnNvcnR0YWJsZV9jb2x1bW5pbmRleCA9IGk7CisJICAgICAgaGVhZHJvd1tpXS5zb3J0dGFibGVfdGJvZHkgPSB0YWJsZS50Qm9kaWVzWzBdOworCSAgICAgIGRlYW5fYWRkRXZlbnQoaGVhZHJvd1tpXSwiY2xpY2siLCBmdW5jdGlvbihlKSB7CisKKyAgICAgICAgICBpZiAodGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRcYi8pICE9IC0xKSB7CisgICAgICAgICAgICAvLyBpZiB3ZSdyZSBhbHJlYWR5IHNvcnRlZCBieSB0aGlzIGNvbHVtbiwganVzdAorICAgICAgICAgICAgLy8gcmV2ZXJzZSB0aGUgdGFibGUsIHdoaWNoIGlzIHF1aWNrZXIKKyAgICAgICAgICAgIHNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuc29ydHRhYmxlX3Rib2R5KTsKKyAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUucmVwbGFjZSgnc29ydHRhYmxlX3NvcnRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZScpOworICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc29ydHRhYmxlX3NvcnRmd2RpbmQnKSk7CisgICAgICAgICAgICBzb3J0cmV2aW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgICAgICAgICAgc29ydHJldmluZC5pZCA9ICJzb3J0dGFibGVfc29ydHJldmluZCI7CisgICAgICAgICAgICBzb3J0cmV2aW5kLmlubmVySFRNTCA9IHN0SXNJRSA/ICcmbmJzcDxmb250IGZhY2U9IndlYmRpbmdzIj41PC9mb250PicgOiAnJm5ic3A7JiN4MjVCNDsnOworICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChzb3J0cmV2aW5kKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRoaXMuY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0dGFibGVfc29ydGVkX3JldmVyc2VcYi8pICE9IC0xKSB7CisgICAgICAgICAgICAvLyBpZiB3ZSdyZSBhbHJlYWR5IHNvcnRlZCBieSB0aGlzIGNvbHVtbiBpbiByZXZlcnNlLCBqdXN0CisgICAgICAgICAgICAvLyByZS1yZXZlcnNlIHRoZSB0YWJsZSwgd2hpY2ggaXMgcXVpY2tlcgorICAgICAgICAgICAgc29ydHRhYmxlLnJldmVyc2UodGhpcy5zb3J0dGFibGVfdGJvZHkpOworICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZS5yZXBsYWNlKCdzb3J0dGFibGVfc29ydGVkX3JldmVyc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3J0dGFibGVfc29ydGVkJyk7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3J0dGFibGVfc29ydHJldmluZCcpKTsKKyAgICAgICAgICAgIHNvcnRmd2RpbmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgICAgICAgICBzb3J0ZndkaW5kLmlkID0gInNvcnR0YWJsZV9zb3J0ZndkaW5kIjsKKyAgICAgICAgICAgIHNvcnRmd2RpbmQuaW5uZXJIVE1MID0gc3RJc0lFID8gJyZuYnNwPGZvbnQgZmFjZT0id2ViZGluZ3MiPjY8L2ZvbnQ+JyA6ICcmbmJzcDsmI3gyNUJFOyc7CisgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHNvcnRmd2RpbmQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKworICAgICAgICAgIC8vIHJlbW92ZSBzb3J0dGFibGVfc29ydGVkIGNsYXNzZXMKKyAgICAgICAgICB0aGVhZHJvdyA9IHRoaXMucGFyZW50Tm9kZTsKKyAgICAgICAgICBmb3JFYWNoKHRoZWFkcm93LmNoaWxkTm9kZXMsIGZ1bmN0aW9uKGNlbGwpIHsKKyAgICAgICAgICAgIGlmIChjZWxsLm5vZGVUeXBlID09IDEpIHsgLy8gYW4gZWxlbWVudAorICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IGNlbGwuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZScsJycpOworICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IGNlbGwuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWQnLCcnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgICBzb3J0ZndkaW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvcnR0YWJsZV9zb3J0ZndkaW5kJyk7CisgICAgICAgICAgaWYgKHNvcnRmd2RpbmQpIHsgc29ydGZ3ZGluZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNvcnRmd2RpbmQpOyB9CisgICAgICAgICAgc29ydHJldmluZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3J0dGFibGVfc29ydHJldmluZCcpOworICAgICAgICAgIGlmIChzb3J0cmV2aW5kKSB7IHNvcnRyZXZpbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzb3J0cmV2aW5kKTsgfQorCisgICAgICAgICAgdGhpcy5jbGFzc05hbWUgKz0gJyBzb3J0dGFibGVfc29ydGVkJzsKKyAgICAgICAgICBzb3J0ZndkaW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgICAgICAgIHNvcnRmd2RpbmQuaWQgPSAic29ydHRhYmxlX3NvcnRmd2RpbmQiOworICAgICAgICAgIHNvcnRmd2RpbmQuaW5uZXJIVE1MID0gc3RJc0lFID8gJyZuYnNwPGZvbnQgZmFjZT0id2ViZGluZ3MiPjY8L2ZvbnQ+JyA6ICcmbmJzcDsmI3gyNUJFOyc7CisgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChzb3J0ZndkaW5kKTsKKworCSAgICAgICAgLy8gYnVpbGQgYW4gYXJyYXkgdG8gc29ydC4gVGhpcyBpcyBhIFNjaHdhcnR6aWFuIHRyYW5zZm9ybSB0aGluZywKKwkgICAgICAgIC8vIGkuZS4sIHdlICJkZWNvcmF0ZSIgZWFjaCByb3cgd2l0aCB0aGUgYWN0dWFsIHNvcnQga2V5LAorCSAgICAgICAgLy8gc29ydCBiYXNlZCBvbiB0aGUgc29ydCBrZXlzLCBhbmQgdGhlbiBwdXQgdGhlIHJvd3MgYmFjayBpbiBvcmRlcgorCSAgICAgICAgLy8gd2hpY2ggaXMgYSBsb3QgZmFzdGVyIGJlY2F1c2UgeW91IG9ubHkgZG8gZ2V0SW5uZXJUZXh0IG9uY2UgcGVyIHJvdworCSAgICAgICAgcm93X2FycmF5ID0gW107CisJICAgICAgICBjb2wgPSB0aGlzLnNvcnR0YWJsZV9jb2x1bW5pbmRleDsKKwkgICAgICAgIHJvd3MgPSB0aGlzLnNvcnR0YWJsZV90Ym9keS5yb3dzOworCSAgICAgICAgZm9yICh2YXIgaj0wOyBqPHJvd3MubGVuZ3RoOyBqKyspIHsKKwkgICAgICAgICAgcm93X2FycmF5W3Jvd19hcnJheS5sZW5ndGhdID0gW3NvcnR0YWJsZS5nZXRJbm5lclRleHQocm93c1tqXS5jZWxsc1tjb2xdKSwgcm93c1tqXV07CisJICAgICAgICB9CisJICAgICAgICAvKiBJZiB5b3Ugd2FudCBhIHN0YWJsZSBzb3J0LCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lICovCisJICAgICAgICBzb3J0dGFibGUuc2hha2VyX3NvcnQocm93X2FycmF5LCB0aGlzLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24pOworCSAgICAgICAgLyogYW5kIGNvbW1lbnQgb3V0IHRoaXMgb25lICovCisJICAgICAgICAvL3Jvd19hcnJheS5zb3J0KHRoaXMuc29ydHRhYmxlX3NvcnRmdW5jdGlvbik7CisKKwkgICAgICAgIHRiID0gdGhpcy5zb3J0dGFibGVfdGJvZHk7CisJICAgICAgICBmb3IgKHZhciBqPTA7IGo8cm93X2FycmF5Lmxlbmd0aDsgaisrKSB7CisJICAgICAgICAgIHRiLmFwcGVuZENoaWxkKHJvd19hcnJheVtqXVsxXSk7CisJICAgICAgICB9CisKKwkgICAgICAgIGRlbGV0ZSByb3dfYXJyYXk7CisJICAgICAgfSk7CisJICAgIH0KKyAgICB9CisgIH0sCisKKyAgZ3Vlc3NUeXBlOiBmdW5jdGlvbih0YWJsZSwgY29sdW1uKSB7CisgICAgLy8gZ3Vlc3MgdGhlIHR5cGUgb2YgYSBjb2x1bW4gYmFzZWQgb24gaXRzIGZpcnN0IG5vbi1ibGFuayByb3cKKyAgICBzb3J0Zm4gPSBzb3J0dGFibGUuc29ydF9hbHBoYTsKKyAgICBmb3IgKHZhciBpPTA7IGk8dGFibGUudEJvZGllc1swXS5yb3dzLmxlbmd0aDsgaSsrKSB7CisgICAgICB0ZXh0ID0gc29ydHRhYmxlLmdldElubmVyVGV4dCh0YWJsZS50Qm9kaWVzWzBdLnJvd3NbaV0uY2VsbHNbY29sdW1uXSk7CisgICAgICBpZiAodGV4dCAhPSAnJykgeworICAgICAgICBpZiAodGV4dC5tYXRjaCgvXi0/W6MkpF0/W1xkLC5dKyU/JC8pKSB7CisgICAgICAgICAgcmV0dXJuIHNvcnR0YWJsZS5zb3J0X251bWVyaWM7CisgICAgICAgIH0KKyAgICAgICAgLy8gY2hlY2sgZm9yIGEgZGF0ZTogZGQvbW0veXl5eSBvciBkZC9tbS95eQorICAgICAgICAvLyBjYW4gaGF2ZSAvIG9yIC4gb3IgLSBhcyBzZXBhcmF0b3IKKyAgICAgICAgLy8gY2FuIGJlIG1tL2RkIGFzIHdlbGwKKyAgICAgICAgcG9zc2RhdGUgPSB0ZXh0Lm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKQorICAgICAgICBpZiAocG9zc2RhdGUpIHsKKyAgICAgICAgICAvLyBsb29rcyBsaWtlIGEgZGF0ZQorICAgICAgICAgIGZpcnN0ID0gcGFyc2VJbnQocG9zc2RhdGVbMV0pOworICAgICAgICAgIHNlY29uZCA9IHBhcnNlSW50KHBvc3NkYXRlWzJdKTsKKyAgICAgICAgICBpZiAoZmlyc3QgPiAxMikgeworICAgICAgICAgICAgLy8gZGVmaW5pdGVseSBkZC9tbQorICAgICAgICAgICAgcmV0dXJuIHNvcnR0YWJsZS5zb3J0X2RkbW07CisgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmQgPiAxMikgeworICAgICAgICAgICAgcmV0dXJuIHNvcnR0YWJsZS5zb3J0X21tZGQ7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGxvb2tzIGxpa2UgYSBkYXRlLCBidXQgd2UgY2FuJ3QgdGVsbCB3aGljaCwgc28gYXNzdW1lCisgICAgICAgICAgICAvLyB0aGF0IGl0J3MgZGQvbW0gKEVuZ2xpc2ggaW1wZXJpYWxpc20hKSBhbmQga2VlcCBsb29raW5nCisgICAgICAgICAgICBzb3J0Zm4gPSBzb3J0dGFibGUuc29ydF9kZG1tOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc29ydGZuOworICB9LAorCisgIGdldElubmVyVGV4dDogZnVuY3Rpb24obm9kZSkgeworICAgIC8vIGdldHMgdGhlIHRleHQgd2Ugd2FudCB0byB1c2UgZm9yIHNvcnRpbmcgZm9yIGEgY2VsbC4KKyAgICAvLyBzdHJpcHMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICAvLyB0aGlzIGlzICpub3QqIGEgZ2VuZXJpYyBnZXRJbm5lclRleHQgZnVuY3Rpb247IGl0J3Mgc3BlY2lhbCB0byBzb3J0dGFibGUuCisgICAgLy8gZm9yIGV4YW1wbGUsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGNlbGwgdGV4dCB3aXRoIGEgY3VzdG9ta2V5IGF0dHJpYnV0ZS4KKyAgICAvLyBpdCBhbHNvIGdldHMgLnZhbHVlIGZvciA8aW5wdXQ+IGZpZWxkcy4KKworICAgIGhhc0lucHV0cyA9ICh0eXBlb2Ygbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9PSAnZnVuY3Rpb24nKSAmJgorICAgICAgICAgICAgICAgICBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpLmxlbmd0aDsKKworICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZSgic29ydHRhYmxlX2N1c3RvbWtleSIpICE9IG51bGwpIHsKKyAgICAgIHJldHVybiBub2RlLmdldEF0dHJpYnV0ZSgic29ydHRhYmxlX2N1c3RvbWtleSIpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlb2Ygbm9kZS50ZXh0Q29udGVudCAhPSAndW5kZWZpbmVkJyAmJiAhaGFzSW5wdXRzKSB7CisgICAgICByZXR1cm4gbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlb2Ygbm9kZS5pbm5lclRleHQgIT0gJ3VuZGVmaW5lZCcgJiYgIWhhc0lucHV0cykgeworICAgICAgcmV0dXJuIG5vZGUuaW5uZXJUZXh0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGVvZiBub2RlLnRleHQgIT0gJ3VuZGVmaW5lZCcgJiYgIWhhc0lucHV0cykgeworICAgICAgcmV0dXJuIG5vZGUudGV4dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkgeworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW5wdXQnKSB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS52YWx1ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgICAgICAgIH0KKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgIHJldHVybiBub2RlLm5vZGVWYWx1ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgdmFyIGlubmVyVGV4dCA9ICcnOworICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpbm5lclRleHQgKz0gc29ydHRhYmxlLmdldElubmVyVGV4dChub2RlLmNoaWxkTm9kZXNbaV0pOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gaW5uZXJUZXh0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuICcnOworICAgICAgfQorICAgIH0KKyAgfSwKKworICByZXZlcnNlOiBmdW5jdGlvbih0Ym9keSkgeworICAgIC8vIHJldmVyc2UgdGhlIHJvd3MgaW4gYSB0Ym9keQorICAgIG5ld3Jvd3MgPSBbXTsKKyAgICBmb3IgKHZhciBpPTA7IGk8dGJvZHkucm93cy5sZW5ndGg7IGkrKykgeworICAgICAgbmV3cm93c1tuZXdyb3dzLmxlbmd0aF0gPSB0Ym9keS5yb3dzW2ldOworICAgIH0KKyAgICBmb3IgKHZhciBpPW5ld3Jvd3MubGVuZ3RoLTE7IGk+PTA7IGktLSkgeworICAgICAgIHRib2R5LmFwcGVuZENoaWxkKG5ld3Jvd3NbaV0pOworICAgIH0KKyAgICBkZWxldGUgbmV3cm93czsKKyAgfSwKKworICAvKiBzb3J0IGZ1bmN0aW9ucworICAgICBlYWNoIHNvcnQgZnVuY3Rpb24gdGFrZXMgdHdvIHBhcmFtZXRlcnMsIGEgYW5kIGIKKyAgICAgeW91IGFyZSBjb21wYXJpbmcgYVswXSBhbmQgYlswXSAqLworICBzb3J0X251bWVyaWM6IGZ1bmN0aW9uKGEsYikgeworICAgIGFhID0gcGFyc2VGbG9hdChhWzBdLnJlcGxhY2UoL1teMC05Li1dL2csJycpKTsKKyAgICBpZiAoaXNOYU4oYWEpKSBhYSA9IDA7CisgICAgYmIgPSBwYXJzZUZsb2F0KGJbMF0ucmVwbGFjZSgvW14wLTkuLV0vZywnJykpOworICAgIGlmIChpc05hTihiYikpIGJiID0gMDsKKyAgICByZXR1cm4gYWEtYmI7CisgIH0sCisgIHNvcnRfYWxwaGE6IGZ1bmN0aW9uKGEsYikgeworICAgIGlmIChhWzBdPT1iWzBdKSByZXR1cm4gMDsKKyAgICBpZiAoYVswXTxiWzBdKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIDE7CisgIH0sCisgIHNvcnRfZGRtbTogZnVuY3Rpb24oYSxiKSB7CisgICAgbXRjaCA9IGFbMF0ubWF0Y2goc29ydHRhYmxlLkRBVEVfUkUpOworICAgIHkgPSBtdGNoWzNdOyBtID0gbXRjaFsyXTsgZCA9IG10Y2hbMV07CisgICAgaWYgKG0ubGVuZ3RoID09IDEpIG0gPSAnMCcrbTsKKyAgICBpZiAoZC5sZW5ndGggPT0gMSkgZCA9ICcwJytkOworICAgIGR0MSA9IHkrbStkOworICAgIG10Y2ggPSBiWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKKyAgICB5ID0gbXRjaFszXTsgbSA9IG10Y2hbMl07IGQgPSBtdGNoWzFdOworICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207CisgICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKKyAgICBkdDIgPSB5K20rZDsKKyAgICBpZiAoZHQxPT1kdDIpIHJldHVybiAwOworICAgIGlmIChkdDE8ZHQyKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIDE7CisgIH0sCisgIHNvcnRfbW1kZDogZnVuY3Rpb24oYSxiKSB7CisgICAgbXRjaCA9IGFbMF0ubWF0Y2goc29ydHRhYmxlLkRBVEVfUkUpOworICAgIHkgPSBtdGNoWzNdOyBkID0gbXRjaFsyXTsgbSA9IG10Y2hbMV07CisgICAgaWYgKG0ubGVuZ3RoID09IDEpIG0gPSAnMCcrbTsKKyAgICBpZiAoZC5sZW5ndGggPT0gMSkgZCA9ICcwJytkOworICAgIGR0MSA9IHkrbStkOworICAgIG10Y2ggPSBiWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKKyAgICB5ID0gbXRjaFszXTsgZCA9IG10Y2hbMl07IG0gPSBtdGNoWzFdOworICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207CisgICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKKyAgICBkdDIgPSB5K20rZDsKKyAgICBpZiAoZHQxPT1kdDIpIHJldHVybiAwOworICAgIGlmIChkdDE8ZHQyKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIDE7CisgIH0sCisKKyAgc2hha2VyX3NvcnQ6IGZ1bmN0aW9uKGxpc3QsIGNvbXBfZnVuYykgeworICAgIC8vIEEgc3RhYmxlIHNvcnQgZnVuY3Rpb24gdG8gYWxsb3cgbXVsdGktbGV2ZWwgc29ydGluZyBvZiBkYXRhCisgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvY2t0YWlsX3NvcnQKKyAgICAvLyB0aGFua3MgdG8gSm9zZXBoIE5haG1pYXMKKyAgICB2YXIgYiA9IDA7CisgICAgdmFyIHQgPSBsaXN0Lmxlbmd0aCAtIDE7CisgICAgdmFyIHN3YXAgPSB0cnVlOworCisgICAgd2hpbGUoc3dhcCkgeworICAgICAgICBzd2FwID0gZmFsc2U7CisgICAgICAgIGZvcih2YXIgaSA9IGI7IGkgPCB0OyArK2kpIHsKKyAgICAgICAgICAgIGlmICggY29tcF9mdW5jKGxpc3RbaV0sIGxpc3RbaSsxXSkgPiAwICkgeworICAgICAgICAgICAgICAgIHZhciBxID0gbGlzdFtpXTsgbGlzdFtpXSA9IGxpc3RbaSsxXTsgbGlzdFtpKzFdID0gcTsKKyAgICAgICAgICAgICAgICBzd2FwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAvLyBmb3IKKyAgICAgICAgdC0tOworCisgICAgICAgIGlmICghc3dhcCkgYnJlYWs7CisKKyAgICAgICAgZm9yKHZhciBpID0gdDsgaSA+IGI7IC0taSkgeworICAgICAgICAgICAgaWYgKCBjb21wX2Z1bmMobGlzdFtpXSwgbGlzdFtpLTFdKSA8IDAgKSB7CisgICAgICAgICAgICAgICAgdmFyIHEgPSBsaXN0W2ldOyBsaXN0W2ldID0gbGlzdFtpLTFdOyBsaXN0W2ktMV0gPSBxOworICAgICAgICAgICAgICAgIHN3YXAgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IC8vIGZvcgorICAgICAgICBiKys7CisKKyAgICB9IC8vIHdoaWxlKHN3YXApCisgIH0KK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBTdXBwb3J0aW5nIGZ1bmN0aW9uczogYnVuZGxlZCBoZXJlIHRvIGF2b2lkIGRlcGVuZGluZyBvbiBhIGxpYnJhcnkKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvLyBEZWFuIEVkd2FyZHMvTWF0dGhpYXMgTWlsbGVyL0pvaG4gUmVzaWcKKworLyogZm9yIE1vemlsbGEvT3BlcmE5ICovCitpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeworICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBzb3J0dGFibGUuaW5pdCwgZmFsc2UpOworfQorCisvKiBmb3IgSW50ZXJuZXQgRXhwbG9yZXIgKi8KKy8qQGNjX29uIEAqLworLypAaWYgKEBfd2luMzIpCisgICAgZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgaWQ9X19pZV9vbmxvYWQgZGVmZXIgc3JjPWphdmFzY3JpcHQ6dm9pZCgwKT48XC9zY3JpcHQ+Iik7CisgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX2llX29ubG9hZCIpOworICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUiKSB7CisgICAgICAgICAgICBzb3J0dGFibGUuaW5pdCgpOyAvLyBjYWxsIHRoZSBvbmxvYWQgaGFuZGxlcgorICAgICAgICB9CisgICAgfTsKKy8qQGVuZCBAKi8KKworLyogZm9yIFNhZmFyaSAqLworaWYgKC9XZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7IC8vIHNuaWZmCisgICAgdmFyIF90aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoL2xvYWRlZHxjb21wbGV0ZS8udGVzdChkb2N1bWVudC5yZWFkeVN0YXRlKSkgeworICAgICAgICAgICAgc29ydHRhYmxlLmluaXQoKTsgLy8gY2FsbCB0aGUgb25sb2FkIGhhbmRsZXIKKyAgICAgICAgfQorICAgIH0sIDEwKTsKK30KKworLyogZm9yIG90aGVyIGJyb3dzZXJzICovCit3aW5kb3cub25sb2FkID0gc29ydHRhYmxlLmluaXQ7CisKKy8vIHdyaXR0ZW4gYnkgRGVhbiBFZHdhcmRzLCAyMDA1CisvLyB3aXRoIGlucHV0IGZyb20gVGlubyBaaWpkZWwsIE1hdHRoaWFzIE1pbGxlciwgRGllZ28gUGVyaW5pCisKKy8vIGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNS8xMC9hZGQtZXZlbnQvCisKK2Z1bmN0aW9uIGRlYW5fYWRkRXZlbnQoZWxlbWVudCwgdHlwZSwgaGFuZGxlcikgeworCWlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKKwkJZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTsKKwl9IGVsc2UgeworCQkvLyBhc3NpZ24gZWFjaCBldmVudCBoYW5kbGVyIGEgdW5pcXVlIElECisJCWlmICghaGFuZGxlci4kJGd1aWQpIGhhbmRsZXIuJCRndWlkID0gZGVhbl9hZGRFdmVudC5ndWlkKys7CisJCS8vIGNyZWF0ZSBhIGhhc2ggdGFibGUgb2YgZXZlbnQgdHlwZXMgZm9yIHRoZSBlbGVtZW50CisJCWlmICghZWxlbWVudC5ldmVudHMpIGVsZW1lbnQuZXZlbnRzID0ge307CisJCS8vIGNyZWF0ZSBhIGhhc2ggdGFibGUgb2YgZXZlbnQgaGFuZGxlcnMgZm9yIGVhY2ggZWxlbWVudC9ldmVudCBwYWlyCisJCXZhciBoYW5kbGVycyA9IGVsZW1lbnQuZXZlbnRzW3R5cGVdOworCQlpZiAoIWhhbmRsZXJzKSB7CisJCQloYW5kbGVycyA9IGVsZW1lbnQuZXZlbnRzW3R5cGVdID0ge307CisJCQkvLyBzdG9yZSB0aGUgZXhpc3RpbmcgZXZlbnQgaGFuZGxlciAoaWYgdGhlcmUgaXMgb25lKQorCQkJaWYgKGVsZW1lbnRbIm9uIiArIHR5cGVdKSB7CisJCQkJaGFuZGxlcnNbMF0gPSBlbGVtZW50WyJvbiIgKyB0eXBlXTsKKwkJCX0KKwkJfQorCQkvLyBzdG9yZSB0aGUgZXZlbnQgaGFuZGxlciBpbiB0aGUgaGFzaCB0YWJsZQorCQloYW5kbGVyc1toYW5kbGVyLiQkZ3VpZF0gPSBoYW5kbGVyOworCQkvLyBhc3NpZ24gYSBnbG9iYWwgZXZlbnQgaGFuZGxlciB0byBkbyBhbGwgdGhlIHdvcmsKKwkJZWxlbWVudFsib24iICsgdHlwZV0gPSBoYW5kbGVFdmVudDsKKwl9Cit9OworLy8gYSBjb3VudGVyIHVzZWQgdG8gY3JlYXRlIHVuaXF1ZSBJRHMKK2RlYW5fYWRkRXZlbnQuZ3VpZCA9IDE7CisKK2Z1bmN0aW9uIHJlbW92ZUV2ZW50KGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHsKKwlpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7CisJCWVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7CisJfSBlbHNlIHsKKwkJLy8gZGVsZXRlIHRoZSBldmVudCBoYW5kbGVyIGZyb20gdGhlIGhhc2ggdGFibGUKKwkJaWYgKGVsZW1lbnQuZXZlbnRzICYmIGVsZW1lbnQuZXZlbnRzW3R5cGVdKSB7CisJCQlkZWxldGUgZWxlbWVudC5ldmVudHNbdHlwZV1baGFuZGxlci4kJGd1aWRdOworCQl9CisJfQorfTsKKworZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHsKKwl2YXIgcmV0dXJuVmFsdWUgPSB0cnVlOworCS8vIGdyYWIgdGhlIGV2ZW50IG9iamVjdCAoSUUgdXNlcyBhIGdsb2JhbCBldmVudCBvYmplY3QpCisJZXZlbnQgPSBldmVudCB8fCBmaXhFdmVudCgoKHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMpLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cpLmV2ZW50KTsKKwkvLyBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGhhc2ggdGFibGUgb2YgZXZlbnQgaGFuZGxlcnMKKwl2YXIgaGFuZGxlcnMgPSB0aGlzLmV2ZW50c1tldmVudC50eXBlXTsKKwkvLyBleGVjdXRlIGVhY2ggZXZlbnQgaGFuZGxlcgorCWZvciAodmFyIGkgaW4gaGFuZGxlcnMpIHsKKwkJdGhpcy4kJGhhbmRsZUV2ZW50ID0gaGFuZGxlcnNbaV07CisJCWlmICh0aGlzLiQkaGFuZGxlRXZlbnQoZXZlbnQpID09PSBmYWxzZSkgeworCQkJcmV0dXJuVmFsdWUgPSBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dXJuVmFsdWU7Cit9OworCitmdW5jdGlvbiBmaXhFdmVudChldmVudCkgeworCS8vIGFkZCBXM0Mgc3RhbmRhcmQgZXZlbnQgbWV0aG9kcworCWV2ZW50LnByZXZlbnREZWZhdWx0ID0gZml4RXZlbnQucHJldmVudERlZmF1bHQ7CisJZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gZml4RXZlbnQuc3RvcFByb3BhZ2F0aW9uOworCXJldHVybiBldmVudDsKK307CitmaXhFdmVudC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeworCXRoaXMucmV0dXJuVmFsdWUgPSBmYWxzZTsKK307CitmaXhFdmVudC5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlOworfQorCisvLyBEZWFuJ3MgZm9yRWFjaDogaHR0cDovL2RlYW4uZWR3YXJkcy5uYW1lL2Jhc2UvZm9yRWFjaC5qcworLyoKKwlmb3JFYWNoLCB2ZXJzaW9uIDEuMAorCUNvcHlyaWdodCAyMDA2LCBEZWFuIEVkd2FyZHMKKwlMaWNlbnNlOiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAorKi8KKworLy8gYXJyYXktbGlrZSBlbnVtZXJhdGlvbgoraWYgKCFBcnJheS5mb3JFYWNoKSB7IC8vIG1vemlsbGEgYWxyZWFkeSBzdXBwb3J0cyB0aGlzCisJQXJyYXkuZm9yRWFjaCA9IGZ1bmN0aW9uKGFycmF5LCBibG9jaywgY29udGV4dCkgeworCQlmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisJCQlibG9jay5jYWxsKGNvbnRleHQsIGFycmF5W2ldLCBpLCBhcnJheSk7CisJCX0KKwl9OworfQorCisvLyBnZW5lcmljIGVudW1lcmF0aW9uCitGdW5jdGlvbi5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYmxvY2ssIGNvbnRleHQpIHsKKwlmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7CisJCWlmICh0eXBlb2YgdGhpcy5wcm90b3R5cGVba2V5XSA9PSAidW5kZWZpbmVkIikgeworCQkJYmxvY2suY2FsbChjb250ZXh0LCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpOworCQl9CisJfQorfTsKKworLy8gY2hhcmFjdGVyIGVudW1lcmF0aW9uCitTdHJpbmcuZm9yRWFjaCA9IGZ1bmN0aW9uKHN0cmluZywgYmxvY2ssIGNvbnRleHQpIHsKKwlBcnJheS5mb3JFYWNoKHN0cmluZy5zcGxpdCgiIiksIGZ1bmN0aW9uKGNociwgaW5kZXgpIHsKKwkJYmxvY2suY2FsbChjb250ZXh0LCBjaHIsIGluZGV4LCBzdHJpbmcpOworCX0pOworfTsKKworLy8gZ2xvYmFsbHkgcmVzb2x2ZSBmb3JFYWNoIGVudW1lcmF0aW9uCit2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYmxvY2ssIGNvbnRleHQpIHsKKwlpZiAob2JqZWN0KSB7CisJCXZhciByZXNvbHZlID0gT2JqZWN0OyAvLyBkZWZhdWx0CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBGdW5jdGlvbikgeworCQkJLy8gZnVuY3Rpb25zIGhhdmUgYSAibGVuZ3RoIiBwcm9wZXJ0eQorCQkJcmVzb2x2ZSA9IEZ1bmN0aW9uOworCQl9IGVsc2UgaWYgKG9iamVjdC5mb3JFYWNoIGluc3RhbmNlb2YgRnVuY3Rpb24pIHsKKwkJCS8vIHRoZSBvYmplY3QgaW1wbGVtZW50cyBhIGN1c3RvbSBmb3JFYWNoIG1ldGhvZCBzbyB1c2UgdGhhdAorCQkJb2JqZWN0LmZvckVhY2goYmxvY2ssIGNvbnRleHQpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT0gInN0cmluZyIpIHsKKwkJCS8vIHRoZSBvYmplY3QgaXMgYSBzdHJpbmcKKwkJCXJlc29sdmUgPSBTdHJpbmc7CisJCX0gZWxzZSBpZiAodHlwZW9mIG9iamVjdC5sZW5ndGggPT0gIm51bWJlciIpIHsKKwkJCS8vIHRoZSBvYmplY3QgaXMgYXJyYXktbGlrZQorCQkJcmVzb2x2ZSA9IEFycmF5OworCQl9CisJCXJlc29sdmUuZm9yRWFjaChvYmplY3QsIGJsb2NrLCBjb250ZXh0KTsKKwl9Cit9OwpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLXZpZXcvQ01ha2VMaXN0cy50eHQgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzA1Y2E1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLXZpZXcvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw0MSBAQAorb3B0aW9uKENMQU5HX0lOU1RBTExfU0NBTlZJRVcgIkluc3RhbGwgdGhlIHNjYW4tdmlldyB0b29sIiBPTikKKworc2V0KEJpbkZpbGVzCisgICAgICBzY2FuLXZpZXcpCisKK3NldChTaGFyZUZpbGVzCisgICAgICBTY2FuVmlldy5weQorICAgICAgUmVwb3J0ZXIucHkKKyAgICAgIHN0YXJ0ZmlsZS5weQorICAgICAgRmlsZVJhZGFyLnNjcHQKKyAgICAgIEdldFJhZGFyVmVyc2lvbi5zY3B0CisgICAgICBidWdjYXRjaGVyLmljbykKKworaWYoQ0xBTkdfSU5TVEFMTF9TQ0FOVklFVykKKyAgZm9yZWFjaChCaW5GaWxlICR7QmluRmlsZXN9KQorICAgIGFkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vJHtCaW5GaWxlfQorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgbWFrZV9kaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L2JpbgorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9iaW4vJHtCaW5GaWxlfQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vYmluLworICAgICAgICAgICAgICAgICAgICAgICBERVBFTkRTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9iaW4vJHtCaW5GaWxlfSkKKyAgICBsaXN0KEFQUEVORCBEZXBlbmRzICR7Q01BS0VfQklOQVJZX0RJUn0vYmluLyR7QmluRmlsZX0pCisgICAgaW5zdGFsbChQUk9HUkFNUyBiaW4vJHtCaW5GaWxlfSBERVNUSU5BVElPTiBiaW4pCisgIGVuZGZvcmVhY2goKQorCisgIGZvcmVhY2goU2hhcmVGaWxlICR7U2hhcmVGaWxlc30pCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tdmlldy8ke1NoYXJlRmlsZX0KKyAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIG1ha2VfZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9zaGFyZS9zY2FuLXZpZXcKKyAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc2hhcmUvJHtTaGFyZUZpbGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9zaGFyZS9zY2FuLXZpZXcvCisgICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NoYXJlLyR7U2hhcmVGaWxlfSkKKyAgICBsaXN0KEFQUEVORCBEZXBlbmRzICR7Q01BS0VfQklOQVJZX0RJUn0vc2hhcmUvc2Nhbi12aWV3LyR7U2hhcmVGaWxlfSkKKyAgICBpbnN0YWxsKEZJTEVTIHNoYXJlLyR7U2hhcmVGaWxlfSBERVNUSU5BVElPTiBzaGFyZS9zY2FuLXZpZXcpCisgIGVuZGZvcmVhY2goKQorCisgIGFkZF9jdXN0b21fdGFyZ2V0KHNjYW4tdmlldyBBTEwgREVQRU5EUyAke0RlcGVuZHN9KQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoc2Nhbi12aWV3IFBST1BFUlRJRVMgRk9MREVSICJNaXNjIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi12aWV3L2Jpbi9zY2FuLXZpZXcgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9iaW4vc2Nhbi12aWV3Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiNmU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9iaW4vc2Nhbi12aWV3CkBAIC0wLDAgKzEsMTQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIiIiVGhlIGNsYW5nIHN0YXRpYyBhbmFseXplciByZXN1bHRzIHZpZXdlci4KKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgaW1wCitpbXBvcnQgb3MKK2ltcG9ydCBwb3NpeHBhdGgKK2ltcG9ydCB0aHJlYWQKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliCitpbXBvcnQgd2ViYnJvd3NlcgorCisjIEhvdyBsb25nIHRvIHdhaXQgZm9yIHNlcnZlciB0byBzdGFydC4KK2tTbGVlcFRpbWVvdXQgPSAuMDUKK2tNYXhTbGVlcHMgPSBpbnQoNjAgLyBrU2xlZXBUaW1lb3V0KQorCisjIERlZmF1bHQgc2VydmVyIHBhcmFtZXRlcnMKKwora0RlZmF1bHRIb3N0ID0gJzEyNy4wLjAuMScKK2tEZWZhdWx0UG9ydCA9IDgxODEKK2tNYXhQb3J0c1RvVHJ5ID0gMTAwCisKKyMjIworCisKK2RlZiB1cmxfaXNfdXAodXJsKToKKyAgICB0cnk6CisgICAgICAgIG8gPSB1cmxsaWIudXJsb3Blbih1cmwpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIG8uY2xvc2UoKQorICAgIHJldHVybiBUcnVlCisKKworZGVmIHN0YXJ0X2Jyb3dzZXIocG9ydCwgb3B0aW9ucyk6CisgICAgaW1wb3J0IHVybGxpYgorICAgIGltcG9ydCB3ZWJicm93c2VyCisKKyAgICB1cmwgPSAnaHR0cDovLyVzOiVkJyAlIChvcHRpb25zLmhvc3QsIHBvcnQpCisKKyAgICAjIFdhaXQgZm9yIHNlcnZlciB0byBzdGFydC4uLgorICAgIGlmIG9wdGlvbnMuZGVidWc6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJyVzOiBXYWl0aW5nIGZvciBzZXJ2ZXIuJyAlIHN5cy5hcmd2WzBdKQorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICBmb3IgaSBpbiByYW5nZShrTWF4U2xlZXBzKToKKyAgICAgICAgaWYgdXJsX2lzX3VwKHVybCk6CisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLicpCisgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgdGltZS5zbGVlcChrU2xlZXBUaW1lb3V0KQorICAgIGVsc2U6CisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdXQVJOSU5HOiBVbmFibGUgdG8gZGV0ZWN0IHRoYXQgc2VydmVyIHN0YXJ0ZWQuJworCisgICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgJyVzOiBTdGFydGluZyB3ZWJicm93c2VyLi4uJyAlIHN5cy5hcmd2WzBdCisgICAgd2ViYnJvd3Nlci5vcGVuKHVybCkKKworCitkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIHJvb3QpOgorICAgICMgUHJlZmVyIHRvIGxvb2sgcmVsYXRpdmUgdG8gdGhlIGluc3RhbGxlZCBiaW5hcnkKKyAgICBzaGFyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAiLy4uL3NoYXJlL3NjYW4tdmlldyIKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzaGFyZSk6CisgICAgICAgICMgT3RoZXJ3aXNlIGxvb2sgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZQorICAgICAgICBzaGFyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAiLy4uLy4uL3NjYW4tdmlldy9zaGFyZSIKKyAgICBzeXMucGF0aC5hcHBlbmQoc2hhcmUpCisKKyAgICBpbXBvcnQgU2NhblZpZXcKKyAgICB0cnk6CisgICAgICAgIHByaW50ICdTdGFydGluZyBzY2FuLXZpZXcgYXQ6IGh0dHA6Ly8lczolZCcgJSAob3B0aW9ucy5ob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQpCisgICAgICAgIHByaW50ICcgIFVzZSBDdHJsLUMgdG8gZXhpdC4nCisgICAgICAgIGh0dHBkID0gU2NhblZpZXcuY3JlYXRlX3NlcnZlcigob3B0aW9ucy5ob3N0LCBwb3J0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIHJvb3QpCisgICAgICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgcGFzcworCisKK2RlZiBwb3J0X2lzX29wZW4ocG9ydCk6CisgICAgaW1wb3J0IFNvY2tldFNlcnZlcgorICAgIHRyeToKKyAgICAgICAgdCA9IFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIoKGtEZWZhdWx0SG9zdCwgcG9ydCksIE5vbmUpCisgICAgZXhjZXB0OgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICB0LnNlcnZlcl9jbG9zZSgpCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgbWFpbigpOgorICAgIGltcG9ydCBhcmdwYXJzZQorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJUaGUgY2xhbmcgc3RhdGljIGFuYWx5emVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyB2aWV3ZXIuIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJyb290IiwgbWV0YXZhcj0iPHJlc3VsdHMgZGlyZWN0b3J5PiIsIHR5cGU9c3RyKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICctLWhvc3QnLCBkZXN0PSJob3N0IiwgZGVmYXVsdD1rRGVmYXVsdEhvc3QsIHR5cGU9c3RyLAorICAgICAgICBoZWxwPSJIb3N0IGludGVyZmFjZSB0byBsaXN0ZW4gb24uIChkZWZhdWx0PSVzKSIgJSBrRGVmYXVsdEhvc3QpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wb3J0JywgZGVzdD0icG9ydCIsIGRlZmF1bHQ9Tm9uZSwgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQb3J0IHRvIGxpc3RlbiBvbi4gKGRlZmF1bHQ9JXMpIiAlIGtEZWZhdWx0UG9ydCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWRlYnVnIiwgZGVzdD0iZGVidWciLCBkZWZhdWx0PTAsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImNvdW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlByaW50IGFkZGl0aW9uYWwgZGVidWdnaW5nIGluZm9ybWF0aW9uLiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1hdXRvLXJlbG9hZCIsIGRlc3Q9ImF1dG9SZWxvYWQiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkF1dG9tYXRpY2FsbHkgdXBkYXRlIG1vZHVsZSBmb3IgZWFjaCByZXF1ZXN0LiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1uby1icm93c2VyIiwgZGVzdD0ic3RhcnRCcm93c2VyIiwgZGVmYXVsdD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9mYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEb24ndCBvcGVuIGEgd2ViYnJvd3NlciBvbiBzdGFydHVwLiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1hbGxvdy1hbGwtaG9zdHMiLCBkZXN0PSJvbmx5U2VydmVMb2NhbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQWxsb3cgY29ubmVjdGlvbnMgZnJvbSBhbnkgaG9zdCAoYWNjZXNzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3RyaWN0ZWQgdG8gIjEyNy4wLjAuMSIgYnkgZGVmYXVsdCknKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICAjIE1ha2Ugc3VyZSB0aGlzIGRpcmVjdG9yeSBpcyBpbiBhIHJlYXNvbmFibGUgc3RhdGUgdG8gdmlldy4KKyAgICBpZiBub3QgcG9zaXhwYXRoLmV4aXN0cyhwb3NpeHBhdGguam9pbihhcmdzLnJvb3QsICdpbmRleC5odG1sJykpOgorICAgICAgICBwYXJzZXIuZXJyb3IoJ0ludmFsaWQgZGlyZWN0b3J5LCBhbmFseXNpcyByZXN1bHRzIG5vdCBmb3VuZCEnKQorCisgICAgIyBGaW5kIGFuIG9wZW4gcG9ydC4gV2UgYXJlbid0IHBhcnRpY3VsYXJseSB3b3JyaWVkIGFib3V0IHJhY2UKKyAgICAjIGNvbmRpdGlvbnMgaGVyZS4gTm90ZSB0aGF0IGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIHBvcnQgd2Ugb25seQorICAgICMgdXNlIHRoYXQgb25lLgorICAgIGlmIGFyZ3MucG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgcG9ydCA9IGFyZ3MucG9ydAorICAgIGVsc2U6CisgICAgICAgIGZvciBpIGluIHJhbmdlKGtNYXhQb3J0c1RvVHJ5KToKKyAgICAgICAgICAgIGlmIHBvcnRfaXNfb3BlbihrRGVmYXVsdFBvcnQgKyBpKToKKyAgICAgICAgICAgICAgICBwb3J0ID0ga0RlZmF1bHRQb3J0ICsgaQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIHVzYWJsZSBwb3J0IGluIFslZCwlZCknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAoa0RlZmF1bHRQb3J0LCBrRGVmYXVsdFBvcnQra01heFBvcnRzVG9UcnkpKQorCisgICAgIyBLaWNrIG9mZiB0aHJlYWQgdG8gd2FpdCBmb3Igc2VydmVyIGFuZCBzdGFydCB3ZWIgYnJvd3NlciwgaWYKKyAgICAjIHJlcXVlc3RlZC4KKyAgICBpZiBhcmdzLnN0YXJ0QnJvd3NlcjoKKyAgICAgICAgdCA9IHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHN0YXJ0X2Jyb3dzZXIsIChwb3J0LCBhcmdzKSkKKworICAgIHJ1bihwb3J0LCBhcmdzLCBhcmdzLnJvb3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9GaWxlUmFkYXIuc2NwdCBiL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL0ZpbGVSYWRhci5zY3B0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNzQ1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9GaWxlUmFkYXIuc2NwdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9HZXRSYWRhclZlcnNpb24uc2NwdCBiL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL0dldFJhZGFyVmVyc2lvbi5zY3B0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9HZXRSYWRhclZlcnNpb24uc2NwdApkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLXZpZXcvc2hhcmUvUmVwb3J0ZXIucHkgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9SZXBvcnRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRlMDViCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLXZpZXcvc2hhcmUvUmVwb3J0ZXIucHkKQEAgLTAsMCArMSwyNDggQEAKKyIiIk1ldGhvZHMgZm9yIHJlcG9ydGluZyBidWdzLiIiIgorCitpbXBvcnQgc3VicHJvY2Vzcywgc3lzLCBvcworCitfX2FsbF9fID0gWydSZXBvcnRGYWlsdXJlJywgJ0J1Z1JlcG9ydCcsICdnZXRSZXBvcnRlcnMnXQorCisjCisKK2NsYXNzIFJlcG9ydEZhaWx1cmUoRXhjZXB0aW9uKToKKyAgICAiIiJHZW5lcmljIGV4Y2VwdGlvbiBmb3IgZmFpbHVyZXMgaW4gYnVnIHJlcG9ydGluZy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOiAgICAgICAgCisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisjIENvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgYSBidWcuCisKK2NsYXNzIEJ1Z1JlcG9ydDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIGRlc2NyaXB0aW9uLCBmaWxlcyk6CisgICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi5maWxlcyA9IGZpbGVzCisKKyMgUmVwb3J0ZXIgaW50ZXJmYWNlcy4KKworaW1wb3J0IG9zCisKK2ltcG9ydCBlbWFpbCwgbWltZXR5cGVzLCBzbXRwbGliCitmcm9tIGVtYWlsIGltcG9ydCBlbmNvZGVycworZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCitmcm9tIGVtYWlsLm1pbWUuYmFzZSBpbXBvcnQgTUlNRUJhc2UKK2Zyb20gZW1haWwubWltZS5tdWx0aXBhcnQgaW1wb3J0IE1JTUVNdWx0aXBhcnQKK2Zyb20gZW1haWwubWltZS50ZXh0IGltcG9ydCBNSU1FVGV4dAorCisjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IworIyBSZXBvcnRlclBhcmFtZXRlcgorIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMKKworY2xhc3MgUmVwb3J0ZXJQYXJhbWV0ZXI6CisgIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKKyAgICBzZWxmLm5hbWUgPSBuCisgIGRlZiBnZXROYW1lKHNlbGYpOgorICAgIHJldHVybiBzZWxmLm5hbWUKKyAgZGVmIGdldFZhbHVlKHNlbGYscixidWd0eXBlLGdldENvbmZpZ09wdGlvbik6CisgICAgIHJldHVybiBnZXRDb25maWdPcHRpb24oci5nZXROYW1lKCksc2VsZi5nZXROYW1lKCkpCisgIGRlZiBzYXZlQ29uZmlnVmFsdWUoc2VsZik6CisgICAgcmV0dXJuIFRydWUKKworY2xhc3MgVGV4dFBhcmFtZXRlciAoUmVwb3J0ZXJQYXJhbWV0ZXIpOgorICBkZWYgZ2V0SFRNTChzZWxmLHIsYnVndHlwZSxnZXRDb25maWdPcHRpb24pOgorICAgIHJldHVybiAiIiJcCis8dHI+Cis8dGQgY2xhc3M9ImZvcm1fY2xhYmVsIj4lczo8L3RkPgorPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iJXNfJXMiIHZhbHVlPSIlcyI+PC90ZD4KKzwvdHI+IiIiJShzZWxmLmdldE5hbWUoKSxyLmdldE5hbWUoKSxzZWxmLmdldE5hbWUoKSxzZWxmLmdldFZhbHVlKHIsYnVndHlwZSxnZXRDb25maWdPcHRpb24pKQorCitjbGFzcyBTZWxlY3Rpb25QYXJhbWV0ZXIgKFJlcG9ydGVyUGFyYW1ldGVyKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIG4sIHZhbHVlcyk6CisgICAgUmVwb3J0ZXJQYXJhbWV0ZXIuX19pbml0X18oc2VsZixuKQorICAgIHNlbGYudmFsdWVzID0gdmFsdWVzCisgICAgCisgIGRlZiBnZXRIVE1MKHNlbGYscixidWd0eXBlLGdldENvbmZpZ09wdGlvbik6CisgICAgZGVmYXVsdCA9IHNlbGYuZ2V0VmFsdWUocixidWd0eXBlLGdldENvbmZpZ09wdGlvbikKKyAgICByZXR1cm4gIiIiXAorPHRyPgorPHRkIGNsYXNzPSJmb3JtX2NsYWJlbCI+JXM6PC90ZD48dGQgY2xhc3M9ImZvcm1fdmFsdWUiPjxzZWxlY3QgbmFtZT0iJXNfJXMiPgorJXMKKzwvc2VsZWN0PjwvdGQ+IiIiJShzZWxmLmdldE5hbWUoKSxyLmdldE5hbWUoKSxzZWxmLmdldE5hbWUoKSwnXG4nLmpvaW4oWyIiIlwKKzxvcHRpb24gdmFsdWU9IiVzIiVzPiVzPC9vcHRpb24+IiIiJShvWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9bMF0gPT0gZGVmYXVsdCBhbmQgJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyBvciAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvWzFdKSBmb3IgbyBpbiBzZWxmLnZhbHVlc10pKQorCisjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IworIyBSZXBvcnRlcnMKKyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jCisKK2NsYXNzIEVtYWlsUmVwb3J0ZXI6CisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnRW1haWwnCisKKyAgICBkZWYgZ2V0UGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG1hcChsYW1iZGEgeDpUZXh0UGFyYW1ldGVyKHgpLFsnVG8nLCAnRnJvbScsICdTTVRQIFNlcnZlcicsICdTTVRQIFBvcnQnXSkKKworICAgICMgTGlmdGVkIGZyb20gcHl0aG9uIGVtYWlsIG1vZHVsZSBleGFtcGxlcy4KKyAgICBkZWYgYXR0YWNoRmlsZShzZWxmLCBvdXRlciwgcGF0aCk6CisgICAgICAgICMgR3Vlc3MgdGhlIGNvbnRlbnQgdHlwZSBiYXNlZCBvbiB0aGUgZmlsZSdzIGV4dGVuc2lvbi4gIEVuY29kaW5nCisgICAgICAgICMgd2lsbCBiZSBpZ25vcmVkLCBhbHRob3VnaCB3ZSBzaG91bGQgY2hlY2sgZm9yIHNpbXBsZSB0aGluZ3MgbGlrZQorICAgICAgICAjIGd6aXAnZCBvciBjb21wcmVzc2VkIGZpbGVzLgorICAgICAgICBjdHlwZSwgZW5jb2RpbmcgPSBtaW1ldHlwZXMuZ3Vlc3NfdHlwZShwYXRoKQorICAgICAgICBpZiBjdHlwZSBpcyBOb25lIG9yIGVuY29kaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBObyBndWVzcyBjb3VsZCBiZSBtYWRlLCBvciB0aGUgZmlsZSBpcyBlbmNvZGVkIChjb21wcmVzc2VkKSwgc28KKyAgICAgICAgICAgICMgdXNlIGEgZ2VuZXJpYyBiYWctb2YtYml0cyB0eXBlLgorICAgICAgICAgICAgY3R5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJworICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IGN0eXBlLnNwbGl0KCcvJywgMSkKKyAgICAgICAgaWYgbWFpbnR5cGUgPT0gJ3RleHQnOgorICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgpCisgICAgICAgICAgICAjIE5vdGU6IHdlIHNob3VsZCBoYW5kbGUgY2FsY3VsYXRpbmcgdGhlIGNoYXJzZXQKKyAgICAgICAgICAgIG1zZyA9IE1JTUVUZXh0KGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQorICAgICAgICAgICAgbXNnID0gTUlNRUJhc2UobWFpbnR5cGUsIHN1YnR5cGUpCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQoZnAucmVhZCgpKQorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgIyBFbmNvZGUgdGhlIHBheWxvYWQgdXNpbmcgQmFzZTY0CisgICAgICAgICAgICBlbmNvZGVycy5lbmNvZGVfYmFzZTY0KG1zZykKKyAgICAgICAgIyBTZXQgdGhlIGZpbGVuYW1lIHBhcmFtZXRlcgorICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywgZmlsZW5hbWU9b3MucGF0aC5iYXNlbmFtZShwYXRoKSkKKyAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKKworICAgIGRlZiBmaWxlUmVwb3J0KHNlbGYsIHJlcG9ydCwgcGFyYW1ldGVycyk6CisgICAgICAgIG1haW5Nc2cgPSAiIiJcCitCVUcgUkVQT1JUCistLS0KK1RpdGxlOiAlcworRGVzY3JpcHRpb246ICVzCisiIiIlKHJlcG9ydC50aXRsZSwgcmVwb3J0LmRlc2NyaXB0aW9uKQorCisgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXJzLmdldCgnVG8nKToKKyAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoJ05vICJUbyIgYWRkcmVzcyBzcGVjaWZpZWQuJykKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnMuZ2V0KCdGcm9tJyk6CisgICAgICAgICAgICByYWlzZSBSZXBvcnRGYWlsdXJlKCdObyAiRnJvbSIgYWRkcmVzcyBzcGVjaWZpZWQuJykKKworICAgICAgICBtc2cgPSBNSU1FTXVsdGlwYXJ0KCkKKyAgICAgICAgbXNnWydTdWJqZWN0J10gPSAnQlVHIFJFUE9SVDogJXMnJShyZXBvcnQudGl0bGUpCisgICAgICAgICMgRklYTUU6IEdldCBjb25maWcgcGFyYW1ldGVycworICAgICAgICBtc2dbJ1RvJ10gPSBwYXJhbWV0ZXJzLmdldCgnVG8nKQorICAgICAgICBtc2dbJ0Zyb20nXSA9IHBhcmFtZXRlcnMuZ2V0KCdGcm9tJykKKyAgICAgICAgbXNnLnByZWFtYmxlID0gbWFpbk1zZworCisgICAgICAgIG1zZy5hdHRhY2goTUlNRVRleHQobWFpbk1zZywgX3N1YnR5cGU9J3RleHQvcGxhaW4nKSkKKyAgICAgICAgZm9yIGZpbGUgaW4gcmVwb3J0LmZpbGVzOgorICAgICAgICAgICAgc2VsZi5hdHRhY2hGaWxlKG1zZywgZmlsZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc210cGxpYi5TTVRQKGhvc3Q9cGFyYW1ldGVycy5nZXQoJ1NNVFAgU2VydmVyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ9cGFyYW1ldGVycy5nZXQoJ1NNVFAgUG9ydCcpKQorICAgICAgICAgICAgcy5zZW5kbWFpbChtc2dbJ0Zyb20nXSwgbXNnWydUbyddLCBtc2cuYXNfc3RyaW5nKCkpCisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UgUmVwb3J0RmFpbHVyZSgnVW5hYmxlIHRvIHNlbmQgbWVzc2FnZSB2aWEgU01UUC4nKQorCisgICAgICAgIHJldHVybiAiTWVzc2FnZSBzZW50ISIKKworY2xhc3MgQnVnemlsbGFSZXBvcnRlcjoKKyAgICBkZWYgZ2V0TmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdCdWd6aWxsYScKKyAgICAKKyAgICBkZWYgZ2V0UGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG1hcChsYW1iZGEgeDpUZXh0UGFyYW1ldGVyKHgpLFsnVVJMJywnUHJvZHVjdCddKQorCisgICAgZGVmIGZpbGVSZXBvcnQoc2VsZiwgcmVwb3J0LCBwYXJhbWV0ZXJzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorIAorCitjbGFzcyBSYWRhckNsYXNzaWZpY2F0aW9uUGFyYW1ldGVyKFNlbGVjdGlvblBhcmFtZXRlcik6CisgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBTZWxlY3Rpb25QYXJhbWV0ZXIuX19pbml0X18oc2VsZiwiQ2xhc3NpZmljYXRpb24iLAorICAgICAgICAgICAgW1snMScsICdTZWN1cml0eSddLCBbJzInLCAnQ3Jhc2gvSGFuZy9EYXRhIExvc3MnXSwKKyAgICAgICAgICAgICBbJzMnLCAnUGVyZm9ybWFuY2UnXSwgWyc0JywgJ1VJL1VzYWJpbGl0eSddLCAKKyAgICAgICAgICAgICBbJzYnLCAnU2VyaW91cyBCdWcnXSwgWyc3JywgJ090aGVyJ11dKQorCisgIGRlZiBzYXZlQ29uZmlnVmFsdWUoc2VsZik6CisgICAgcmV0dXJuIEZhbHNlCisgICAgCisgIGRlZiBnZXRWYWx1ZShzZWxmLHIsYnVndHlwZSxnZXRDb25maWdPcHRpb24pOgorICAgIGlmIGJ1Z3R5cGUuZmluZCgibGVhayIpICE9IC0xOgorICAgICAgcmV0dXJuICczJworICAgIGVsaWYgYnVndHlwZS5maW5kKCJkZXJlZmVyZW5jZSIpICE9IC0xOgorICAgICAgcmV0dXJuICcyJworICAgIGVsaWYgYnVndHlwZS5maW5kKCJtaXNzaW5nIGl2YXIgcmVsZWFzZSIpICE9IC0xOgorICAgICAgcmV0dXJuICczJworICAgIGVsc2U6CisgICAgICByZXR1cm4gJzcnCisKK2NsYXNzIFJhZGFyUmVwb3J0ZXI6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpc0F2YWlsYWJsZSgpOgorICAgICAgICAjIEZJWE1FOiBGaW5kIHRoaXMgLnNjcHQgYmV0dGVyCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwnLi4vc2hhcmUvc2Nhbi12aWV3L0dldFJhZGFyVmVyc2lvbi5zY3B0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsnb3Nhc2NyaXB0JyxwYXRoXSwgCisgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGRhdGEsZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHJlcyA9IHAud2FpdCgpCisgICAgICAgICMgRklYTUU6IENoZWNrIHZlcnNpb24/IENoZWNrIGZvciBubyBlcnJvcnM/CisgICAgICAgIHJldHVybiByZXMgPT0gMAorCisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnUmFkYXInCisKKyAgICBkZWYgZ2V0UGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFsgVGV4dFBhcmFtZXRlcignQ29tcG9uZW50JyksIFRleHRQYXJhbWV0ZXIoJ0NvbXBvbmVudCBWZXJzaW9uJyksCisgICAgICAgICAgICAgICAgIFJhZGFyQ2xhc3NpZmljYXRpb25QYXJhbWV0ZXIoKSBdCisKKyAgICBkZWYgZmlsZVJlcG9ydChzZWxmLCByZXBvcnQsIHBhcmFtZXRlcnMpOgorICAgICAgICBjb21wb25lbnQgPSBwYXJhbWV0ZXJzLmdldCgnQ29tcG9uZW50JywgJycpCisgICAgICAgIGNvbXBvbmVudFZlcnNpb24gPSBwYXJhbWV0ZXJzLmdldCgnQ29tcG9uZW50IFZlcnNpb24nLCAnJykKKyAgICAgICAgY2xhc3NpZmljYXRpb24gPSBwYXJhbWV0ZXJzLmdldCgnQ2xhc3NpZmljYXRpb24nLCAnJykKKyAgICAgICAgcGVyc29uSUQgPSAiIgorICAgICAgICBkaWFnbm9zaXMgPSAiIgorICAgICAgICBjb25maWcgPSAiIgorCisgICAgICAgIGlmIG5vdCBjb21wb25lbnQuc3RyaXAoKToKKyAgICAgICAgICAgIGNvbXBvbmVudCA9ICdCdWdzIGZvdW5kIGJ5IGNsYW5nIEFuYWx5emVyJworICAgICAgICBpZiBub3QgY29tcG9uZW50VmVyc2lvbi5zdHJpcCgpOgorICAgICAgICAgICAgY29tcG9uZW50VmVyc2lvbiA9ICdYJworCisgICAgICAgIHNjcmlwdCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCcuLi9zaGFyZS9zY2FuLXZpZXcvRmlsZVJhZGFyLnNjcHQnKQorICAgICAgICBhcmdzID0gWydvc2FzY3JpcHQnLCBzY3JpcHQsIGNvbXBvbmVudCwgY29tcG9uZW50VmVyc2lvbiwgY2xhc3NpZmljYXRpb24sIHBlcnNvbklELCByZXBvcnQudGl0bGUsCisgICAgICAgICAgICAgICAgcmVwb3J0LmRlc2NyaXB0aW9uLCBkaWFnbm9zaXMsIGNvbmZpZ10gKyBtYXAob3MucGF0aC5hYnNwYXRoLCByZXBvcnQuZmlsZXMpCisjICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsIGFyZ3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoIlVuYWJsZSB0byBmaWxlIHJhZGFyIChBcHBsZVNjcmlwdCBmYWlsdXJlKS4iKQorICAgICAgICBkYXRhLCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgcmVzID0gcC53YWl0KCkKKworICAgICAgICBpZiByZXM6CisgICAgICAgICAgICByYWlzZSBSZXBvcnRGYWlsdXJlKCJVbmFibGUgdG8gZmlsZSByYWRhciAoQXBwbGVTY3JpcHQgZmFpbHVyZSkuIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZXMgPSBldmFsKGRhdGEpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoIlVuYWJsZSB0byBwcm9jZXNzIHJhZGFyIHJlc3VsdHMuIikKKworICAgICAgICAjIFdlIGV4cGVjdCAoaW50OiBidWdJRCwgc3RyOiBtZXNzYWdlKQorICAgICAgICBpZiBsZW4odmFsdWVzKSAhPSAyIG9yIG5vdCBpc2luc3RhbmNlKHZhbHVlc1swXSwgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoIlVuYWJsZSB0byBwcm9jZXNzIHJhZGFyIHJlc3VsdHMuIikKKworICAgICAgICBidWdJRCxtZXNzYWdlID0gdmFsdWVzCisgICAgICAgIGJ1Z0lEID0gaW50KGJ1Z0lEKQorICAgICAgICAKKyAgICAgICAgaWYgbm90IGJ1Z0lEOgorICAgICAgICAgICAgcmFpc2UgUmVwb3J0RmFpbHVyZShtZXNzYWdlKQorICAgICAgICAKKyAgICAgICAgcmV0dXJuICJGaWxlZDogPGEgaHJlZj1cInJkYXI6Ly8lZC9cIj4lZDwvYT4iJShidWdJRCxidWdJRCkKKworIyMjCisKK2RlZiBnZXRSZXBvcnRlcnMoKToKKyAgICByZXBvcnRlcnMgPSBbXQorICAgIGlmIFJhZGFyUmVwb3J0ZXIuaXNBdmFpbGFibGUoKToKKyAgICAgICAgcmVwb3J0ZXJzLmFwcGVuZChSYWRhclJlcG9ydGVyKCkpCisgICAgcmVwb3J0ZXJzLmFwcGVuZChFbWFpbFJlcG9ydGVyKCkpCisgICAgcmV0dXJuIHJlcG9ydGVycworCmRpZmYgLS1naXQgYS9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9TY2FuVmlldy5weSBiL2NsYW5nLTMzNjI0MzcvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL1NjYW5WaWV3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzAzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9TY2FuVmlldy5weQpAQCAtMCwwICsxLDc2NyBAQAoraW1wb3J0IEJhc2VIVFRQU2VydmVyCitpbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdXJsbGliLCB1cmxwYXJzZQoraW1wb3J0IHBvc2l4cGF0aAoraW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgc29ja2V0CitpbXBvcnQgaXRlcnRvb2xzCisKK2ltcG9ydCBSZXBvcnRlcgoraW1wb3J0IENvbmZpZ1BhcnNlcgorCisjIyMKKyMgVmFyaW91cyBwYXR0ZXJucyBtYXRjaGVkIG9yIHJlcGxhY2VkIGJ5IHNlcnZlci4KKwora1JlcG9ydEZpbGVSRSA9IHJlLmNvbXBpbGUoJyguKi8pP3JlcG9ydC0oLiopXFwuaHRtbCcpCisKK2tCdWdLZXlWYWx1ZVJFID0gcmUuY29tcGlsZSgnPCEtLSBCVUcoW14gXSopICguKikgLS0+JykKKworIyAgPCEtLSBSRVBPUlRQUk9CTEVNIGZpbGU9ImNyYXNoZXMvY2xhbmdfY3Jhc2hfbmRTR0Y5Lm1pIiBzdGRlcnI9ImNyYXNoZXMvY2xhbmdfY3Jhc2hfbmRTR0Y5Lm1pLnN0ZGVyci50eHQiIGluZm89ImNyYXNoZXMvY2xhbmdfY3Jhc2hfbmRTR0Y5Lm1pLmluZm8iIC0tPgorCitrUmVwb3J0Q3Jhc2hFbnRyeVJFID0gcmUuY29tcGlsZSgnPCEtLSBSRVBPUlRQUk9CTEVNICguKj8pLS0+JykKK2tSZXBvcnRDcmFzaEVudHJ5S2V5VmFsdWVSRSA9IHJlLmNvbXBpbGUoJyA/KFtePV0rKT0iKC4qPykiJykKKwora1JlcG9ydFJlcGxhY2VtZW50cyA9IFtdCisKKyMgQWRkIGN1c3RvbSBqYXZhc2NyaXB0Lgora1JlcG9ydFJlcGxhY2VtZW50cy5hcHBlbmQoKHJlLmNvbXBpbGUoJzwhLS0gU1VNTUFSWUVOREhFQUQgLS0+JyksICIiIlwKKzxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBsb2FkKHVybCkgeworICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CisgICAgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIH0gZWxzZSBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpIHsKKyAgICByZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKyAgfQorICBpZiAocmVxICE9IHVuZGVmaW5lZCkgeworICAgIHJlcS5vcGVuKCJHRVQiLCB1cmwsIHRydWUpOworICAgIHJlcS5zZW5kKCIiKTsKKyAgfQorfQorPC9zY3JpcHQ+IiIiKSkKKworIyBJbnNlcnQgYWRkaXRpb25hbCBjb2x1bW5zLgora1JlcG9ydFJlcGxhY2VtZW50cy5hcHBlbmQoKHJlLmNvbXBpbGUoJzwhLS0gUkVQT1JUQlVHQ09MIC0tPicpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRkPjwvdGQ+PHRkPjwvdGQ+JykpCisKKyMgSW5zZXJ0IHJlcG9ydCBidWcgYW5kIG9wZW4gZmlsZSBsaW5rcy4KK2tSZXBvcnRSZXBsYWNlbWVudHMuYXBwZW5kKChyZS5jb21waWxlKCc8IS0tIFJFUE9SVEJVRyBpZD0icmVwb3J0LSguKilcXC5odG1sIiAtLT4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJzx0ZCBjbGFzcz0iQnV0dG9uIj48YSBocmVmPSJyZXBvcnQvXFwxIj5SZXBvcnQgQnVnPC9hPjwvdGQ+JyArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRkIGNsYXNzPSJCdXR0b24iPjxhIGhyZWY9ImphdmFzY3JpcHQ6bG9hZChcJ29wZW4vXFwxXCcpIj5PcGVuIEZpbGU8L2E+PC90ZD4nKSkpCisKK2tSZXBvcnRSZXBsYWNlbWVudHMuYXBwZW5kKChyZS5jb21waWxlKCc8IS0tIFJFUE9SVEhFQURFUiAtLT4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aDM+PGEgaHJlZj0iLyI+U3VtbWFyeTwvYT4gPiBSZXBvcnQgJShyZXBvcnQpczwvaDM+JykpCisKK2tSZXBvcnRSZXBsYWNlbWVudHMuYXBwZW5kKChyZS5jb21waWxlKCc8IS0tIFJFUE9SVFNVTU1BUllFWFRSQSAtLT4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRkIGNsYXNzPSJCdXR0b24iPjxhIGhyZWY9InJlcG9ydC8lKHJlcG9ydClzIj5SZXBvcnQgQnVnPC9hPjwvdGQ+JykpCisKKyMgSW5zZXJ0IHJlcG9ydCBjcmFzaGVzIGxpbmsuCisKKyMgRGlzYWJsZWQgZm9yIHRoZSB0aW1lIGJlaW5nIHVudGlsIHdlIGRlY2lkZSBleGFjdGx5IHdoZW4gdGhpcyBzaG91bGQKKyMgYmUgZW5hYmxlZC4gQWxzbyB0aGUgcmFkYXIgcmVwb3J0ZXIgbmVlZHMgdG8gYmUgZml4ZWQgdG8gcmVwb3J0CisjIG11bHRpcGxlIGZpbGVzLgorCisja1JlcG9ydFJlcGxhY2VtZW50cy5hcHBlbmQoKHJlLmNvbXBpbGUoJzwhLS0gUkVQT1JUQ1JBU0hFUyAtLT4nKSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxicj5UaGVzZSBmaWxlcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYXR0YWNoZWQgdG8gJyArCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXBvcnRzIGZpbGVkIGhlcmU6IDxhIGhyZWY9InJlcG9ydF9jcmFzaGVzIj5SZXBvcnQgQ3Jhc2hlczwvYT4uJykpCisKKyMjIworIyBPdGhlciBzaW1wbGUgcGFyYW1ldGVycworCitrU2hhcmUgPSBwb3NpeHBhdGguam9pbihwb3NpeHBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLi9zaGFyZS9zY2FuLXZpZXcnKQora0NvbmZpZ1BhdGggPSBvcy5wYXRoLmV4cGFuZHVzZXIoJ34vLnNjYW52aWV3LmNmZycpCisKKyMjIworCitfX3ZlcnNpb25fXyA9ICIwLjEiCisKK19fYWxsX18gPSBbImNyZWF0ZV9zZXJ2ZXIiXQorCitjbGFzcyBSZXBvcnRlclRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwb3J0LCByZXBvcnRlciwgcGFyYW1ldGVycywgc2VydmVyKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnJlcG9ydCA9IHJlcG9ydAorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLnJlcG9ydGVyID0gcmVwb3J0ZXIKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycworICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICBzZWxmLnN0YXR1cyA9IE5vbmUKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIub3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICIlczogU0VSVkVSOiBzdWJtaXR0aW5nIGJ1Zy4iJShzeXMuYXJndlswXSwpCisgICAgICAgICAgICBzZWxmLnN0YXR1cyA9IHNlbGYucmVwb3J0ZXIuZmlsZVJlcG9ydChzZWxmLnJlcG9ydCwgc2VsZi5wYXJhbWV0ZXJzKQorICAgICAgICAgICAgc2VsZi5zdWNjZXNzID0gVHJ1ZQorICAgICAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIub3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICIlczogU0VSVkVSOiBzdWJtaXNzaW9uIGNvbXBsZXRlLiIlKHN5cy5hcmd2WzBdLCkKKyAgICAgICAgZXhjZXB0IFJlcG9ydGVyLlJlcG9ydEZhaWx1cmUsZToKKyAgICAgICAgICAgIHNlbGYuc3RhdHVzID0gZS52YWx1ZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgcHJpbnQgPj5zLCc8Yj5VbmhhbmRsZWQgRXhjZXB0aW9uPC9iPjxicj48cHJlPicKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZSxmaWxlPXMpCisgICAgICAgICAgICBwcmludCA+PnMsJzwvcHJlPicKKyAgICAgICAgICAgIHNlbGYuc3RhdHVzID0gcy5nZXR2YWx1ZSgpCisKK2NsYXNzIFNjYW5WaWV3U2VydmVyKEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzLCBoYW5kbGVyLCByb290LCByZXBvcnRlcnMsIG9wdGlvbnMpOgorICAgICAgICBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHJlc3MsIGhhbmRsZXIpCisgICAgICAgIHNlbGYucm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi5yZXBvcnRlcnMgPSByZXBvcnRlcnMKKyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucyAgICAgICAgCisgICAgICAgIHNlbGYuaGFsdGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb25maWcgPSBOb25lCisgICAgICAgIHNlbGYubG9hZF9jb25maWcoKQorCisgICAgZGVmIGxvYWRfY29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLmNvbmZpZyA9IENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIoKQorCisgICAgICAgICMgQWRkIGRlZmF1bHRzCisgICAgICAgIHNlbGYuY29uZmlnLmFkZF9zZWN0aW9uKCdTY2FuVmlldycpCisgICAgICAgIGZvciByIGluIHNlbGYucmVwb3J0ZXJzOgorICAgICAgICAgICAgc2VsZi5jb25maWcuYWRkX3NlY3Rpb24oci5nZXROYW1lKCkpCisgICAgICAgICAgICBmb3IgcCBpbiByLmdldFBhcmFtZXRlcnMoKToKKyAgICAgICAgICAgICAgaWYgcC5zYXZlQ29uZmlnVmFsdWUoKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5zZXQoci5nZXROYW1lKCksIHAuZ2V0TmFtZSgpLCAnJykKKworICAgICAgICAjIElnbm9yZSBwYXJzZSBlcnJvcnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jb25maWcucmVhZChba0NvbmZpZ1BhdGhdKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBTYXZlIG9uIGV4aXQKKyAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICBhdGV4aXQucmVnaXN0ZXIobGFtYmRhOiBzZWxmLnNhdmVfY29uZmlnKCkpCisgICAgICAgIAorICAgIGRlZiBzYXZlX2NvbmZpZyhzZWxmKToKKyAgICAgICAgIyBJZ25vcmUgZXJyb3JzIChvbmx5IGNhbGxlZCBvbiBleGl0KS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4oa0NvbmZpZ1BhdGgsJ3cnKQorICAgICAgICAgICAgc2VsZi5jb25maWcud3JpdGUoZikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIAorICAgIGRlZiBoYWx0KHNlbGYpOgorICAgICAgICBzZWxmLmhhbHRlZCA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiJXM6IFNFUlZFUjogaGFsdGluZy4iICUgKHN5cy5hcmd2WzBdLCkKKworICAgIGRlZiBzZXJ2ZV9mb3JldmVyKHNlbGYpOgorICAgICAgICB3aGlsZSBub3Qgc2VsZi5oYWx0ZWQ6CisgICAgICAgICAgICBpZiBzZWxmLm9wdGlvbnMuZGVidWcgPiAxOgorICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIiVzOiBTRVJWRVI6IHdhaXRpbmcuLi4iICUgKHN5cy5hcmd2WzBdLCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9yZXF1ZXN0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLGU6CisgICAgICAgICAgICAgICAgcHJpbnQgJ09TRXJyb3InLGUuZXJybm8KKworICAgIGRlZiBmaW5pc2hfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgIGlmIHNlbGYub3B0aW9ucy5hdXRvUmVsb2FkOgorICAgICAgICAgICAgaW1wb3J0IFNjYW5WaWV3CisgICAgICAgICAgICBzZWxmLlJlcXVlc3RIYW5kbGVyQ2xhc3MgPSByZWxvYWQoU2NhblZpZXcpLlNjYW5WaWV3UmVxdWVzdEhhbmRsZXIKKyAgICAgICAgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlci5maW5pc2hfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICAjIElnbm9yZSBzb2NrZXQgZXJyb3JzCisgICAgICAgIGluZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBpZiBpbmZvIGFuZCBpc2luc3RhbmNlKGluZm9bMV0sIHNvY2tldC5lcnJvcik6CisgICAgICAgICAgICBpZiBzZWxmLm9wdGlvbnMuZGVidWcgPiAxOgorICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIiVzOiBTRVJWRVI6IGlnbm9yZWQgc29ja2V0IGVycm9yLiIgJSAoc3lzLmFyZ3ZbMF0sKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIuaGFuZGxlX2Vycm9yKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQorCisjIEJvcnJvd2VkIGZyb20gUXVpeG90ZSwgd2l0aCBzaW1wbGlmaWNhdGlvbnMuCitkZWYgcGFyc2VfcXVlcnkocXMsIGZpZWxkcz1Ob25lKToKKyAgICBpZiBmaWVsZHMgaXMgTm9uZToKKyAgICAgICAgZmllbGRzID0ge30KKyAgICBmb3IgY2h1bmsgaW4gZmlsdGVyKE5vbmUsIHFzLnNwbGl0KCcmJykpOgorICAgICAgICBpZiAnPScgbm90IGluIGNodW5rOgorICAgICAgICAgICAgbmFtZSA9IGNodW5rCisgICAgICAgICAgICB2YWx1ZSA9ICcnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lLCB2YWx1ZSA9IGNodW5rLnNwbGl0KCc9JywgMSkKKyAgICAgICAgbmFtZSA9IHVybGxpYi51bnF1b3RlKG5hbWUucmVwbGFjZSgnKycsICcgJykpCisgICAgICAgIHZhbHVlID0gdXJsbGliLnVucXVvdGUodmFsdWUucmVwbGFjZSgnKycsICcgJykpCisgICAgICAgIGl0ZW0gPSBmaWVsZHMuZ2V0KG5hbWUpCisgICAgICAgIGlmIGl0ZW0gaXMgTm9uZToKKyAgICAgICAgICAgIGZpZWxkc1tuYW1lXSA9IFt2YWx1ZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGl0ZW0uYXBwZW5kKHZhbHVlKQorICAgIHJldHVybiBmaWVsZHMKKworY2xhc3MgU2NhblZpZXdSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgc2VydmVyX3ZlcnNpb24gPSAiU2NhblZpZXdTZXJ2ZXIvIiArIF9fdmVyc2lvbl9fCisgICAgZHluYW1pY19tdGltZSA9IHRpbWUudGltZSgpCisKKyAgICBkZWYgZG9fSEVBRChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZG9fSEVBRChzZWxmKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9leGNlcHRpb24oZSkKKyAgICAgICAgICAgIAorICAgIGRlZiBkb19HRVQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmRvX0dFVChzZWxmKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9leGNlcHRpb24oZSkKKyAgICAgICAgICAgIAorICAgIGRlZiBkb19QT1NUKHNlbGYpOgorICAgICAgICAiIiJTZXJ2ZSBhIFBPU1QgcmVxdWVzdC4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5oZWFkZXJzLmdldGhlYWRlcignY29udGVudC1sZW5ndGgnKSBvciAiMCIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBpbnQobGVuZ3RoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGxlbmd0aCA9IDAKKyAgICAgICAgICAgIGNvbnRlbnQgPSBzZWxmLnJmaWxlLnJlYWQobGVuZ3RoKQorICAgICAgICAgICAgZmllbGRzID0gcGFyc2VfcXVlcnkoY29udGVudCkKKyAgICAgICAgICAgIGYgPSBzZWxmLnNlbmRfaGVhZChmaWVsZHMpCisgICAgICAgICAgICBpZiBmOgorICAgICAgICAgICAgICAgIHNlbGYuY29weWZpbGUoZiwgc2VsZi53ZmlsZSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXhjZXB0aW9uKGUpICAgICAgICAgICAgCisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgIGlmIHNlbGYuc2VydmVyLm9wdGlvbnMuZGVidWc6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlczogU0VSVkVSOiAlcyAtIC0gWyVzXSAlc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXMuYXJndlswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkcmVzc19zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nX2RhdGVfdGltZV9zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCVhcmdzKSkKKworICAgIGRlZiBsb2FkX3JlcG9ydChzZWxmLCByZXBvcnQpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsICdyZXBvcnQtJXMuaHRtbCclcmVwb3J0KQorICAgICAgICBkYXRhID0gb3BlbihwYXRoKS5yZWFkKCkKKyAgICAgICAga2V5cyA9IHt9CisgICAgICAgIGZvciBpdGVtIGluIGtCdWdLZXlWYWx1ZVJFLmZpbmRpdGVyKGRhdGEpOgorICAgICAgICAgICAgayx2ID0gaXRlbS5ncm91cHMoKQorICAgICAgICAgICAga2V5c1trXSA9IHYKKyAgICAgICAgcmV0dXJuIGtleXMKKworICAgIGRlZiBsb2FkX2NyYXNoZXMoc2VsZik6CisgICAgICAgIHBhdGggPSBwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LCAnaW5kZXguaHRtbCcpCisgICAgICAgIGRhdGEgPSBvcGVuKHBhdGgpLnJlYWQoKQorICAgICAgICBwcm9ibGVtcyA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIGtSZXBvcnRDcmFzaEVudHJ5UkUuZmluZGl0ZXIoZGF0YSk6CisgICAgICAgICAgICBmaWVsZERhdGEgPSBpdGVtLmdyb3VwKDEpCisgICAgICAgICAgICBmaWVsZHMgPSBkaWN0KFtpLmdyb3VwcygpIGZvciBpIGluIAorICAgICAgICAgICAgICAgICAgICAgICAgICAga1JlcG9ydENyYXNoRW50cnlLZXlWYWx1ZVJFLmZpbmRpdGVyKGZpZWxkRGF0YSldKQorICAgICAgICAgICAgcHJvYmxlbXMuYXBwZW5kKGZpZWxkcykKKyAgICAgICAgcmV0dXJuIHByb2JsZW1zCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBleGMpOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHByaW50ID4+cywgIklOVEVSTkFMIEVSUk9SXG4iCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZXhjLCBzKQorICAgICAgICBmID0gc2VsZi5zZW5kX3N0cmluZyhzLmdldHZhbHVlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgaWYgZjoKKyAgICAgICAgICAgIHNlbGYuY29weWZpbGUoZiwgc2VsZi53ZmlsZSkKKyAgICAgICAgICAgIGYuY2xvc2UoKSAgICAgICAgCisgICAgICAgICAgICAKKyAgICBkZWYgZ2V0X3NjYWxhcl9maWVsZChzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZSBpbiBzZWxmLmZpZWxkczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpZWxkc1tuYW1lXVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzdWJtaXRfYnVnKHNlbGYsIGMpOgorICAgICAgICB0aXRsZSA9IHNlbGYuZ2V0X3NjYWxhcl9maWVsZCgndGl0bGUnKQorICAgICAgICBkZXNjcmlwdGlvbiA9IHNlbGYuZ2V0X3NjYWxhcl9maWVsZCgnZGVzY3JpcHRpb24nKQorICAgICAgICByZXBvcnQgPSBzZWxmLmdldF9zY2FsYXJfZmllbGQoJ3JlcG9ydCcpCisgICAgICAgIHJlcG9ydGVySW5kZXggPSBzZWxmLmdldF9zY2FsYXJfZmllbGQoJ3JlcG9ydGVyJykKKyAgICAgICAgZmlsZXMgPSBbXQorICAgICAgICBmb3IgZmlsZUlEIGluIHNlbGYuZmllbGRzLmdldCgnZmlsZXMnLFtdKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpID0gaW50KGZpbGVJRCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBpID0gTm9uZQorICAgICAgICAgICAgaWYgaSBpcyBOb25lIG9yIGk8MCBvciBpPj1sZW4oYy5maWxlcyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgJ0ludmFsaWQgZmlsZSBJRCcpCisgICAgICAgICAgICBmaWxlcy5hcHBlbmQoYy5maWxlc1tpXSkKKyAgICAgICAgCisgICAgICAgIGlmIG5vdCB0aXRsZToKKyAgICAgICAgICAgIHJldHVybiAoRmFsc2UsICJNaXNzaW5nIHRpdGxlLiIpCisgICAgICAgIGlmIG5vdCBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAoRmFsc2UsICJNaXNzaW5nIGRlc2NyaXB0aW9uLiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcG9ydGVySW5kZXggPSBpbnQocmVwb3J0ZXJJbmRleCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgIkludmFsaWQgcmVwb3J0IG1ldGhvZC4iKQorICAgICAgICAKKyAgICAgICAgIyBHZXQgdGhlIHJlcG9ydGVyIGFuZCBwYXJhbWV0ZXJzLgorICAgICAgICByZXBvcnRlciA9IHNlbGYuc2VydmVyLnJlcG9ydGVyc1tyZXBvcnRlckluZGV4XQorICAgICAgICBwYXJhbWV0ZXJzID0ge30KKyAgICAgICAgZm9yIG8gaW4gcmVwb3J0ZXIuZ2V0UGFyYW1ldGVycygpOgorICAgICAgICAgICAgbmFtZSA9ICclc18lcyclKHJlcG9ydGVyLmdldE5hbWUoKSxvLmdldE5hbWUoKSkKKyAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHNlbGYuZmllbGRzOgorICAgICAgICAgICAgICAgIHJldHVybiAoRmFsc2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgJ01pc3NpbmcgZmllbGQgIiVzIiBmb3IgJXMgcmVwb3J0IG1ldGhvZC4nJShuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5nZXROYW1lKCkpKQorICAgICAgICAgICAgcGFyYW1ldGVyc1tvLmdldE5hbWUoKV0gPSBzZWxmLmdldF9zY2FsYXJfZmllbGQobmFtZSkKKworICAgICAgICAjIFVwZGF0ZSBjb25maWcgZGVmYXVsdHMuCisgICAgICAgIGlmIHJlcG9ydCAhPSAnTm9uZSc6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5jb25maWcuc2V0KCdTY2FuVmlldycsICdyZXBvcnRlcicsIHJlcG9ydGVySW5kZXgpCisgICAgICAgICAgICBmb3IgbyBpbiByZXBvcnRlci5nZXRQYXJhbWV0ZXJzKCk6CisgICAgICAgICAgICAgIGlmIG8uc2F2ZUNvbmZpZ1ZhbHVlKCk6CisgICAgICAgICAgICAgICAgbmFtZSA9IG8uZ2V0TmFtZSgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuY29uZmlnLnNldChyZXBvcnRlci5nZXROYW1lKCksIG5hbWUsIHBhcmFtZXRlcnNbbmFtZV0pCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIHJlcG9ydC4KKyAgICAgICAgYnVnID0gUmVwb3J0ZXIuQnVnUmVwb3J0KHRpdGxlLCBkZXNjcmlwdGlvbiwgZmlsZXMpCisKKyAgICAgICAgIyBLaWNrIG9mZiBhIHJlcG9ydGluZyB0aHJlYWQuCisgICAgICAgIHQgPSBSZXBvcnRlclRocmVhZChidWcsIHJlcG9ydGVyLCBwYXJhbWV0ZXJzLCBzZWxmLnNlcnZlcikKKyAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgIyBXYWl0IGZvciB0aHJlYWQgdG8gZGllLi4uCisgICAgICAgIHdoaWxlIHQuaXNBbGl2ZSgpOgorICAgICAgICAgICAgdGltZS5zbGVlcCguMjUpCisgICAgICAgIHN1Ym1pdFN0YXR1cyA9IHQuc3RhdHVzCisKKyAgICAgICAgcmV0dXJuICh0LnN1Y2Nlc3MsIHQuc3RhdHVzKQorCisgICAgZGVmIHNlbmRfcmVwb3J0X3N1Ym1pdChzZWxmKToKKyAgICAgICAgcmVwb3J0ID0gc2VsZi5nZXRfc2NhbGFyX2ZpZWxkKCdyZXBvcnQnKQorICAgICAgICBjID0gc2VsZi5nZXRfcmVwb3J0X2NvbnRleHQocmVwb3J0KQorICAgICAgICBpZiBjLnJlcG9ydFNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgcmVwb3J0aW5nRm9yID0gIlJlcG9ydCBDcmFzaGVzID4gIgorICAgICAgICAgICAgZmlsZUJ1ZyA9ICIiIlwKKzxhIGhyZWY9Ii9yZXBvcnRfY3Jhc2hlcyI+RmlsZSBCdWc8L2E+ID4gIiIiJWxvY2FscygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXBvcnRpbmdGb3IgPSAnPGEgaHJlZj0iLyVzIj5SZXBvcnQgJXM8L2E+ID4gJyAlIChjLnJlcG9ydFNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KQorICAgICAgICAgICAgZmlsZUJ1ZyA9ICc8YSBocmVmPSIvcmVwb3J0LyVzIj5GaWxlIEJ1ZzwvYT4gPiAnICUgcmVwb3J0CisgICAgICAgIHRpdGxlID0gc2VsZi5nZXRfc2NhbGFyX2ZpZWxkKCd0aXRsZScpCisgICAgICAgIGRlc2NyaXB0aW9uID0gc2VsZi5nZXRfc2NhbGFyX2ZpZWxkKCdkZXNjcmlwdGlvbicpCisKKyAgICAgICAgcmVzLG1lc3NhZ2UgPSBzZWxmLnN1Ym1pdF9idWcoYykKKworICAgICAgICBpZiByZXM6CisgICAgICAgICAgICBzdGF0dXNDbGFzcyA9ICdTdWJtaXRPaycKKyAgICAgICAgICAgIHN0YXR1c05hbWUgPSAnU3VjY2VlZGVkJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVzQ2xhc3MgPSAnU3VibWl0RmFpbCcKKyAgICAgICAgICAgIHN0YXR1c05hbWUgPSAnRmFpbGVkJworCisgICAgICAgIHJlc3VsdCA9ICIiIgorPGhlYWQ+CisgIDx0aXRsZT5CdWcgU3VibWlzc2lvbjwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii9zY2Fudmlldy5jc3MiIC8+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMz4KKzxhIGhyZWY9Ii8iPlN1bW1hcnk8L2E+ID4gCislKHJlcG9ydGluZ0ZvcilzCislKGZpbGVCdWcpcworU3VibWl0PC9oMz4KKzxmb3JtIG5hbWU9ImZvcm0iIGFjdGlvbj0iIj4KKzx0YWJsZSBjbGFzcz0iZm9ybSI+Cis8dHI+PHRkPgorPHRhYmxlIGNsYXNzPSJmb3JtX2dyb3VwIj4KKzx0cj4KKyAgPHRkIGNsYXNzPSJmb3JtX2NsYWJlbCI+VGl0bGU6PC90ZD4KKyAgPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj4KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGl0bGUiIHNpemU9IjUwIiB2YWx1ZT0iJSh0aXRsZSlzIiBkaXNhYmxlZD4KKyAgPC90ZD4KKzwvdHI+Cis8dHI+CisgIDx0ZCBjbGFzcz0iZm9ybV9sYWJlbCI+RGVzY3JpcHRpb246PC90ZD4KKyAgPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj4KKzx0ZXh0YXJlYSByb3dzPSIxMCIgY29scz0iODAiIG5hbWU9ImRlc2NyaXB0aW9uIiBkaXNhYmxlZD4KKyUoZGVzY3JpcHRpb24pcworPC90ZXh0YXJlYT4KKyAgPC90ZD4KKzwvdGFibGU+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC9mb3JtPgorPGgxIGNsYXNzPSIlKHN0YXR1c0NsYXNzKXMiPlN1Ym1pc3Npb24gJShzdGF0dXNOYW1lKXM8L2gxPgorJShtZXNzYWdlKXMKKzxwPgorPGhyPgorPGEgaHJlZj0iLyI+UmV0dXJuIHRvIFN1bW1hcnk8L2E+Cis8L2JvZHk+Cis8L2h0bWw+IiIiJWxvY2FscygpCisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc3RyaW5nKHJlc3VsdCkKKworICAgIGRlZiBzZW5kX29wZW5fcmVwb3J0KHNlbGYsIHJlcG9ydCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleXMgPSBzZWxmLmxvYWRfcmVwb3J0KHJlcG9ydCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2Vycm9yKDQwMCwgJ0ludmFsaWQgcmVwb3J0LicpCisKKyAgICAgICAgZmlsZSA9IGtleXMuZ2V0KCdGSUxFJykKKyAgICAgICAgaWYgbm90IGZpbGUgb3Igbm90IHBvc2l4cGF0aC5leGlzdHMoZmlsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2Vycm9yKDQwMCwgJ0ZpbGUgZG9lcyBub3QgZXhpc3Q6ICIlcyInICUgZmlsZSkKKworICAgICAgICBpbXBvcnQgc3RhcnRmaWxlCisgICAgICAgIGlmIHNlbGYuc2VydmVyLm9wdGlvbnMuZGVidWc6CisgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICclczogU0VSVkVSOiBvcGVuaW5nICIlcyInJShzeXMuYXJndlswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUpCisKKyAgICAgICAgc3RhdHVzID0gc3RhcnRmaWxlLm9wZW4oZmlsZSkKKyAgICAgICAgaWYgc3RhdHVzOgorICAgICAgICAgICAgcmVzID0gJ09wZW5lZDogIiVzIicgJSBmaWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXMgPSAnT3BlbiBmYWlsZWQ6ICIlcyInICUgZmlsZQorCisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc3RyaW5nKHJlcywgJ3RleHQvcGxhaW4nKQorCisgICAgZGVmIGdldF9yZXBvcnRfY29udGV4dChzZWxmLCByZXBvcnQpOgorICAgICAgICBjbGFzcyBDb250ZXh0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiByZXBvcnQgaXMgTm9uZSBvciByZXBvcnQgPT0gJ05vbmUnOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYubG9hZF9jcmFzaGVzKCkKKyAgICAgICAgICAgICMgRG9uJ3QgYWxsb3cgZW1wdHkgcmVwb3J0cy4KKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICdObyBjcmFzaGVzIGRldGVjdGVkIScKKyAgICAgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgICAgIGMudGl0bGUgPSAnY2xhbmcgc3RhdGljIGFuYWx5emVyIGZhaWx1cmVzJworCisgICAgICAgICAgICBzdGRlcnJTdW1tYXJ5ID0gIiIKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGRhdGE6CisgICAgICAgICAgICAgICAgaWYgJ3N0ZGVycicgaW4gaXRlbToKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBvc2l4cGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsIGl0ZW1bJ3N0ZGVyciddKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxucyA9IGl0ZXJ0b29scy5pc2xpY2Uob3BlbihwYXRoKSwgMCwgMTApCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnJTdW1tYXJ5ICs9ICclc1xuLS1cbiVzJyAlIChpdGVtLmdldCgnc3JjJywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHVua25vd24+JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKGxucykpCisKKyAgICAgICAgICAgIGMuZGVzY3JpcHRpb24gPSAiIiJcCitUaGUgY2xhbmcgc3RhdGljIGFuYWx5emVyIGZhaWxlZCBvbiB0aGVzZSBpbnB1dHM6CislcworCitTVERFUlIgU3VtbWFyeQorLS0tLS0tLS0tLS0tLS0KKyVzCisiIiIgJSAoJ1xuJy5qb2luKFtpdGVtLmdldCgnc3JjJywnPHVua25vd24+JykgZm9yIGl0ZW0gaW4gZGF0YV0pLAorICAgICAgIHN0ZGVyclN1bW1hcnkpCisgICAgICAgICAgICBjLnJlcG9ydFNvdXJjZSA9IE5vbmUKKyAgICAgICAgICAgIGMubmF2TWFya3VwID0gIlJlcG9ydCBDcmFzaGVzID4gIgorICAgICAgICAgICAgYy5maWxlcyA9IFtdCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBkYXRhOiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjLmZpbGVzLmFwcGVuZChpdGVtLmdldCgnc3JjJywnJykpCisgICAgICAgICAgICAgICAgYy5maWxlcy5hcHBlbmQocG9zaXhwYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmdldCgnZmlsZScsJycpKSkKKyAgICAgICAgICAgICAgICBjLmZpbGVzLmFwcGVuZChwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0KCdjbGFuZ2ZpbGUnLCcnKSkpCisgICAgICAgICAgICAgICAgYy5maWxlcy5hcHBlbmQocG9zaXhwYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmdldCgnc3RkZXJyJywnJykpKQorICAgICAgICAgICAgICAgIGMuZmlsZXMuYXBwZW5kKHBvc2l4cGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5nZXQoJ2luZm8nLCcnKSkpCisgICAgICAgICAgICAjIEp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZmFpbGVkLCBpZ25vcmUgZmlsZXMgd2hpY2ggZG9uJ3QKKyAgICAgICAgICAgICMgZXhpc3QuCisgICAgICAgICAgICBjLmZpbGVzID0gW2YgZm9yIGYgaW4gYy5maWxlcworICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmKSBhbmQgb3MucGF0aC5pc2ZpbGUoZildCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhpcyBpcyBhIHZhbGlkIHJlcG9ydC4gICAgICAgICAgICAKKyAgICAgICAgICAgIHBhdGggPSBwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LCAncmVwb3J0LSVzLmh0bWwnICUgcmVwb3J0KQorICAgICAgICAgICAgaWYgbm90IHBvc2l4cGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgJ0ludmFsaWQgcmVwb3J0IElEJworICAgICAgICAgICAga2V5cyA9IHNlbGYubG9hZF9yZXBvcnQocmVwb3J0KQorICAgICAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICAgICAgYy50aXRsZSA9IGtleXMuZ2V0KCdERVNDJywnY2xhbmcgZXJyb3IgKHVucmVjb2duaXplZCcpCisgICAgICAgICAgICBjLmRlc2NyaXB0aW9uID0gIiIiXAorQnVnIHJlcG9ydGVkIGJ5IHRoZSBjbGFuZyBzdGF0aWMgYW5hbHl6ZXIuCisKK0Rlc2NyaXB0aW9uOiAlcworRmlsZTogJXMKK0xpbmU6ICVzCisiIiIlKGMudGl0bGUsIGtleXMuZ2V0KCdGSUxFJywnPHVua25vd24+JyksIGtleXMuZ2V0KCdMSU5FJywgJzx1bmtub3duPicpKQorICAgICAgICAgICAgYy5yZXBvcnRTb3VyY2UgPSAncmVwb3J0LSVzLmh0bWwnICUgcmVwb3J0CisgICAgICAgICAgICBjLm5hdk1hcmt1cCA9ICIiIjxhIGhyZWY9Ii8lcyI+UmVwb3J0ICVzPC9hPiA+ICIiIiAlIChjLnJlcG9ydFNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydCkKKworICAgICAgICAgICAgYy5maWxlcyA9IFtwYXRoXQorICAgICAgICByZXR1cm4gYworCisgICAgZGVmIHNlbmRfcmVwb3J0KHNlbGYsIHJlcG9ydCwgY29uZmlnT3ZlcnJpZGVzPU5vbmUpOgorICAgICAgICBkZWYgZ2V0Q29uZmlnT3B0aW9uKHNlY3Rpb24sIGZpZWxkKTogICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjb25maWdPdmVycmlkZXMgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiBjb25maWdPdmVycmlkZXMgYW5kCisgICAgICAgICAgICAgICAgZmllbGQgaW4gY29uZmlnT3ZlcnJpZGVzW3NlY3Rpb25dKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnT3ZlcnJpZGVzW3NlY3Rpb25dW2ZpZWxkXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VydmVyLmNvbmZpZy5nZXQoc2VjdGlvbiwgZmllbGQpCisKKyAgICAgICAgIyByZXBvcnQgaXMgTm9uZSBpcyB1c2VkIGZvciBjcmFzaGVzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGMgPSBzZWxmLmdldF9yZXBvcnRfY29udGV4dChyZXBvcnQpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lcnJvcig0MDAsIGUubWVzc2FnZSkKKworICAgICAgICB0aXRsZSA9IGMudGl0bGUKKyAgICAgICAgZGVzY3JpcHRpb249IGMuZGVzY3JpcHRpb24KKyAgICAgICAgcmVwb3J0aW5nRm9yID0gYy5uYXZNYXJrdXAKKyAgICAgICAgaWYgYy5yZXBvcnRTb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIGV4dHJhSUZyYW1lID0gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4dHJhSUZyYW1lID0gIiIiXAorPGlmcmFtZSBzcmM9Ii8lcyIgd2lkdGg9IjEwMCUlIiBoZWlnaHQ9IjQwJSUiCisgICAgICAgIHNjcm9sbGluZz0iYXV0byIgZnJhbWVib3JkZXI9IjEiPgorICA8YSBocmVmPSIvJXMiPlZpZXcgQnVnIFJlcG9ydDwvYT4KKzwvaWZyYW1lPiIiIiAlIChjLnJlcG9ydFNvdXJjZSwgYy5yZXBvcnRTb3VyY2UpCisKKyAgICAgICAgcmVwb3J0ZXJTZWxlY3Rpb25zID0gW10KKyAgICAgICAgcmVwb3J0ZXJPcHRpb25zID0gW10KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBhY3RpdmUgPSBpbnQoZ2V0Q29uZmlnT3B0aW9uKCdTY2FuVmlldycsJ3JlcG9ydGVyJykpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGFjdGl2ZSA9IDAKKyAgICAgICAgZm9yIGksciBpbiBlbnVtZXJhdGUoc2VsZi5zZXJ2ZXIucmVwb3J0ZXJzKToKKyAgICAgICAgICAgIHNlbGVjdGVkID0gKGkgPT0gYWN0aXZlKQorICAgICAgICAgICAgaWYgc2VsZWN0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRTdHIgPSAnIHNlbGVjdGVkJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxlY3RlZFN0ciA9ICcnCisgICAgICAgICAgICByZXBvcnRlclNlbGVjdGlvbnMuYXBwZW5kKCc8b3B0aW9uIHZhbHVlPSIlZCIlcz4lczwvb3B0aW9uPiclKGksc2VsZWN0ZWRTdHIsci5nZXROYW1lKCkpKQorICAgICAgICAgICAgb3B0aW9ucyA9ICdcbicuam9pbihbIG8uZ2V0SFRNTChyLHRpdGxlLGdldENvbmZpZ09wdGlvbikgZm9yIG8gaW4gci5nZXRQYXJhbWV0ZXJzKCldKQorICAgICAgICAgICAgZGlzcGxheSA9ICgnbm9uZScsJycpW3NlbGVjdGVkXQorICAgICAgICAgICAgcmVwb3J0ZXJPcHRpb25zLmFwcGVuZCgiIiJcCis8dHIgaWQ9IiVzUmVwb3J0ZXJPcHRpb25zIiBzdHlsZT0iZGlzcGxheTolcyI+CisgIDx0ZCBjbGFzcz0iZm9ybV9sYWJlbCI+JXMgT3B0aW9uczwvdGQ+CisgIDx0ZCBjbGFzcz0iZm9ybV92YWx1ZSI+CisgICAgPHRhYmxlIGNsYXNzPSJmb3JtX2lubmVyX2dyb3VwIj4KKyVzCisgICAgPC90YWJsZT4KKyAgPC90ZD4KKzwvdHI+CisiIiIlKHIuZ2V0TmFtZSgpLGRpc3BsYXksci5nZXROYW1lKCksb3B0aW9ucykpCisgICAgICAgIHJlcG9ydGVyU2VsZWN0aW9ucyA9ICdcbicuam9pbihyZXBvcnRlclNlbGVjdGlvbnMpCisgICAgICAgIHJlcG9ydGVyT3B0aW9uc0RpdnMgPSAnXG4nLmpvaW4ocmVwb3J0ZXJPcHRpb25zKQorICAgICAgICByZXBvcnRlcnNBcnJheSA9ICdbJXNdJyUoJywnLmpvaW4oW2ByLmdldE5hbWUoKWAgZm9yIHIgaW4gc2VsZi5zZXJ2ZXIucmVwb3J0ZXJzXSkpCisKKyAgICAgICAgaWYgYy5maWxlczoKKyAgICAgICAgICAgIGZpZWxkU2l6ZSA9IG1pbig1LCBsZW4oYy5maWxlcykpCisgICAgICAgICAgICBhdHRhY2hGaWxlT3B0aW9ucyA9ICdcbicuam9pbihbIiIiXAorPG9wdGlvbiB2YWx1ZT0iJWQiIHNlbGVjdGVkPiVzPC9vcHRpb24+IiIiICUgKGksdikgZm9yIGksdiBpbiBlbnVtZXJhdGUoYy5maWxlcyldKQorICAgICAgICAgICAgYXR0YWNoRmlsZVJvdyA9ICIiIlwKKzx0cj4KKyAgPHRkIGNsYXNzPSJmb3JtX2xhYmVsIj5BdHRhY2g6PC90ZD4KKyAgPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj4KKzxzZWxlY3Qgc3R5bGU9IndpZHRoOjEwMCUlIiBuYW1lPSJmaWxlcyIgbXVsdGlwbGUgc2l6ZT0lZD4KKyVzCis8L3NlbGVjdD4KKyAgPC90ZD4KKzwvdHI+CisiIiIgJSAobWluKDUsIGxlbihjLmZpbGVzKSksIGF0dGFjaEZpbGVPcHRpb25zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXR0YWNoRmlsZVJvdyA9ICIiCisKKyAgICAgICAgcmVzdWx0ID0gIiIiPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkZpbGUgQnVnPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3NjYW52aWV3LmNzcyIgLz4KKzwvaGVhZD4KKzxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgcmVwb3J0ZXJzID0gJShyZXBvcnRlcnNBcnJheSlzOworZnVuY3Rpb24gdXBkYXRlUmVwb3J0ZXJPcHRpb25zKCkgeworICBpbmRleCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXBvcnRlcicpLnNlbGVjdGVkSW5kZXg7CisgIGZvciAodmFyIGk9MDsgaSA8IHJlcG9ydGVycy5sZW5ndGg7ICsraSkgeworICAgIG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyZXBvcnRlcnNbaV0gKyAiUmVwb3J0ZXJPcHRpb25zIik7CisgICAgaWYgKGkgPT0gaW5kZXgpIHsKKyAgICAgIG8uc3R5bGUuZGlzcGxheSA9ICIiOworICAgIH0gZWxzZSB7CisgICAgICBvLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgfQorICB9Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0idXBkYXRlUmVwb3J0ZXJPcHRpb25zKCkiPgorPGgzPgorPGEgaHJlZj0iLyI+U3VtbWFyeTwvYT4gPiAKKyUocmVwb3J0aW5nRm9yKXMKK0ZpbGUgQnVnPC9oMz4KKzxmb3JtIG5hbWU9ImZvcm0iIGFjdGlvbj0iL3JlcG9ydF9zdWJtaXQiIG1ldGhvZD0icG9zdCI+Cis8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJyZXBvcnQiIHZhbHVlPSIlKHJlcG9ydClzIj4KKworPHRhYmxlIGNsYXNzPSJmb3JtIj4KKzx0cj48dGQ+Cis8dGFibGUgY2xhc3M9ImZvcm1fZ3JvdXAiPgorPHRyPgorICA8dGQgY2xhc3M9ImZvcm1fY2xhYmVsIj5UaXRsZTo8L3RkPgorICA8dGQgY2xhc3M9ImZvcm1fdmFsdWUiPgorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgc2l6ZT0iNTAiIHZhbHVlPSIlKHRpdGxlKXMiPgorICA8L3RkPgorPC90cj4KKzx0cj4KKyAgPHRkIGNsYXNzPSJmb3JtX2xhYmVsIj5EZXNjcmlwdGlvbjo8L3RkPgorICA8dGQgY2xhc3M9ImZvcm1fdmFsdWUiPgorPHRleHRhcmVhIHJvd3M9IjEwIiBjb2xzPSI4MCIgbmFtZT0iZGVzY3JpcHRpb24iPgorJShkZXNjcmlwdGlvbilzCis8L3RleHRhcmVhPgorICA8L3RkPgorPC90cj4KKworJShhdHRhY2hGaWxlUm93KXMKKworPC90YWJsZT4KKzxicj4KKzx0YWJsZSBjbGFzcz0iZm9ybV9ncm91cCI+Cis8dHI+CisgIDx0ZCBjbGFzcz0iZm9ybV9jbGFiZWwiPk1ldGhvZDo8L3RkPgorICA8dGQgY2xhc3M9ImZvcm1fdmFsdWUiPgorICAgIDxzZWxlY3QgaWQ9InJlcG9ydGVyIiBuYW1lPSJyZXBvcnRlciIgb25DaGFuZ2U9InVwZGF0ZVJlcG9ydGVyT3B0aW9ucygpIj4KKyAgICAlKHJlcG9ydGVyU2VsZWN0aW9ucylzCisgICAgPC9zZWxlY3Q+CisgIDwvdGQ+Cis8L3RyPgorJShyZXBvcnRlck9wdGlvbnNEaXZzKXMKKzwvdGFibGU+Cis8YnI+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmb3JtX3N1Ym1pdCI+CisgIDxpbnB1dCBhbGlnbj0icmlnaHQiIHR5cGU9InN1Ym1pdCIgbmFtZT0iU3VibWl0IiB2YWx1ZT0iU3VibWl0Ij4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L2Zvcm0+CisKKyUoZXh0cmFJRnJhbWUpcworCis8L2JvZHk+Cis8L2h0bWw+IiIiJWxvY2FscygpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zdHJpbmcocmVzdWx0KQorCisgICAgZGVmIHNlbmRfaGVhZChzZWxmLCBmaWVsZHM9Tm9uZSk6CisgICAgICAgIGlmIChzZWxmLnNlcnZlci5vcHRpb25zLm9ubHlTZXJ2ZUxvY2FsIGFuZAorICAgICAgICAgICAgc2VsZi5jbGllbnRfYWRkcmVzc1swXSAhPSAnMTI3LjAuMC4xJyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2Vycm9yKDQwMSwgJ1VuYXV0aG9yaXplZCBob3N0LicpCisKKyAgICAgICAgaWYgZmllbGRzIGlzIE5vbmU6CisgICAgICAgICAgICBmaWVsZHMgPSB7fQorICAgICAgICBzZWxmLmZpZWxkcyA9IGZpZWxkcworCisgICAgICAgIG8gPSB1cmxwYXJzZS51cmxwYXJzZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuZmllbGRzID0gcGFyc2VfcXVlcnkoby5xdWVyeSwgZmllbGRzKQorICAgICAgICBwYXRoID0gcG9zaXhwYXRoLm5vcm1wYXRoKHVybGxpYi51bnF1b3RlKG8ucGF0aCkpCisKKyAgICAgICAgIyBTcGxpdCB0aGUgY29tcG9uZW50cyBhbmQgc3RyaXAgdGhlIHJvb3QgcHJlZml4LgorICAgICAgICBjb21wb25lbnRzID0gcGF0aC5zcGxpdCgnLycpWzE6XQorICAgICAgICAKKyAgICAgICAgIyBTcGVjaWFsIGNhc2Ugc29tZSB0b3AtbGV2ZWwgZW50cmllcy4KKyAgICAgICAgaWYgY29tcG9uZW50czoKKyAgICAgICAgICAgIG5hbWUgPSBjb21wb25lbnRzWzBdCisgICAgICAgICAgICBpZiBsZW4oY29tcG9uZW50cyk9PTI6CisgICAgICAgICAgICAgICAgaWYgbmFtZT09J3JlcG9ydCc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfcmVwb3J0KGNvbXBvbmVudHNbMV0pCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lPT0nb3Blbic6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfb3Blbl9yZXBvcnQoY29tcG9uZW50c1sxXSkKKyAgICAgICAgICAgIGVsaWYgbGVuKGNvbXBvbmVudHMpPT0xOgorICAgICAgICAgICAgICAgIGlmIG5hbWU9PSdxdWl0JzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFsdCgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc3RyaW5nKCdHb29kYnllLicsICd0ZXh0L3BsYWluJykKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWU9PSdyZXBvcnRfc3VibWl0JzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9yZXBvcnRfc3VibWl0KCkKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWU9PSdyZXBvcnRfY3Jhc2hlcyc6CisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcyA9IHsgJ1NjYW5WaWV3JyA6IHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSYWRhcicgOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRW1haWwnIDoge30gfQorICAgICAgICAgICAgICAgICAgICBmb3IgaSxyIGluIGVudW1lcmF0ZShzZWxmLnNlcnZlci5yZXBvcnRlcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgci5nZXROYW1lKCkgPT0gJ1JhZGFyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXNbJ1NjYW5WaWV3J11bJ3JlcG9ydGVyJ10gPSBpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzWydSYWRhciddWydDb21wb25lbnQnXSA9ICdsbHZtIC0gY2hlY2tlcicKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzWydSYWRhciddWydDb21wb25lbnQgVmVyc2lvbiddID0gJ1gnCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfcmVwb3J0KE5vbmUsIG92ZXJyaWRlcykKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWU9PSdmYXZpY29uLmljbyc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfcGF0aChwb3NpeHBhdGguam9pbihrU2hhcmUsJ2J1Z2NhdGNoZXIuaWNvJykpCisgICAgICAgIAorICAgICAgICAjIE1hdGNoIGRpcmVjdG9yeSBlbnRyaWVzLgorICAgICAgICBpZiBjb21wb25lbnRzWy0xXSA9PSAnJzoKKyAgICAgICAgICAgIGNvbXBvbmVudHNbLTFdID0gJ2luZGV4Lmh0bWwnCisKKyAgICAgICAgcmVscGF0aCA9ICcvJy5qb2luKGNvbXBvbmVudHMpCisgICAgICAgIHBhdGggPSBwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LCByZWxwYXRoKQorCisgICAgICAgIGlmIHNlbGYuc2VydmVyLm9wdGlvbnMuZGVidWcgPiAxOgorICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAnJXM6IFNFUlZFUjogc2VuZGluZyBwYXRoICIlcyInJShzeXMuYXJndlswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9wYXRoKHBhdGgpCisKKyAgICBkZWYgc2VuZF80MDQoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICJGaWxlIG5vdCBmb3VuZCIpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2VuZF9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICAjIElmIHRoZSByZXF1ZXN0ZWQgcGF0aCBpcyBvdXRzaWRlIHRoZSByb290IGRpcmVjdG9yeSwgZG8gbm90IG9wZW4gaXQKKyAgICAgICAgcmVsID0gb3MucGF0aC5hYnNwYXRoKHBhdGgpCisgICAgICAgIGlmIG5vdCByZWwuc3RhcnRzd2l0aChvcy5wYXRoLmFic3BhdGgoc2VsZi5zZXJ2ZXIucm9vdCkpOgorICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfNDA0KCkKKyAgICAgICAgCisgICAgICAgIGN0eXBlID0gc2VsZi5ndWVzc190eXBlKHBhdGgpCisgICAgICAgIGlmIGN0eXBlLnN0YXJ0c3dpdGgoJ3RleHQvJyk6CisgICAgICAgICAgICAjIFBhdGNoIGZpbGUgaW5zdGVhZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9wYXRjaGVkX2ZpbGUocGF0aCwgY3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2RlID0gJ3JiJworICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihwYXRoLCBtb2RlKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfNDA0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9maWxlKGYsIGN0eXBlKQorCisgICAgZGVmIHNlbmRfZmlsZShzZWxmLCBmLCBjdHlwZSk6CisgICAgICAgICMgUGF0Y2ggZmlsZXMgdG8gYWRkIGxpbmtzLCBidXQgc2tpcCBiaW5hcnkgZmlsZXMuCisgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsIGN0eXBlKQorICAgICAgICBmcyA9IG9zLmZzdGF0KGYuZmlsZW5vKCkpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIiwgc3RyKGZzWzZdKSkKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiTGFzdC1Nb2RpZmllZCIsIHNlbGYuZGF0ZV90aW1lX3N0cmluZyhmcy5zdF9tdGltZSkpCisgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorICAgICAgICByZXR1cm4gZgorCisgICAgZGVmIHNlbmRfc3RyaW5nKHNlbGYsIHMsIGN0eXBlPSd0ZXh0L2h0bWwnLCBoZWFkZXJzPVRydWUsIG10aW1lPU5vbmUpOgorICAgICAgICBpZiBoZWFkZXJzOgorICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsIGN0eXBlKQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1MZW5ndGgiLCBzdHIobGVuKHMpKSkKKyAgICAgICAgICAgIGlmIG10aW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbXRpbWUgPSBzZWxmLmR5bmFtaWNfbXRpbWUKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkxhc3QtTW9kaWZpZWQiLCBzZWxmLmRhdGVfdGltZV9zdHJpbmcobXRpbWUpKQorICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgIHJldHVybiBTdHJpbmdJTy5TdHJpbmdJTyhzKQorCisgICAgZGVmIHNlbmRfcGF0Y2hlZF9maWxlKHNlbGYsIHBhdGgsIGN0eXBlKToKKyAgICAgICAgIyBBbGxvdyBhIHZlcnkgbGltaXRlZCBzZXQgb2YgdmFyaWFibGVzLiBUaGlzIGlzIHByZXR0eSBncm9zcy4KKyAgICAgICAgdmFyaWFibGVzID0ge30KKyAgICAgICAgdmFyaWFibGVzWydyZXBvcnQnXSA9ICcnCisgICAgICAgIG0gPSBrUmVwb3J0RmlsZVJFLm1hdGNoKHBhdGgpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICB2YXJpYWJsZXNbJ3JlcG9ydCddID0gbS5ncm91cCgyKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsJ3InKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfNDA0KCkKKyAgICAgICAgZnMgPSBvcy5mc3RhdChmLmZpbGVubygpKQorICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgZm9yIGEsYiBpbiBrUmVwb3J0UmVwbGFjZW1lbnRzOgorICAgICAgICAgICAgZGF0YSA9IGEuc3ViKGIgJSB2YXJpYWJsZXMsIGRhdGEpCisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc3RyaW5nKGRhdGEsIGN0eXBlLCBtdGltZT1mcy5zdF9tdGltZSkKKworCitkZWYgY3JlYXRlX3NlcnZlcihhZGRyZXNzLCBvcHRpb25zLCByb290KToKKyAgICBpbXBvcnQgUmVwb3J0ZXIKKworICAgIHJlcG9ydGVycyA9IFJlcG9ydGVyLmdldFJlcG9ydGVycygpCisKKyAgICByZXR1cm4gU2NhblZpZXdTZXJ2ZXIoYWRkcmVzcywgU2NhblZpZXdSZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLXZpZXcvc2hhcmUvYnVnY2F0Y2hlci5pY28gYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9idWdjYXRjaGVyLmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQzOWI1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLXZpZXcvc2hhcmUvYnVnY2F0Y2hlci5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLXZpZXcvc2hhcmUvc3RhcnRmaWxlLnB5IGIvY2xhbmctMzM2MjQzNy90b29scy9zY2FuLXZpZXcvc2hhcmUvc3RhcnRmaWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZmJlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zMzYyNDM3L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9zdGFydGZpbGUucHkKQEAgLTAsMCArMSwyMDMgQEAKKyIiIlV0aWxpdHkgZm9yIG9wZW5pbmcgYSBmaWxlIHVzaW5nIHRoZSBkZWZhdWx0IGFwcGxpY2F0aW9uIGluIGEgY3Jvc3MtcGxhdGZvcm0KK21hbm5lci4gTW9kaWZpZWQgZnJvbSBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81MTE0NDMvLgorIiIiCisKK19fdmVyc2lvbl9fID0gJzEuMXgnCitfX2FsbF9fID0gWydvcGVuJ10KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgd2ViYnJvd3NlcgoraW1wb3J0IHN1YnByb2Nlc3MKKworX2NvbnRyb2xsZXJzID0ge30KK19vcGVuID0gTm9uZQorCisKK2NsYXNzIEJhc2VDb250cm9sbGVyKG9iamVjdCk6CisgICAgJycnQmFzZSBjbGFzcyBmb3Igb3BlbiBwcm9ncmFtIGNvbnRyb2xsZXJzLicnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBkZWYgb3BlbihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBDb250cm9sbGVyKEJhc2VDb250cm9sbGVyKToKKyAgICAnJydDb250cm9sbGVyIGZvciBhIGdlbmVyaWMgb3BlbiBwcm9ncmFtLicnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc3VwZXIoQ29udHJvbGxlciwgc2VsZikuX19pbml0X18ob3MucGF0aC5iYXNlbmFtZShhcmdzWzBdKSkKKyAgICAgICAgc2VsZi5hcmdzID0gbGlzdChhcmdzKQorCisgICAgZGVmIF9pbnZva2Uoc2VsZiwgY21kbGluZSk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6CisgICAgICAgICAgICBjbG9zZWZkcyA9IEZhbHNlCisgICAgICAgICAgICBzdGFydHVwaW5mbyA9IHN1YnByb2Nlc3MuU1RBUlRVUElORk8oKQorICAgICAgICAgICAgc3RhcnR1cGluZm8uZHdGbGFncyB8PSBzdWJwcm9jZXNzLlNUQVJURl9VU0VTSE9XV0lORE9XCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbG9zZWZkcyA9IFRydWUKKyAgICAgICAgICAgIHN0YXJ0dXBpbmZvID0gTm9uZQorCisgICAgICAgIGlmIChvcy5lbnZpcm9uLmdldCgnRElTUExBWScpIG9yIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicpOgorICAgICAgICAgICAgaW5vdXQgPSBmaWxlKG9zLmRldm51bGwsICdyKycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGZvciBUVFkgcHJvZ3JhbXMsIHdlIG5lZWQgc3RkaW4vb3V0CisgICAgICAgICAgICBpbm91dCA9IE5vbmUKKworICAgICAgICAjIGlmIHBvc3NpYmxlLCBwdXQgdGhlIGNoaWxkIHByZWNlc3MgaW4gc2VwYXJhdGUgcHJvY2VzcyBncm91cCwKKyAgICAgICAgIyBzbyBrZXlib2FyZCBpbnRlcnJ1cHRzIGRvbid0IGFmZmVjdCBjaGlsZCBwcmVjZXNzIGFzIHdlbGwgYXMKKyAgICAgICAgIyBQeXRob24KKyAgICAgICAgc2V0c2lkID0gZ2V0YXR0cihvcywgJ3NldHNpZCcsIE5vbmUpCisgICAgICAgIGlmIG5vdCBzZXRzaWQ6CisgICAgICAgICAgICBzZXRzaWQgPSBnZXRhdHRyKG9zLCAnc2V0cGdycCcsIE5vbmUpCisKKyAgICAgICAgcGlwZSA9IHN1YnByb2Nlc3MuUG9wZW4oY21kbGluZSwgc3RkaW49aW5vdXQsIHN0ZG91dD1pbm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPWlub3V0LCBjbG9zZV9mZHM9Y2xvc2VmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49c2V0c2lkLCBzdGFydHVwaW5mbz1zdGFydHVwaW5mbykKKworICAgICAgICAjIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGtpbmQgb2YgdG9vbHMgKGdub21lLW9wZW4sIGtmbWNsaWVudCwKKyAgICAgICAgIyBleG8tb3BlbiwgeGRnLW9wZW4gYW5kIG9wZW4gZm9yIE9TWCkgaW1tZWRpYXRlbHkgZXhpdCBhZnRlciBsYXVjaGluZworICAgICAgICAjIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbgorICAgICAgICByZXR1cm5jb2RlID0gcGlwZS53YWl0KCkKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnZml4cmV0dXJuY29kZScpOgorICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuZml4cmV0dXJuY29kZShyZXR1cm5jb2RlKQorICAgICAgICByZXR1cm4gbm90IHJldHVybmNvZGUKKworICAgIGRlZiBvcGVuKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBjbWRsaW5lID0gc2VsZi5hcmdzICsgW2ZpbGVuYW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBhc3N1bWUgaXQgaXMgYSBzZXF1ZW5jZQorICAgICAgICAgICAgY21kbGluZSA9IHNlbGYuYXJncyArIGZpbGVuYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnZva2UoY21kbGluZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworCisjIFBsYXRmb3JtIHN1cHBvcnQgZm9yIFdpbmRvd3MKK2lmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6CisKKyAgICBjbGFzcyBTdGFydChCYXNlQ29udHJvbGxlcik6CisgICAgICAgICcnJ0NvbnRyb2xsZXIgZm9yIHRoZSB3aW4zMiBzdGFydCBwcm9nYW0gdGhyb3VnaCBvcy5zdGFydGZpbGUuJycnCisKKyAgICAgICAgZGVmIG9wZW4oc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAgICAgIyBbRXJyb3IgMjJdIE5vIGFwcGxpY2F0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgIyBmaWxlIGZvciB0aGlzIG9wZXJhdGlvbjogJzxVUkw+JworICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgX2NvbnRyb2xsZXJzWyd3aW5kb3dzLWRlZmF1bHQnXSA9IFN0YXJ0KCdzdGFydCcpCisgICAgX29wZW4gPSBfY29udHJvbGxlcnNbJ3dpbmRvd3MtZGVmYXVsdCddLm9wZW4KKworCisjIFBsYXRmb3JtIHN1cHBvcnQgZm9yIE1hY09TCitlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICBfY29udHJvbGxlcnNbJ29wZW4nXT0gQ29udHJvbGxlcignb3BlbicpCisgICAgX29wZW4gPSBfY29udHJvbGxlcnNbJ29wZW4nXS5vcGVuCisKKworIyBQbGF0Zm9ybSBzdXBwb3J0IGZvciBVbml4CitlbHNlOgorCisgICAgaW1wb3J0IGNvbW1hbmRzCisKKyAgICAjIEBXQVJOSU5HOiB1c2UgdGhlIHByaXZhdGUgQVBJIG9mIHRoZSB3ZWJicm93c2VyIG1vZHVsZQorICAgIGZyb20gd2ViYnJvd3NlciBpbXBvcnQgX2lzY29tbWFuZAorCisgICAgY2xhc3MgS2ZtQ2xpZW50KENvbnRyb2xsZXIpOgorICAgICAgICAnJydDb250cm9sbGVyIGZvciB0aGUgS0RFIGtmbWNsaWVudCBwcm9ncmFtLicnJworCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZm1jbGllbnQ9J2tmbWNsaWVudCcpOgorICAgICAgICAgICAgc3VwZXIoS2ZtQ2xpZW50LCBzZWxmKS5fX2luaXRfXyhrZm1jbGllbnQsICdleGVjJykKKyAgICAgICAgICAgIHNlbGYua2RlX3ZlcnNpb24gPSBzZWxmLmRldGVjdF9rZGVfdmVyc2lvbigpCisKKyAgICAgICAgZGVmIGRldGVjdF9rZGVfdmVyc2lvbihzZWxmKToKKyAgICAgICAgICAgIGtkZV92ZXJzaW9uID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGluZm8gPSBjb21tYW5kcy5nZXRvdXRwdXQoJ2tkZS1jb25maWcgLS12ZXJzaW9uJykKKworICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGluZm8uc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0tERScpOgorICAgICAgICAgICAgICAgICAgICAgICAga2RlX3ZlcnNpb24gPSBsaW5lLnNwbGl0KCc6JylbLTFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICByZXR1cm4ga2RlX3ZlcnNpb24KKworICAgICAgICBkZWYgZml4cmV0dXJuY29kZShzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgICAgIGlmIHJldHVybmNvZGUgaXMgbm90IE5vbmUgYW5kIHNlbGYua2RlX3ZlcnNpb24gPiAnMy41LjQnOgorICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5jb2RlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBvcy5FWF9PSworCisgICAgZGVmIGRldGVjdF9kZXNrdG9wX2Vudmlyb25tZW50KCk6CisgICAgICAgICcnJ0NoZWNrcyBmb3Iga25vd24gZGVza3RvcCBlbnZpcm9ubWVudHMKKworICAgICAgICBSZXR1cm4gdGhlIGRlc2t0b3AgZW52aXJvbm1lbnRzIG5hbWUsIGxvd2VyY2FzZSAoa2RlLCBnbm9tZSwgeGZjZSkKKyAgICAgICAgb3IgImdlbmVyaWMiCisKKyAgICAgICAgJycnCisKKyAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICdnZW5lcmljJworCisgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCdLREVfRlVMTF9TRVNTSU9OJykgPT0gJ3RydWUnOgorICAgICAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICdrZGUnCisgICAgICAgIGVsaWYgb3MuZW52aXJvbi5nZXQoJ0dOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCcpOgorICAgICAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICdnbm9tZScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbmZvID0gY29tbWFuZHMuZ2V0b3V0cHV0KCd4cHJvcCAtcm9vdCBfRFRfU0FWRV9NT0RFJykKKyAgICAgICAgICAgICAgICBpZiAnID0gInhmY2U0IicgaW4gaW5mbzoKKyAgICAgICAgICAgICAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICd4ZmNlJworICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gZGVza3RvcF9lbnZpcm9ubWVudAorCisKKyAgICBkZWYgcmVnaXN0ZXJfWF9jb250cm9sbGVycygpOgorICAgICAgICBpZiBfaXNjb21tYW5kKCdrZm1jbGllbnQnKToKKyAgICAgICAgICAgIF9jb250cm9sbGVyc1sna2RlLW9wZW4nXSA9IEtmbUNsaWVudCgpCisKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gKCdnbm9tZS1vcGVuJywgJ2V4by1vcGVuJywgJ3hkZy1vcGVuJyk6CisgICAgICAgICAgICBpZiBfaXNjb21tYW5kKGNvbW1hbmQpOgorICAgICAgICAgICAgICAgIF9jb250cm9sbGVyc1tjb21tYW5kXSA9IENvbnRyb2xsZXIoY29tbWFuZCkKKworICAgIGRlZiBnZXQoKToKKyAgICAgICAgY29udHJvbGxlcnNfbWFwID0geworICAgICAgICAgICAgJ2dub21lJzogJ2dub21lLW9wZW4nLAorICAgICAgICAgICAgJ2tkZSc6ICdrZGUtb3BlbicsCisgICAgICAgICAgICAneGZjZSc6ICdleG8tb3BlbicsCisgICAgICAgIH0KKworICAgICAgICBkZXNrdG9wX2Vudmlyb25tZW50ID0gZGV0ZWN0X2Rlc2t0b3BfZW52aXJvbm1lbnQoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRyb2xsZXJfbmFtZSA9IGNvbnRyb2xsZXJzX21hcFtkZXNrdG9wX2Vudmlyb25tZW50XQorICAgICAgICAgICAgcmV0dXJuIF9jb250cm9sbGVyc1tjb250cm9sbGVyX25hbWVdLm9wZW4KKworICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpZiBfY29udHJvbGxlcnMuaGFzX2tleSgneGRnLW9wZW4nKToKKyAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRyb2xsZXJzWyd4ZGctb3BlbiddLm9wZW4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHdlYmJyb3dzZXIub3BlbgorCisKKyAgICBpZiBvcy5lbnZpcm9uLmdldCgiRElTUExBWSIpOgorICAgICAgICByZWdpc3Rlcl9YX2NvbnRyb2xsZXJzKCkKKyAgICBfb3BlbiA9IGdldCgpCisKKworZGVmIG9wZW4oZmlsZW5hbWUpOgorICAgICcnJ09wZW4gYSBmaWxlIG9yIGFuIFVSTCBpbiB0aGUgcmVnaXN0ZXJlZCBkZWZhdWx0IGFwcGxpY2F0aW9uLicnJworCisgICAgcmV0dXJuIF9vcGVuKGZpbGVuYW1lKQo=